Python 交叉测试分数和训练测试分数之间的差异
我在使用python3.6和scikitlearn 0.18时遇到了一个问题 我用随机森林做了一个回归,回归很好,但是当我试图计算交叉验证时,我遇到了一个问题,即交叉验证分数和训练测试分割得到的分数确实不同。列车试验评分为0.9分,交叉试验评分平均值约为0.3分 你能告诉我原因吗? 或者我的代码有什么错误 代码是Python 交叉测试分数和训练测试分数之间的差异,python,Python,我在使用python3.6和scikitlearn 0.18时遇到了一个问题 我用随机森林做了一个回归,回归很好,但是当我试图计算交叉验证时,我遇到了一个问题,即交叉验证分数和训练测试分割得到的分数确实不同。列车试验评分为0.9分,交叉试验评分平均值约为0.3分 你能告诉我原因吗? 或者我的代码有什么错误 代码是 import numpy as np import cv2 import itertools from sklearn.tree import DecisionTreeRegress
import numpy as np
import cv2
import itertools
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.cross_validation import cross_val_score,cross_val_predict,ShuffleSplit,KFold
from sklearn.model_selection import train_test_split
train= np.loadtxt('.txt')
traindata=train[0:,38:]
traintarget=train[0:,j]
rf=RandomForestRegressor(n_estimators=20)
rf.fit(traindata,traintarget)
X=traindata
Y=traintarget
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
print (rf.score(X_test, Y_test))
score3 = cross_val_score(rf, X, Y, scoring= 'r2', cv=ShuffleSplit(n=len(X),test_size=0.3,train_size=0.6))
score4 = cross_val_score(rf, X, Y, scoring= 'neg_mean_absolute_error', cv=ShuffleSplit(n=len(X),test_size=0.3,train_size=0.6))
score5 = cross_val_score(rf, X, Y, scoring= 'neg_mean_squared_error', cv=ShuffleSplit(n=len(X),test_size=0.3,train_size=0.6))
print (score3)
print (score4)
print (score5)
当您使用train\u test\u split时,您将数据集拆分为随机的train和test Shufflesplit也没什么不同。问题可能是因为阶级分布极不均衡。(顺便说一句,记住一件事,在我的经验中,你使用的交叉验证总是会产生不好的结果)。相反,使用5倍交叉验证
如果类分布不均匀,也可以使用分层交叉验证。它保留每个类中样本的百分比。举个例子。我看到有人也有同样的问题。但我已经在两种方法中添加了随机样本。