使用交叉验证和 ROC 评估逻辑回归
Posted
技术标签:
【中文标题】使用交叉验证和 ROC 评估逻辑回归【英文标题】:Evaluating logistic regression using cross validation and ROC 【发布时间】:2019-04-20 17:49:48 【问题描述】:我正在尝试使用 AUROC 曲线评估逻辑回归并交叉验证我的分数。当我不进行交叉验证时,我没有任何问题,但我真的很想使用交叉验证来帮助减少我的方法中的偏差。
无论如何,下面是我得到的代码开头部分的代码和错误术语:
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
错误发生在倒数第四行,并返回一个整数列表,后跟'not in index'
我真的不明白问题出在哪里?
这是我对代码的理解:首先我创建了一个分层 kfold 和逻辑回归的实例。分层 kfold 的实例表明要进行五次折叠。接下来,我说对于我的数据集 X,y 中的每个训练和测试折叠,我将逻辑模型拟合到数据,然后根据测试数据创建不同概率的预测列表。稍后(这部分不展示)我会为每个k-fold数据创建一个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
【问题讨论】:
请参阅how to ask 问题指南。 请附上确切的错误行,以便我们查看错误。此外,您的标题具有误导性 - 您只是在逻辑模型中存在错误,而不是在验证步骤中(这里也不包括在内),并且您只是展示您所知道的,没有问题。您希望验证您的知识吗? X, y 是 pandas 对象。您需要使用iloc
来访问这些元素。见sklearn TimeSeriesSplit Error: KeyError: '[ 0 1 2 ...] not in index'。否则,您可以按照@mr_mo 的回答,首先将 pandas 对象转换为 numpy 数组。
@VivekKumar 谢谢!!!!这工作得很好。
【参考方案1】:
请添加更多详细信息,以便对其进行真正的检查。最好(并且实际上需要)一段可以运行以查看错误的代码。
从第一个视图开始,您获取一个 pandas 数据框并将其输入到模型中,这是不正确的。 请参阅以下正确检索数据并将其提供给模型的行:
X = df.drop('Survived', axis=1).values
y = df['Survived'].values
.values
后缀访问存储在这些数据帧中的 numpy 数据对象,这与其余代码一致。
希望能帮助您解决错误。
祝你好运!
【讨论】:
以上是关于使用交叉验证和 ROC 评估逻辑回归的主要内容,如果未能解决你的问题,请参考以下文章
Python 中的逻辑回归和交叉验证(使用 sklearn)