2017-06-24 13 views
-1

私はROCをプロットしようとしており、sklearn.metrics.roc_curve関数を使って偽陽性率と陰性率を計算しています。ここに私自身の機能で自分のデータをベクトル化し、形質転換させた後roc_curve:インデックスはタプルではなく整数でなければなりません

roc_data = *somedataframeimport* 

X_train, X_test, y_train, y_test = split_vect_trans(roc_data) 

、私はそれにNNにフィットし、予測を行います。

nn_roc = OneVsRestClassifier(MLPClassifier()) 
nn_roc = nn_roc.fit(X_train, y_train) 

pred = nn_roc.predict(X_test) 


fpr = dict() 
tpr = dict() 
roc_auc = dict() 

for i in range(len(y_score)): 
    fpr[i], tpr[i], _ = metrics.roc_curve(y_test[:, i], y_score[:, i]) 
    roc_auc[i] = metrics.auc(fpr[i], tpr[i]) 

データをroc_curve関数に渡すときは、必ず次のエラーメッセージが表示されます。

  5 for i in range(len(y_score)): 
    ----> 6  fpr[i], tpr[i], _ = metrics.roc_curve(y_test[:, i], y_score[:, i]) 
      7  roc_auc[i] = metrics.auc(fpr[i], tpr[i]) 
TypeError: list indices must be integers, not tuple 

Iは、明示的に配列(I同じエラーメッセージのために別のポストに読み取る提案)に入力データを変換する行を追加しようとしました。 IndexError:配列のインデックスが多すぎます。エラーメッセージです。

y_test_array = np.asarray(y_test) 
y_score = np.asarray(pred) 

for i in range(len(y_score)): 
    fpr[i], tpr[i], _ = metrics.roc_curve(y_test[:, i], y_score[:, i]) 
    roc_auc[i] = metrics.auc(fpr[i], tpr[i]) 
+0

y_testはnumpy配列ですか? – FrAxl93

+0

いいえ、次のようなリストです: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1 、1、1、1] そのため、np.asarray()の部分を追加しようとしました。 – Lyyoness

+0

しかし、私の質問です:y_test_arrayのy_testを変更しましたが、コードではまだy_testを使用していますか?このエラーはy_testがリストであり、配列がないことを示唆しているためです。 y_test.shapeの結果を教えてください。 – FrAxl93

答えて

0

配列は単なる要素のシーケンスです。あなたは、私は、配列内の位置でそれに対処要素にアクセスすることができます。

| a | b | c | ...... |z| 

「B」の要素1(ゼロから始まる)

あなたの代わりに(行列別名)2次元配列を持っている場合、あなたは一意の要素を識別するために2つのインデックスを必要とする:

| aa | ab | .... | az | 
| ba | bb | .... . 
| ca | ...   . 
    .    . 
    .    . 

| za | zb | .... | zz | 

"CA" はnumpyの中の要素[2,0]

ありますもしによって行または列全体をアドレス指定することができ、「」 のでマット[:0]「欄ゼロ(最初の列別名)

それともの範囲にアクセスすることができるのすべての行を意味します要素。 mat [2:5,0]は「行列の最初の行の2から4(含まれる)要素」を意味します。

2つのインデックスでフラットな配列にアクセスしようとしています。おそらくあなたは0から "i"に要素にアクセスしたいので、おそらく昏睡は間違っています。

関連する問題