Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用log_loss/roc_auc_得分或使用得分='的交叉值得分得出不同的结果;负对数损失'/';中华民国';(Scikit学习)_Python_Machine Learning_Scikit Learn_Classification_Auc - Fatal编程技术网

Python 使用log_loss/roc_auc_得分或使用得分='的交叉值得分得出不同的结果;负对数损失'/';中华民国';(Scikit学习)

Python 使用log_loss/roc_auc_得分或使用得分='的交叉值得分得出不同的结果;负对数损失'/';中华民国';(Scikit学习),python,machine-learning,scikit-learn,classification,auc,Python,Machine Learning,Scikit Learn,Classification,Auc,在探索Scikit learn中的一些分类模型时,我注意到,在进行交叉验证时,我得到的对数损失和ROC AUC得分始终低于在整个训练集上进行拟合和预测时的得分(用于检查过度拟合),这对我来说没有意义。 具体地说,使用cross\u validate我将评分设置为['neg\u log\u loss','roc\u auc'],在对训练集执行手动拟合和预测时,我使用了度量函数log\u loss'和roc\u auc\u score 为了弄清楚发生了什么,我编写了一个代码来手动执行交叉验证,以便能

在探索Scikit learn中的一些分类模型时,我注意到,在进行交叉验证时,我得到的对数损失和ROC AUC得分始终低于在整个训练集上进行拟合和预测时的得分(用于检查过度拟合),这对我来说没有意义。 具体地说,使用
cross\u validate
我将评分设置为
['neg\u log\u loss','roc\u auc']
,在对训练集执行手动拟合和预测时,我使用了度量函数
log\u loss'
roc\u auc\u score

为了弄清楚发生了什么,我编写了一个代码来手动执行交叉验证,以便能够在各种折叠上手动调用度量函数,并将结果与
cross\u validate
中的结果进行比较。正如你在下面看到的,即使这样,我也得到了不同的结果

从sklearn.model_选择导入分层折叠
kf=KFold(n_splits=3,random_state=42,shuffle=True)
log_reg=逻辑回归(最大iter=1000)
对于序列索引,在kf.split中测试索引(数据集,数据集标签):
X_序列,X_测试=数据集[序列索引],数据集[测试索引]
y\u序列,y\u测试=数据集\u标签\u np[序列索引],数据集\u标签\u np[测试索引]
日志注册匹配(X\U系列、y\U系列)
pr=对数校正预测(X检验)
ll=对数损耗(y检验,pr)
打印(ll)
从sklearn.model_选择导入交叉值_分数
cv\u ll=交叉值分数(记录、数据集准备、数据集标签、评分='neg\u log\u loss',
cv=KFold(n_分割=3,随机状态=42,随机播放=True))
打印(abs(简历))
产出:

4.795481869275026
4.560119170517534
5.589818973403791

[0.409817 0.32309  0.398375]
为ROC AUC运行相同代码的输出为:

0.8609669592272686
0.8678563239907938
0.8367147503682851

[0.925635 0.94032  0.910885]
为了确保代码编写正确,我还尝试了使用
'accurity'
作为交叉验证评分和
accurity\u score
作为度量函数的代码,结果是一致的:

0.8611584327086882
0.8679727427597955
0.838160136286201

[0.861158 0.867973 0.83816 ]

有人能解释一下为什么原木损失和ROC AUC的结果不同吗?谢谢

日志损失和auROC都需要概率预测,而不是硬类预测。所以改变

pr=log\u reg.predict(X\u测试)

pr=log\u reg.predict\u proba(X\u测试)[:,1]

(订阅是为了获取正类的概率,并假设您正在进行二进制分类)。

非常感谢,我忽略了它!(我注意到auc_roc_得分和log_损失都接受预测,而不选择正类的列,至少对于二元分类)