最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解

 更新時間:2022年06月07日 16:01:30   作者:坐望云起  
這篇文章主要介紹了使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解,該示例包括生成數(shù)據(jù)集、為數(shù)據(jù)集選擇合適的機(jī)器學(xué)習(xí)模型、構(gòu)建、配置和訓(xùn)練它,最后解釋結(jié)果,即混淆矩陣,需要的朋友可以參考下

一、混淆矩陣概述

在訓(xùn)練了有監(jiān)督的機(jī)器學(xué)習(xí)模型(例如分類器)之后,您想知道它的工作情況。

這通常是通過將一小部分稱為測試集的數(shù)據(jù)分開來完成的,該數(shù)據(jù)用作模型以前從未見過的數(shù)據(jù)。

如果它在此數(shù)據(jù)集上表現(xiàn)良好,那么該模型很可能在其他數(shù)據(jù)上也表現(xiàn)良好 - 當(dāng)然,如果它是從與您的測試集相同的分布中采樣的。

現(xiàn)在,當(dāng)您測試您的模型時,您向其提供數(shù)據(jù) - 并將預(yù)測與基本事實進(jìn)行比較,測量真陽性、真陰性、假陽性和假陰性的數(shù)量。這些隨后可以在視覺上吸引人的混淆矩陣中可視化。

在今天我們將學(xué)習(xí)如何使用 Scikit-learn 創(chuàng)建這樣的混淆矩陣,Scikit-learn 是當(dāng)今機(jī)器學(xué)習(xí)社區(qū)中使用最廣泛的機(jī)器學(xué)習(xí)框架之一。通過使用 Python 創(chuàng)建的示例,展示如何生成一個矩陣,您可以使用該矩陣輕松直觀地確定模型的性能。

1、示例1

一個混淆矩陣的例子

它是一個歸一化的混淆矩陣。它的描述了兩個度量:

True label,這是您的測試集所代表的基本事實。

Predicted label,即機(jī)器學(xué)習(xí)模型對與真實標(biāo)簽對應(yīng)的特征生成的預(yù)測。

例如,在上面的模型中,對于所有真實標(biāo)簽 1,預(yù)測標(biāo)簽為 1。這意味著來自第 1 類的所有樣本都被正確分類。

對于其他類,性能也不錯,但稍差一些。如您所見,對于第 2 類,一些樣本被預(yù)測為第 0 類和第 1 類的一部分。

簡而言之,它回答了“對于我的真實標(biāo)簽/基本事實,模型的預(yù)測效果如何?”這個問題。

2、示例2

也可以從預(yù)測的角度看,問題將變?yōu)?ldquo;對于我的預(yù)測標(biāo)簽,有多少預(yù)測實際上是預(yù)測類別的一部分?”。這是相反的觀點,但在許多機(jī)器學(xué)習(xí)案例中可能是一個有意義的問題。

最優(yōu)情況,是整個真實標(biāo)簽集等于預(yù)測標(biāo)簽集。在這些情況下,除了從左上角到右下角的線之外,您會在各處看到零。然而,在實踐中,這種情況并不經(jīng)常發(fā)生。很可能更加分散,例如下面這個 SVM 分類器,其中需要許多支持向量來繪制不能完美工作但足夠充分的決策邊界:

二、使用Scikit-learn 創(chuàng)建混淆矩陣

現(xiàn)在創(chuàng)建一個混淆矩陣。將使用 Python 和 Scikit-learn。

創(chuàng)建混淆矩陣涉及多個步驟:

1、生成示例數(shù)據(jù)集。需要數(shù)據(jù)來訓(xùn)練我們的模型。因此,我們將首先生成數(shù)據(jù),以便我們接下來可以為 ML 模型類做出適當(dāng)?shù)倪x擇。

2、選擇機(jī)器學(xué)習(xí)模型類。顯然,如果我們要評估一個模型,我們需要訓(xùn)練一個模型。我們將首先選擇適合我們數(shù)據(jù)特征的特定類型的模型。

3、構(gòu)建和訓(xùn)練 ML 模型。前兩個步驟的結(jié)果是我們最終得到了一個訓(xùn)練有素的模型。

4、生成混淆矩陣。最后,基于訓(xùn)練好的模型,我們可以創(chuàng)建我們的混淆矩陣。

1、相應(yīng)軟件包

需要以下包,假定已經(jīng)安裝好了Python環(huán)境、Scikit-learn、Numpy、Matplotlib、Mlxtend

2、生成示例數(shù)據(jù)集

第一步是生成示例數(shù)據(jù)集。我們也將為此目的使用 Scikit-learn。首先,創(chuàng)建一個名為 的文件confusion-matrix.py

(1)導(dǎo)入相關(guān)的包

# Imports
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

