使用交叉验证和ROC评估逻辑回归

时间:2018-11-17 23:22:19

标签: python scikit-learn logistic-regression cross-validation sklearn-pandas

我正在尝试使用AUROC曲线评估logistic回归并交叉验证我的分数。当我不进行交叉验证时,我没有任何问题,但是我真的想使用交叉验证来减少方法的偏差。

无论如何,下面是我在代码开始部分得到的代码和错误术语:

X = df.drop('Survived', axis=1)
y = df['Survived']

skf = StratifiedKFold(n_splits=5)
logmodel = LogisticRegression()

i=0
for train, test in skf.split(X,y):
    logmodel.fit(X[train], y[train])   # error occurs here
    predictions = logmodel.predict_proba(X[test])
    # a bunch of code that I haven't included which creates the ROC curve
    i += 1

该错误发生在倒数第四行,并返回一个整数列表,后跟“不在索引中”

我真的不明白问题出在哪里吗?

这是我对代码的理解:首先,我创建了一个分层kfold和逻辑回归的实例。分层的kfold实例表明要进行五折。接下来,我说对于数据集X中的每个训练和测试折叠,y使逻辑模型适合数据,然后根据测试数据创建针对不同概率的预测列表。稍后(此部分未显示),我将为每个k倍数据创建一个ROC曲线。

再说一次,我不是很了解问题所在,但也许有人可以澄清。我的作品或多或少直接从sklearn中的此链接复制的:https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html#sphx-glr-auto-examples-model-selection-plot-roc-crossval-py

1 个答案:

答案 0 :(得分:0)

请添加更多详细信息,以便对其进行真实检查。最好(并且实际上是必需的)一段可以运行以查看错误的代码。

在第一个视图中,您获取了一个熊猫数据框并将其输入到模型中,这是不正确的。 请参阅以下正确的行以获取数据并将其提供给模型:

X = df.drop('Survived', axis=1).values
y = df['Survived'].values

后缀.values访问存储在这些数据框中的numpy数据对象,这与其余代码一致。

希望能帮助您解决错误。

祝你好运!