2017-07-16 204 views
0

有沒有可能保存由sklearn.metrics生成的混淆矩陣?保存混淆矩陣

我想將不同分類算法的多個結果保存在一個數組中,或者可能是熊貓數據框,這樣我就可以顯示哪種算法效果最好。

print('Neural net: \n',confusion_matrix(Y_test, Y_pred), sep=' ') 

如何將生成的混淆矩陣保存在循環中?

array[i] = confusion_matrix(Y_test,Y_pred) 

我運行(我的一組200個不同的目標變量的訓練以上)到這裏的一些定義的問題[陣列並不在非限定的,而[Ⅰ] - 版本它運行順利]

另外,我正在混淆矩陣。如何在整個循環後打印出混淆矩陣的平均結果? (200個不同的混淆矩陣的平均值)

我不是那種流利的python呢。

+0

你有沒有定義'array'?在python中,你需要定義一個列表,然後才能爲其元素賦值。 – Marein

回答

1

首先得到數組未定義的問題。 在Python列表聲明爲:

array=[] 

由於聲明中未給出列表的大小,不配置空間。因此,我們不能爲未分配的地點分配值。

array[i]=some value, but no space is allocated for array 

所以如果你知道數組所需的大小,聲明和使用數組這樣在填寫零或使用array.append()方法的循環中。

現在用於保存混淆矩陣: 由於混淆矩陣返回二維數組,因此您需要保存多個此類數組,因此請使用三維數組來保存該值。

import numpy as np 
matrix_result=np.zeroes((200,len(y_pred),len(y_pred))) 
for i in range(200): 
    matrix_result[i]=confusion_matrix(X_pred,y_pred) 

對於平均

matrix_result_average=matrix_result.mean(axis=0) 
+0

非常感謝您的回答。我已經嘗試過了,因爲我有一個二進制分類,我已經將len(y_pred),len(y_pred)設置爲2.我的混淆矩陣具有維度2x2。我試圖讓這個問題非常小的3次迭代,並將第一個維度設置爲3.然而,數組太小而不能保存第一次迭代的結果?混淆矩陣打印時的輸出格式也是[[fields]]格式。任何想法我做錯了什麼? – inneb

+0

似乎有我的循環,這是我在範圍內(13,停止)的東西。所以它會拋出一個IndexError異常,因爲我的索引是13,但矩陣的尺寸是(3,2,2)。我以15爲止點,並認爲這將適合於尺寸。:/ – inneb

+0

在範圍(3)中使用i,因爲您將3作爲第一維。混淆矩陣被打印爲[[結果]],因爲它是一維數組內的二維矩陣。 –

0

我不確定你的意思是通過對一組目標變量進行培訓(請詳細說明),但這裏是使用numpy對混淆矩陣進行平均的一個開始。

首先創建一個空結果矩陣,該矩陣是三維的,並且具有200個堆疊混淆矩陣的大小。然後在for循環中逐個填寫它們。最終得到的矩陣沿着目標的維數平均,導致平均混淆矩陣。

import numpy as np 

N = len(Y_pred) 
result = np.zeros((len(targets), N, N)) 
for i, target in enumerate(targets): 
    result[i] = confusion_matrix(Y_test, Y_pred) # do someting with target? 
print(result.mean(axis=0))