我正在尝试绘制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])
答案 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"的元素。