5

多クラスのマルチラベル出力変数にランダムフォレスト分類子を実行しました。私は出力を下回った。Python scikitはマルチクラスのマルチラベルパフォーマンスメトリックを学習しますか?

My y_test values 


    Degree Nature 
762721  1  7        
548912  0  6 
727126  1  12 
14880  1  12 
189505  1  12 
657486  1  12 
461004  1  0 
31548  0  6 
296674  1  7 
121330  0  17 


predicted output : 

[[ 1. 7.] 
[ 0. 6.] 
[ 1. 12.] 
[ 1. 12.] 
[ 1. 12.] 
[ 1. 12.] 
[ 1. 0.] 
[ 0. 6.] 
[ 1. 7.] 
[ 0. 17.]] 

次に、分類器のパフォーマンスを確認します。私はマルチクラスのマルチラベルのために "ハミング損失またはjaccard_similarity_score"が良い指標であることを発見しました。私はそれを計算しようとしましたが、私は価値のエラーを得ていました。行の下

Error: 
ValueError: multiclass-multioutput is not supported 

私が試した:

print hamming_loss(y_test, RF_predicted) 
print jaccard_similarity_score(y_test, RF_predicted) 

おかげで、

+0

それはそれは、ライブラリでサポートされていない場合は、ハードこれを自分で実装することをすべきではありません。 – Zafi

答えて

3

をマルチクラス/マルチラベルのためのサポートされていないハミング損失を計算するには、可能性:

import numpy as np 
y_true = np.array([[1, 1], [2, 3]]) 
y_pred = np.array([[0, 1], [1, 2]]) 
np.sum(np.not_equal(y_true, y_pred))/float(y_true.size) 

0.75 

ます。また、取得することができます次のように2つのラベルのそれぞれについてconfusion_matrix

from sklearn.metrics import confusion_matrix, precision_score 
np.random.seed(42) 

y_true = np.vstack((np.random.randint(0, 2, 10), np.random.randint(2, 5, 10))).T 

[[0 4] 
[1 4] 
[0 4] 
[0 4] 
[0 2] 
[1 4] 
[0 3] 
[0 2] 
[0 3] 
[1 3]] 

y_pred = np.vstack((np.random.randint(0, 2, 10), np.random.randint(2, 5, 10))).T 

[[1 2] 
[1 2] 
[1 4] 
[1 4] 
[0 4] 
[0 3] 
[1 4] 
[1 3] 
[1 3] 
[0 4]] 

confusion_matrix(y_true[:, 0], y_pred[:, 0]) 

[[1 6] 
[2 1]] 

confusion_matrix(y_true[:, 1], y_pred[:, 1]) 

[[0 1 1] 
[0 1 2] 
[2 1 2]] 

またそう(または似の方法でrecall_score)のようなprecision_scoreを計算することができます:

precision_score(y_true[:, 0], y_pred[:, 0]) 

0.142857142857 
+0

ありがとうございます。そのような出力のための混乱マトリックスを得ることは可能ですか? – niranjan

+0

はい、更新された回答を参照してください。 – Stefan

+0

この構文はマルチクラスマルチ出力では機能しません。私はエラーが発生していますValueError:multiclass-multioutputはサポートされていません – niranjan

関連する問題