Python ROC曲线绘制

Python ROC曲线绘制,python,size,one-hot-encoding,indices,Python,Size,One Hot Encoding,Indices,尝试使用SVM绘制具有179列(作为特征)的大小为1200的数据集的ROC曲线会出现以下错误: '数组的索引太多' 代码: 回溯(最近一次调用上次)索引器 在里面 ---->1 Y_predt=Y_pred[:,1] 索引器:数组的索引太多 您遇到的错误与“Y_pred[:,1]”中请求的和可用的索引有关。 您正在请求第1列的所有行(冒号“:”)(使用Python的零索引,实际上是第2列)。但是,Y_pred是一个numpy 1D数组(即没有列) 我不确定您在ns_predt=[0 for u

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

'数组的索引太多'

代码:


回溯(最近一次调用上次)索引器
在里面
---->1 Y_predt=Y_pred[:,1]
索引器:数组的索引太多

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

我不确定您在
ns_predt=[0 for u 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()

显示工作代码,以便能够重现errorY_pred的形状与您预期的不同,这就是为什么您的Y_pred[:,1]无法工作的原因。您能打印“Y_pred.shape”吗?Y_测试为480个实例的0,1个标签。Y_test.shape和Y_pred.shape给出的输出为(480,0),(480,0)。Y_pred根据上述代码给出的输出如下:[0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 0 0 1 0 0 0 1 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 1 0 1 0 0 ........ 1 1 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 0@ZarakiKenpachiY_pred.shape是(480,0)@Rens
Traceback (most recent call last) IndexError
<ipython-input-92-62de12967d46> in <module>
----> 1 Y_predt = Y_pred[:,1]

IndexError: too many indices for array
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()