Scikit-learn的make_blobs功能可以生成樣本的“blob”或集群。這些斑點以某個點為中心,并且樣本基于某個標(biāo)準(zhǔn)偏差分散在該點周圍。這使您可以靈活地確定生成的數(shù)據(jù)集的位置和結(jié)構(gòu),從而使您可以試驗各種 ML 模型。

在評估模型時,我們需要確保數(shù)據(jù)集在訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)之間進(jìn)行分割。Scikit-learn使用train_test_split函數(shù)實現(xiàn)分割。

(2)相關(guān)配置

# Configuration options
blobs_random_seed = 42
centers = [(0,0), (5,5), (0,5), (2,3)]
cluster_std = 1.3
frac_test_split = 0.33
num_features_for_samples = 4
num_samples_total = 5000

隨機(jī)種子描述了用于生成數(shù)據(jù)塊的偽隨機(jī)數(shù)生成器的初始化。您可能知道,沒有隨機(jī)數(shù)生成器是真正隨機(jī)的。更重要的是,它們的初始化方式也不同。配置固定種子可確保每次運行腳本時,隨機(jī)數(shù)生成器都以相同的方式初始化。如果出現(xiàn)奇怪的行為,您就知道它可能不是隨機(jī)數(shù)生成器。

中心描述了我們數(shù)據(jù)塊的二維空間中的中心。如您所見,我們今天有 4 個 blob。

聚類標(biāo)準(zhǔn)差描述了從隨機(jī)點生成器使用的抽樣分布中抽取樣本的標(biāo)準(zhǔn)差。我們將其設(shè)置為 1.3;較低的數(shù)字會產(chǎn)生更好分離的集群,反之亦然。

訓(xùn)練/測試拆分的比例決定了為了測試目的拆分了多少數(shù)據(jù)。在我們的例子中,這是 33% 的數(shù)據(jù)。

我們樣本的特征數(shù)量是 4,并且確實描述了我們有多少目標(biāo):4,因為我們有 4 個數(shù)據(jù)塊。

最后,生成的樣本數(shù)量。我們將其設(shè)置為 5000 個樣本。

(3)生成數(shù)據(jù)

# Generate data
inputs, targets = make_blobs(n_samples = num_samples_total, centers = centers, n_features = num_features_for_samples, cluster_std = cluster_std)
X_train, X_test, y_train, y_test = train_test_split(inputs, targets, test_size=frac_test_split, random_state=blobs_random_seed)

(4)保存數(shù)據(jù)(可選)

# Save and load temporarily
np.save('./data_cf.npy', (X_train, X_test, y_train, y_test))
X_train, X_test, y_train, y_test = np.load('./data_cf.npy', allow_pickle=True)

(5)可視化數(shù)據(jù)

# Generate scatter plot for training data 
plt.scatter(X_train[:,0], X_train[:,1])
plt.title('Linearly separable data')
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()

3、訓(xùn)練一個SVM

(1)導(dǎo)入相關(guān)包

from sklearn import svm
from sklearn.metrics import plot_confusion_matrix
from mlxtend.plotting import plot_decision_regions

(2)訓(xùn)練分類器

# Initialize SVM classifier
clf = svm.SVC(kernel='linear')
 
# 擬合數(shù)據(jù)
clf = clf.fit(X_train, y_train)

4、生成混淆矩陣

它是評估步驟的一部分,我們用它來可視化它在測試集上的預(yù)測和泛化能力。

使用plot_confusion_matrix調(diào)用為我們解決了這個問題,我們只需向它提供分類器 (clf)、測試集 (X_testy_test)、顏色圖以及是否對數(shù)據(jù)進(jìn)行歸一化。

# Generate confusion matrix
matrix = plot_confusion_matrix(clf, X_test, y_test,
                                 cmap=plt.cm.Blues,
                                 normalize='true')
plt.title('Confusion matrix for our classifier')
plt.show(matrix)
plt.show()

5、可視化邊界

如果要生成邊界圖,需要安裝 Mlxtend

# Get support vectors
support_vectors = clf.support_vectors_
 
# Visualize support vectors
plt.scatter(X_train[:,0], X_train[:,1])
plt.scatter(support_vectors[:,0], support_vectors[:,1], color='red')
plt.title('Linearly separable data with support vectors')
plt.xlabel('X1')
plt.ylabel('X2')
plt.show()
 
# Plot decision boundary
plot_decision_regions(X_test, y_test, clf=clf, legend=2)
plt.show()

唯一表現(xiàn)不佳的班級是第 3 類,得分為 0.68。這可以通過查看決策邊界圖中的類來解釋。在這里,由于這些樣本被其他樣本包圍,很明顯模型在生成決策邊界時遇到了很大的困難。例如,我們可以通過使用考慮到這一點的不同內(nèi)核函數(shù)來解決這個問題,從而確保更好的可分離性。

