<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在訓練了有監督的機器學習模型(例如分類器)之後,您想知道它的工作情況。
這通常是通過將一小部分稱為測試集的資料分開來完成的,該資料用作模型以前從未見過的資料。
如果它在此資料集上表現良好,那麼該模型很可能在其他資料上也表現良好 - 當然,如果它是從與您的測試集相同的分佈中取樣的。
現在,當您測試您的模型時,您向其提供資料 - 並將預測與基本事實進行比較,測量真陽性、真陰性、假陽性和假陰性的數量。這些隨後可以在視覺上吸引人的混淆矩陣中視覺化。
在今天我們將學習如何使用 Scikit-learn 建立這樣的混淆矩陣,Scikit-learn 是當今機器學習社群中使用最廣泛的機器學習框架之一。通過使用 Python 建立的範例,展示如何生成一個矩陣,您可以使用該矩陣輕鬆直觀地確定模型的效能。
一個混淆矩陣的例子
它是一個歸一化的混淆矩陣。它的描述了兩個度量:
True label,這是您的測試集所代表的基本事實。
Predicted label,即機器學習模型對與真實標籤對應的特徵生成的預測。
例如,在上面的模型中,對於所有真實標籤 1,預測標籤為 1。這意味著來自第 1 類的所有樣本都被正確分類。
對於其他類,效能也不錯,但稍差一些。如您所見,對於第 2 類,一些樣本被預測為第 0 類和第 1 類的一部分。
簡而言之,它回答了“對於我的真實標籤/基本事實,模型的預測效果如何?”這個問題。
也可以從預測的角度看,問題將變為“對於我的預測標籤,有多少預測實際上是預測類別的一部分?”。這是相反的觀點,但在許多機器學習案例中可能是一個有意義的問題。
最優情況,是整個真實標籤集等於預測標籤集。在這些情況下,除了從左上角到右下角的線之外,您會在各處看到零。然而,在實踐中,這種情況並不經常發生。很可能更加分散,例如下面這個 SVM 分類器,其中需要許多支援向量來繪製不能完美工作但足夠充分的決策邊界:
現在建立一個混淆矩陣。將使用 Python 和 Scikit-learn。
建立混淆矩陣涉及多個步驟:
1、生成範例資料集。需要資料來訓練我們的模型。因此,我們將首先生成資料,以便我們接下來可以為 ML 模型類做出適當的選擇。
2、選擇機器學習模型類。顯然,如果我們要評估一個模型,我們需要訓練一個模型。我們將首先選擇適合我們資料特徵的特定型別的模型。
3、構建和訓練 ML 模型。前兩個步驟的結果是我們最終得到了一個訓練有素的模型。
4、生成混淆矩陣。最後,基於訓練好的模型,我們可以建立我們的混淆矩陣。
需要以下包,假定已經安裝好了Python環境、Scikit-learn、Numpy、Matplotlib、Mlxtend
第一步是生成範例資料集。我們也將為此目的使用 Scikit-learn。首先,建立一個名為 的檔案confusion-matrix.py
。
(1)匯入相關的包
# 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”或叢集。這些斑點以某個點為中心,並且樣本基於某個標準偏差分散在該點周圍。這使您可以靈活地確定生成的資料集的位置和結構,從而使您可以試驗各種 ML 模型。
在評估模型時,我們需要確保資料集在訓練資料和測試資料之間進行分割。Scikit-learn使用train_test_split
函數實現分割。
(2)相關設定
# 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
隨機種子描述了用於生成資料塊的偽亂數生成器的初始化。您可能知道,沒有亂數生成器是真正隨機的。更重要的是,它們的初始化方式也不同。設定固定種子可確保每次執行指令碼時,亂數生成器都以相同的方式初始化。如果出現奇怪的行為,您就知道它可能不是亂數生成器。
中心描述了我們資料塊的二維空間中的中心。如您所見,我們今天有 4 個 blob。
聚類標準差描述了從隨機點生成器使用的抽樣分佈中抽取樣本的標準差。我們將其設定為 1.3;較低的數位會產生更好分離的叢集,反之亦然。
訓練/測試拆分的比例決定了為了測試目的拆分了多少資料。在我們的例子中,這是 33% 的資料。
我們樣本的特徵數量是 4,並且確實描述了我們有多少目標:4,因為我們有 4 個資料塊。
最後,生成的樣本數量。我們將其設定為 5000 個樣本。
(3)生成資料
# 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)儲存資料(可選)
# 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)視覺化資料
# 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()
(1)匯入相關包
from sklearn import svm from sklearn.metrics import plot_confusion_matrix from mlxtend.plotting import plot_decision_regions
(2)訓練分類器
# Initialize SVM classifier clf = svm.SVC(kernel='linear') # 擬合資料 clf = clf.fit(X_train, y_train)
它是評估步驟的一部分,我們用它來視覺化它在測試集上的預測和泛化能力。
使用plot_confusion_matrix
呼叫為我們解決了這個問題,我們只需向它提供分類器 (clf
)、測試集 (X_test
和y_test
)、顏色圖以及是否對資料進行歸一化。
# 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()
如果要生成邊界圖,需要安裝 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()
唯一表現不佳的班級是第 3 類,得分為 0.68。這可以通過檢視決策邊界圖中的類來解釋。在這裡,由於這些樣本被其他樣本包圍,很明顯模型在生成決策邊界時遇到了很大的困難。例如,我們可以通過使用考慮到這一點的不同核心函數來解決這個問題,從而確保更好的可分離性。
以上就是我們使用 Python 和 Scikit-learn 建立了一個混淆矩陣。在研究了混淆矩陣是什麼,以及它如何顯示真陽性、真陰性、假陽性和假陰性之後,我們給出了一個自己建立範例。
該範例包括生成資料集、為資料集選擇合適的機器學習模型、構建、設定和訓練它,最後解釋結果,即混淆矩陣。
到此這篇關於使用Python和scikit-learn建立混淆矩陣的文章就介紹到這了,更多相關Python和scikit-learn混淆矩陣內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45