【发布时间】:2020-04-06 12:26:07
【问题描述】:
我有一个简单的线性回归模型:
Y = 平均能量,X = A + B
我的数据集仅包含 23 行。
因此,为了得到模型的训练R2,我做了5折交叉验证(cv)。
Python 中使用的模型是 scikit 的 LinearRegression,R 中是 lm。
为了在 Python 中做 cv,我在 scikit-learn 中使用了 cross_validate 函数,cross_validate(model, X, Y, cv=5, scoring='r2')。
要在 R 中执行 cv,我使用了插入符号包 model <- train(Y ~ A + B ,data = df, method = "lm", trControl = train.control)trControl=trainControl(method = "cv", number = 5)。然后使用model$resample查看简历R2。
与 Python 相比,R 中的 cv R2 波动很大。请参阅下面的结果。知道为什么吗?谢谢。
注意下面的R2不是测试分数,是模型的训练R2。
在 R 中训练 cv R2:
Fold 1 = 0.6686680
Fold 2 = 0.3571826
Fold 3 = 0.8858084
Fold 4 = 0.7081766
Fold 5 = 0.3101449
用 Python 训练 cv R2:
Fold 1 = 0.29353287
Fold 2 = 0.24257606
Fold 3 = 0.38664367
Fold 4 = 0.26943862
Fold 5 = 0.24531835
仅供参考,对于 R 交叉验证,我指的是 https://quantdev.ssri.psu.edu/tutorials/cross-validation-tutorial
数据集:https://drive.google.com/file/d/1rLeJ9_myCboM4jzX0wZ9rSZ3s9aRpLTo/view?usp=sharing
Y, A, B
12.48, 0.22, 0.33
5.32, 0.11, 0.22
13.71, 0.33, 0.44
27.48, 0.56, 0.44
3.87, 0.22, 0.56
3.88, 0.33, 0.11
37.90, 0.56, 0.11
10.62, 0.44, 0.22
41.71, 0.44, 0.44
1.96, 0.11, 0.33
25.14, 0.22, 0.33
2.25, 0.33, 0.33
9.73, 0.11, 0.22
8.67, 0.44, 0.33
3.80, 0.56, 0.33
35.90, 0.44, 0.33
3.43, 0.33, 0.11
6.68, 0.11, 0.56
13.54, 0.44, 0.44
8.04, 0.33, 0.22
6.41, 0.56, 0.11
31.67, 0.11, 0.67
70.59, 0.33, 0.56
【问题讨论】:
-
有趣的问题。您能否发布一个指向您的 csv 的链接,或者只是将要读取的数据硬编码到数据框中,以便我们可以重现它?
-
@MaxPower 我添加了 csv 链接
-
python的型号是什么?
-
@PV8 scikit 线性回归。我会在帖子里说清楚
标签: python r machine-learning scikit-learn cross-validation