首先,我想说在发布之前我搜索了很多但是没有找到任何关于制作得分大于1.0(100%)的内容。
首先我使用GridSearchCV来选择我的模型,但我没有使用gamma参数,因为GridSearch卡住了。这是我的代码:
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV
svr = SVR()
param_grid = {'kernel':['linear','rbf','poly','sigmoid'], 'C':[1,5,10,15], 'degree':[3,6,9,12,15]}
gscv = GridSearchCV(svr,param_grid, cv = 6)
gscv.fit(features, ranks)
print(gscv.best_score_)
print(gscv.score(features, ranks)*-1)
然后它返回:
-1.02488175821
0.583772756529
然后我使用SVC,其中从GridSearch返回的最佳参数添加gamma和epsilon作为参数。我正在使用KFold交叉验证新模型,并根据MSE,MAE,R ^ 2的不同指标打印分数,但它们返回非常不同的结果。
from sklearn.model_selection import KFold
from sklearn.metrics import mean_squared_error
from sklearn.metrics import median_absolute_error
from sklearn.metrics import r2_score
from sklearn.metrics import explained_variance_score
kf = KFold(n_splits=10)
svr = SVR(kernel = 'rbf', C = 10, epsilon = 0.001, gamma = 0.1)
scores = []
r2 = []
mae = []
mse = []
evs = []
for train_index, test_index in kf.split(ranks):
x_train, x_test = features.iloc[train_index], features.iloc[test_index]
y_train, y_test = ranks[train_index], ranks[test_index]
svr.fit(x_train, y_train)
predictions = svr.predict(x_test)
mse.append(mean_squared_error(y_test,predictions))
r2.append(r2_score(y_test,predictions))
mae.append(median_absolute_error(y_test,predictions))
evs.append(explained_variance_score(y_test,predictions))
scores.append(svr.score(x_test,y_test))
print ('Classifier .score : {}'.format(np.asarray(scores).mean()*-1))
print ('MSE score : {}'.format(np.asarray(mse).mean()))
print ('R^2 score: {}'.format(np.asarray(r2).mean()*-1))
print ('MAE score: {}'.format(np.asarray(mae).mean()))
print ('EVS score: {}'.format(np.asarray(evs).mean()*-1))
打印出来
分类器.score:1.0535368037228126
MSE得分:0.004624197990041222
R ^ 2得分:1.0535368037228126
MAE得分:0.033673630575293226
EVS得分:1.0293436224922894
但如果我将伽玛值更改为0.2,则打印此
分类器.score:0.5945396153777264
MSE得分:0.0035847763619656497
R ^ 2得分:0.5945396153777264
MAE得分:0.023670574621059648
EVS评分:0.5778668299600922
答案 0 :(得分:0)
3:确实R2不应该> 1但是你的得分高于1,因为你乘以(-1)。 并且绝对没有理由R2不应该是负面的。 您可以查看r2_score的文档: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html 这只意味着你的模型不能很好地运作......
4:如果我没错,MSE和MAE是你应该用于回归的指标。用它们进行分类是不自然的。我认为你应该坚持使用R2 如果您需要更多指标,可以试试这个:
from sklearn.metrics import classification_report
y_true, y_pred = y_test, clf.predict(X_test)
print(classification_report(y_true, y_pred))
另外,只需注意:svr.score会自动计算R2,因此您无需使用metrics.r2_score。
2:也许你应该尝试不同的模型,如随机森林,XGBoost,额外树木,KNN ......
希望对你有所帮助!祝你好运