私は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])
y_testはnumpy配列ですか? – FrAxl93
いいえ、次のようなリストです: [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
しかし、私の質問です:y_test_arrayのy_testを変更しましたが、コードではまだy_testを使用していますか?このエラーはy_testがリストであり、配列がないことを示唆しているためです。 y_test.shapeの結果を教えてください。 – FrAxl93