繁体   English   中英

ROC曲线绘制

[英]ROC curve plotting

尝试使用 SVM 绘制大小为 1200 的数据集具有 179 列(作为特征)的 ROC 曲线会出现以下错误:

'数组的索引太多'

代码:

 from sklearn.svm import SVC
 svclassifier = SVC(kernel='linear')

 svm = svclassifier.fit(X_train, Y_train).decision_function(X_test)

 Y_pred = svclassifier.predict(X_test)

 ns_predt = [0 for _ in range(len(Y_test))]

 Y_predt = Y_pred[:,1]

Traceback (most recent call last) IndexError
<ipython-input-92-62de12967d46> in <module>
----> 1 Y_predt = Y_pred[:,1]

IndexError: too many indices for array

您遇到的错误与“Y_pred[:,1]”中请求的和可用的索引有关。 您正在请求第 1 列的所有行(冒号“:”)(使用 Python 的零索引,这实际上是第二列)。 然而, Y_pred 是一个 numpy 一维数组(即没有列)。

我不确定您在ns_predt = [0 for _ in range(len(Y_test))]Y_predt = Y_pred[:,1] ,所以我不能给你一个替代方案。 但问题很明显:您正在请求不存在的列。

可以使用以下代码轻松复制该问题:

import pandas as pd
import numpy as np
import pdb
from sklearn.svm import SVC

print('Creating fake data..')
X_train = pd.DataFrame(np.random.randint(0,1000,size=(100, 4)), columns=list('ABCD'))
Y_train = pd.DataFrame(np.random.randint(0,10,size=(100, 1)), columns=list('E'))

X_test = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
Y_test = pd.DataFrame(np.random.randint(0,10,size=(100, 1)), columns=list('E'))

print('Initializing classifier')
svclassifier = SVC(kernel='linear')

print('Training the model')
svm = svclassifier.fit(X_train, Y_train).decision_function(X_test)

print('Predicting outcome')
Y_pred = svclassifier.predict(X_test)

print('... ? ...')
ns_predt = [0 for _ in range(len(Y_test))]
try:
    Y_predt = Y_pred[:,1]
except:
    print('I failed...')
    pdb.set_trace()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM