2016-03-30 4 views
0

私はいくつかのデータ(RBF SVM)でKFoldのクロスバリデーションを行っています。本当の陽性率と偽陽性率を確認するためにこのコードを持っています。時にはこのコードがエラーをスローします。クロスバリデーションのランダムシャッフルがすべてのクラスのセットを作成するたびにエラーが発生することに気付きました。例えば:まずクロスバリデーションされたsvmの感受性と特異性をチェックする際のエラー

sensitivity = 1.0 
specificity = 0.0 
[0 0 0 0 0 0 0 0] predicted 
[0 0 0 0 0 0 0 0] actual 

私はそう、私はif文でそれを修正しようとしたこのエラーは、それがゼロで割ることになるという事実によるものだと思いました。しかし、それでも私にはこのエラーが表示されます:

IndexError        Traceback (most recent call last) 
<ipython-input-56-0339ebc92e19> in <module>() 
    10 
    11  tn = float(cm[0][0])/np.sum(cm[0]) 
---> 12  if np.sum(cm[1]) == 0: 
    13   tp = 0 
    14  else: 

IndexError: index 1 is out of bounds for axis 0 with size 1 

私は問題の内容や解決方法を完全に失いました。 quesionのコード以下の通りです: - ゼロ利用できる唯一のクラスがありますので、あなたの場合は

for i, (train, test) in enumerate(kf_total): 
    y_pred = clf.fit(val[train], y[train]).predict(val[test]) 
    print y_pred,"predicted" 
    print y[test], "actual" 
    cm = confusion_matrix(y[test], y_pred) 

    tn = float(cm[0][0])/np.sum(cm[0]) 
    if np.sum(cm[1]) == 0: 
     tp = 0 
    else: 
     tp = float(cm[1][1])/np.sum(cm[1]) 

    print "sensitivity =", tp 
    print "specificity =", tn 

答えて

0

予測の次元*実際には、1×1になります。そのような行列要素1へのアドレッシングは、境界外のエラーを生成する。

+0

どうすればこの問題を解決できますか?それはすべてのゼロを予測し、実際には1つを含むエラーを与えません – bidby

+0

問題を解決する方法を実現しました!私は – bidby

+0

'if np.sum(y [test])== 0:'に1つのクラスだけの折り畳みを持たないように、層別kfoldを使い始めました。 [sklearnの混乱マトリクスに関する良い説明](http://stats.stackexchange.com/questions/95209/how-can-i-interpret-sklearn-confusion-matrix) – Alstof

関連する問題