Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 将测试集划分为子组,然后分别对每个子组进行预测_Python 2.7_Machine Learning_Scikit Learn_Sklearn Pandas - Fatal编程技术网

Python 2.7 将测试集划分为子组,然后分别对每个子组进行预测

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=

我有一个类似于下表的数据集:

预测目标将是“分数”列。我想知道如何将测试集划分为不同的子组,例如分数在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)
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吗?非常感谢您的帮助