【发布时间】:2019-07-05 16:44:19
【问题描述】:
预测目标将是“分数”列。我想知道如何将测试集划分为不同的子组,例如分数在 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?
谁能告诉我我哪里做错了?非常感谢您的帮助。
【问题讨论】:
-
我认为您正在寻找
confusion matrix。只需在将其传递给函数之前创建输出变量组。那应该可以。 -
显然,
y_new_pred包含整个测试集X_test(55955 个样本)的预测,y_new仅包含真实标签的子集 (14279),因此任何指标计算(r2_score或其他)注定会失败,因此会出错;请参阅下面的答案(并请接受它,因为它可以解决您的问题)。
标签: python-2.7 machine-learning scikit-learn sklearn-pandas