Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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 交叉测试分数和训练测试分数之间的差异_Python - Fatal编程技术网

Python 交叉测试分数和训练测试分数之间的差异

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

我在使用python3.6和scikitlearn 0.18时遇到了一个问题

我用随机森林做了一个回归,回归很好,但是当我试图计算交叉验证时,我遇到了一个问题,即交叉验证分数和训练测试分割得到的分数确实不同。列车试验评分为0.9分,交叉试验评分平均值约为0.3分

你能告诉我原因吗? 或者我的代码有什么错误

代码是

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倍交叉验证


如果类分布不均匀,也可以使用分层交叉验证。它保留每个类中样本的百分比。举个例子。

我看到有人也有同样的问题。但我已经在两种方法中添加了随机样本。