? 以上就是我們使用 Python 和 Scikit-learn 創(chuàng)建了一個混淆矩陣。在研究了混淆矩陣是什么,以及它如何顯示真陽性、真陰性、假陽性和假陰性之后,我們給出了一個自己創(chuàng)建示例。

該示例包括生成數(shù)據(jù)集、為數(shù)據(jù)集選擇合適的機(jī)器學(xué)習(xí)模型、構(gòu)建、配置和訓(xùn)練它,最后解釋結(jié)果,即混淆矩陣。

到此這篇關(guān)于使用Python和scikit-learn創(chuàng)建混淆矩陣的文章就介紹到這了,更多相關(guān)Python和scikit-learn混淆矩陣內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中元組解構(gòu)的技巧詳解

    Python中元組解構(gòu)的技巧詳解

    在Python中,元組(tuple)是一種常用的數(shù)據(jù)結(jié)構(gòu),元組的解構(gòu)是一項強大的特性,快速、方便地將元組中的值分配給多個變量,下面我們就來學(xué)習(xí)一下Python中元組解構(gòu)的技巧吧
    2024-01-01
  • Python中的heapq模塊源碼詳析

    Python中的heapq模塊源碼詳析

    這篇文章主要給大家介紹了關(guān)于Python中heapq模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 教你用Python實現(xiàn)簡易版學(xué)生信息管理系統(tǒng)(含源碼)

    教你用Python實現(xiàn)簡易版學(xué)生信息管理系統(tǒng)(含源碼)

    學(xué)生管理信息系統(tǒng)主要用來日常查詢學(xué)生信息,以及及時更新數(shù)據(jù)和修改數(shù)據(jù).用python實現(xiàn)簡單學(xué)生管理信息系統(tǒng)不僅可以滿足以上要求,也可以鞏固之前學(xué)習(xí)的基礎(chǔ),需要的朋友可以參考下
    2021-06-06
  • PyTorch中flatten()?函數(shù)的用法實例小結(jié)

    PyTorch中flatten()?函數(shù)的用法實例小結(jié)

    在PyTorch中,flatten函數(shù)的作用是將一個多維的張量轉(zhuǎn)換為一維的向量,它可以將任意形狀的張量轉(zhuǎn)換為一維,而不需要指定轉(zhuǎn)換后的大小,這篇文章主要介紹了PyTorch中flatten()?函數(shù)的用法,需要的朋友可以參考下
    2023-11-11
  • Python實現(xiàn)Excel表內(nèi)關(guān)鍵字查修改刪

    Python實現(xiàn)Excel表內(nèi)關(guān)鍵字查修改刪

    在日常辦公和數(shù)據(jù)處理中,Excel作為最常用的表格工具,承載著海量業(yè)務(wù)數(shù)據(jù),但對于有些場景也會力不從心,本文將使用Python開發(fā)一個Excel表內(nèi)關(guān)鍵字查修改刪工具,需要的可以參考下
    2025-04-04
  • Python 字典與字符串的互轉(zhuǎn)實例

    Python 字典與字符串的互轉(zhuǎn)實例

    下面小編就為大家?guī)硪黄狿ython 字典與字符串的互轉(zhuǎn)實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • pandas DataFrame索引行列的實現(xiàn)

    pandas DataFrame索引行列的實現(xiàn)

    這篇文章主要介紹了pandas DataFrame索引行列的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python入門篇之?dāng)?shù)字

    Python入門篇之?dāng)?shù)字

    本文的主題是 Python 中的數(shù)字。會詳細(xì)介紹每一種數(shù)字類型,它們適用的各種運算符, 以及用于處理數(shù)字的內(nèi)建函數(shù)。在文章的末尾, 簡單介紹了幾個標(biāo)準(zhǔn)庫中用于處理數(shù)字的模塊。
    2014-10-10
  • Python中實現(xiàn)輸入一個整數(shù)的案例

    Python中實現(xiàn)輸入一個整數(shù)的案例

    這篇文章主要介紹了Python中實現(xiàn)輸入一個整數(shù)的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python入門篇之編程習(xí)慣與特點

    Python入門篇之編程習(xí)慣與特點

    本文是Python入門篇的第一篇文章,主要講述了Python編程習(xí)慣和特點等一些基礎(chǔ)知識,有需要的朋友可以參考下
    2014-10-10

最新評論

和林格尔县| 曲水县| 志丹县| 江源县| 郑州市| 大宁县| 阳谷县| 鹤庆县| 沧源| 萨迦县| 丁青县| 崇文区| 海南省| 姚安县| 晋江市| 新郑市| 隆德县| 荆州市| 许昌市| 两当县| 区。| 肥城市| 皋兰县| 马鞍山市| 临沧市| 赫章县| 清原| 临邑县| 吉水县| 瑞丽市| 汨罗市| 舞阳县| 虞城县| 涞水县| 招远市| 广元市| 汶川县| 穆棱市| 马龙县| 肃南| 修水县|