【发布时间】:2020-09-08 06:14:18
【问题描述】:
我有一个二元分类问题
首先我训练测试将我的数据拆分为:
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
我检查了 y_train,它基本上有两个类 (1,0) 的 50/50 拆分,这就是它的数据集
当我尝试以下基本模型时:
model = RandomForestClassifier()
model.fit(X_train, y_train)
model.score(X_train, y_train)
输出为 0.98 或 1% 的差异,具体取决于训练测试拆分的随机状态。
但是,当我尝试使用 cross_val_score 时,例如:
cross_val_score(model, X_train, y_train, cv=StratifiedKFold(shuffle=True), scoring='accuracy')
输出是
array([0.65 , 0.78333333, 0.78333333, 0.66666667, 0.76666667])
数组中没有一个分数接近0.98?
当我尝试 score = 'r2' 时,我得到了
>>>cross_val_score(model, X_train, y_train, cv=StratifiedKFold(shuffle=True), scoring='r2')
array([-0.20133482, -0.00111235, -0.2 , -0.2 , -0.13333333])
有人知道为什么会这样吗?我试过Shuffle = True 和False 但没有帮助。
提前致谢
【问题讨论】:
-
为什么是 Z_train 而不是 X_train?你确定它的训练是正确的吗
-
抱歉,这是 StackOverflow 中的错字,不是实际代码中的错字,不过感谢您指出这一点
-
@iLoveItWhenUCallMeBigData 你是在训练集上计算分数还是错字?
-
是的.. 如果您在训练集上进行计算,则模型已使用训练数据进行拟合。更公平的比较是计算测试分数
标签: python machine-learning scikit-learn classification cross-validation