roc_curve:索引必须是整数,而不是元组

时间:2017-06-24 13:43:19

标签: python scikit-learn neural-network roc

我正在尝试绘制ROC,因此使用sklearn.metrics.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

我尝试添加一行显式将输入数据转换为数组(我在另一篇文章中读到的相同错误消息的建议)。现在,这会给 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])

1 个答案:

答案 0 :(得分:0)

数组只是一个元素序列。您可以使用它在数组中的位置来访问 i 元素:

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

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

" B"元素1(从零开始)

当您使用二维数组(也称为矩阵)时,您需要两个索引来唯一标识元素:

public String exec(String command) throws IOException, InterruptedException {
    Process p = Runtime.getRuntime().exec(new String[] { "bash", "-c", command });
    InputStreamReader is = new InputStreamReader(p.getInputStream());
    BufferedReader reader = new BufferedReader(is);
    String output = TextUtils.join("\n", this.read(reader));
    p.waitFor();
    return output;
}

" CA"是元素[2,0]

在NumPy中,您可以通过"来解决整个行或列。 " 所以mat [:,0]表示"列的所有行(也就是第一列)

或者您可以访问一系列元素。 mat [2:5,0]表示"矩阵的第一行中的2到4(包括)元素"

出现问题,您正尝试使用两个索引访问一个平面数组。可能昏迷是错误的,因为你想要访问从0到" i"的元素。