我有一个类似于下表的数据集:python-2.7 - 将测试集划分为子组,然后分别对每个子组进行预测-LMLPHP

预测目标将是“得分”列。我想知道如何将测试集划分为不同的子组,例如得分在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.67吗?

有人可以让我知道我在哪里做错了吗?非常感谢您的所有帮助。

最佳答案

在计算指标时,必须过滤预测值(基于子集条件)。

基本上你是在尝试计算

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])

关于python-2.7 - 将测试集划分为子组,然后分别对每个子组进行预测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54643265/

10-10 10:29