Python 2.7 将测试集划分为子组,然后分别对每个子组进行预测
我有一个类似于下表的数据集: 预测目标将是“分数”列。我想知道如何将测试集划分为不同的子组,例如分数在1到3之间,或者检查每个子组的准确性 现在我的情况如下:Python 2.7 将测试集划分为子组,然后分别对每个子组进行预测,python-2.7,machine-learning,scikit-learn,sklearn-pandas,Python 2.7,Machine Learning,Scikit Learn,Sklearn Pandas,我有一个类似于下表的数据集: 预测目标将是“分数”列。我想知道如何将测试集划分为不同的子组,例如分数在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=
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)
X\u系列,X\u测试,y\u系列,y\u测试=系列测试分割(X,y,测试尺寸=0.3)
model=tree.DecisionTreeRegressor()
模型拟合(X\U系列、y\U系列)
对于(0,1,2,3,4)中的i:
y_new=y_test[(y_test>=i)和(y_test当您计算度量时,您必须过滤预测值(基于您的子集条件)
基本上你是在尝试计算
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])
model.fit(X\U系列、y\U系列)
#只计算一次预测。
y_pred=模型预测(X_检验)
对于(0,1,2,3,4)中的i:
#在这里计算子集的条件
subset=(y_test>=i)和(y_testI)我认为您正在寻找混淆矩阵
。在将其传递给函数之前,只需创建输出变量组。这应该会起作用。显然,y_new_pred
包含对整个测试集的预测X_test
(55955个示例),y_new
只包含真实标签的一个子集(14279),因此任何度量计算(r2_分数
或其他)都注定会失败,因此会出现错误;请参见下面的答案(请接受它,因为它可以解决您的问题)。找到具有0个样本的数组(shape=(055955))但至少需要1个。
谢谢你的帮助,我的朋友,但在应用了你的解决方案后,我得到了上述回溯。你知道为什么会发生这种情况吗?顺便说一下,我打印了y\u test[subset]
和y\u pred[subset]
他们都是空的,我的朋友。我在应用你的代码时犯了错误。我一步一步地研究了你的解决方案。所以子集只有真值和假值。所以y_test[subset]和y_pred[subset]
将只保留子集中标记为true的项。我的理解正确吗?@AI\u Learning我对你的解决方案有一些问题,我的朋友,但是看起来满分范围(0-5)的r^2为0.67。但是子分数范围例如(0-1,1-2,2-3,3-4,4-5)r^2明显低于全量程。部分子核r^2不应该高于0.67,部分子核r^2不应该低于0.67吗?非常感谢您的帮助