我编写了以下代码来学习机器学习方法中的分数。但出现以下错误。是什么原因?
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]
答案 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_train
和y_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