热线电话:13121318867

登录
2019-02-26 阅读量: 769
将测试集划分为子组,然后分别对每个子组进行预测

我有一个类似于下表的数据集: 在此输入图像描述

预测目标将成为“得分”列。我想知道如何将测试集划分为不同的子组,例如1到3之间的分数,或者然后检查每个子组的准确性。

现在我拥有如下:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

model = tree.DecisionTreeRegressor()

model.fit(X_train, y_train)

for i in (0,1,2,3,4):

y_new=y_test[(y_test>=i) & (y_test<=i+1)]

y_new_pred=model.predict(X_test)

print metrics.r2_score(y_new, y_new_pred)

但是,我的代码不起作用,这是我得到的回溯:

找到样本数不一致的输入变量:[14279,55955]

我已经尝试了下面提供的解决方案,但看起来对于满分范围(0-5),r ^ 2是0.67。但是,例如(0-1,1-2,2-3,3-4,4-5)的子核范围r ^ 2s明显低于整个范围。不应该有一些子核r ^ 2高于0.67而其中一些低于0.6

解决办法:在计算指标时,必须过滤预测值(基于您的子集条件)。

基本上你正在尝试计算

metrics.r2_score([1,3],[1,2,3,4,5])

这会产生错误,

ValueError:找到样本数不一致的输入变量:[2,5]

因此,我建议的解决方案是

model.fit(X_train, y_train)

#compute the prediction only once.

y_pred = model.predict(X_test)

for i in (0,1,2,3,4):

#COMPUTE THE CONDITION FOR SUBSET HERE

subset = (y_test>=i) & (y_test<=i+1)

print metrics.r2_score(y_test [subset], y_pred[subset])

0.0000
4
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子