我编写了以下代码来学习机器学习方法中的得分,但出现了以下错误。原因是什么?
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]
回答:
你的代码至少有两个问题。
你报告的第一个错误
print(f1_score(y_train, y_test, average='macro')) 错误:发现输入变量样本数量不一致:[6271, 3089]
是因为你的y_train
和y_test
长度不同,正如另一个回答中已经指出的那样。
但这并不是这里的主要问题,因为即使你按照建议将y_train
改为y_pred
,你也会得到一个新的错误:
print(f1_score(y_pred, y_test, average='macro')) 错误:不支持连续值
这是因为你处于一个回归设置中,而f1分数是一个分类指标,因此它不适用于连续预测。
换句话说,f1分数对于你的(回归)问题来说是不合适的,因此出现了错误。
请查看scikit-learn中可用的指标列表,你可以确认f1分数仅用于分类,并选择适合回归问题的其他指标。
关于在scikit-learn中选择不合适的指标会发生什么的更详细说明,请参见准确度分数ValueError:无法处理二元和连续目标的混合