发现输入变量的样本数不一致错误

时间:2019-08-27 08:44:26

标签: python machine-learning scikit-learn regression

我编写了以下代码来学习机器学习方法中的分数。但出现以下错误。是什么原因?

veri = pd.read_csv("deneme2.csv")

veri = veri.drop(['id'], axis=1)

y = veri[['Rating']]
x = veri.drop(['Rating','Genres'], axis=1)


X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.33)


DTR = DecisionTreeRegressor()
DTR.fit(X_train,y_train)
ytahmin = DTR.predict(x)
DTR.fit(veri[['Reviews','Size','Installs','Type','Price','Content Rating','Category_c']],veri.Rating)
basari_DTR = DTR.score(X_test,y_test)
#print("DecisionTreeRegressor: Yüzde",basari_DTR*100," oranında:" )
a = np.array([159,19000000.0,10000,0,0.0,0,0]).reshape(1, -1)
predict_DTR = DTR.predict(a)
print(f1_score(y_train, y_test, average='macro')) 
  

错误:找到的样本数量不一致的输入变量为[6271,3089]

2 个答案:

答案 0 :(得分:1)

f1_score必须从测试中得出真实的y,并从测试集上得出预测的值,因此最后一行应该是:

DTR = DecisionTreeRegressor()
DTR.fit(X_train,y_train)

y_pred = DTR.predict(X_test)
print(f1_score(y_pred, y_test, average='macro')) 

您不应两次致电fit,并且预测的形状必须与测试的长度相同,请参阅一些sklearn基本教程以获取更多信息。

答案 1 :(得分:1)

您的代码至少有两个问题。

您报告的第一个错误

print(f1_score(y_train, y_test, average='macro')) 
Error: Found input variables with inconsistent numbers of samples: [6271, 3089]

是由于您的y_trainy_test的长度不同,正如其他答案中已经指出的那样。

但这不是这里的主要问题,因为即使按照建议将y_train更改为y_pred,也会收到一个新错误:

print(f1_score(y_pred, y_test, average='macro')) 
Error: continuous is not supported 

这仅仅是因为您处于回归设置,而f1得分是分类指标,因此,它不适用于连续预测。< / p>

换句话说,对于您的(回归)问题,f1得分不合适,因此是错误的。

检查list of metrics available in scikit-learn,可以确认f1分数仅用于分类,然后选择另一个适用于回归问题的指标。

要详细了解在scikit-learn中选择不合适的指标时会发生什么,请参见Accuracy Score ValueError: Can't Handle mix of binary and continuous target