簡體   English   中英

使用scikit-learn進行回歸模型評估

[英]regression model evaluation using scikit-learn

我正在使用sklearn進行回歸並使用隨機網格搜索來評估不同的參數。 這是一個玩具示例:

from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error, make_scorer
from scipy.stats import randint as sp_randint
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.cross_validation import LeaveOneOut
from sklearn.grid_search import GridSearchCV, RandomizedSearchCV
X, y = make_regression(n_samples=10,
                       n_features=10,
                       n_informative=3,
                       random_state=0,
                       shuffle=False)

clf = ExtraTreesRegressor(random_state=12)
param_dist = {"n_estimators": [5, 10],
              "max_depth": [3, None],
              "max_features": sp_randint(1, 11),
              "min_samples_split": sp_randint(1, 11),
              "min_samples_leaf": sp_randint(1, 11),
              "bootstrap": [True, False]}
rmse = make_scorer(mean_squared_error, greater_is_better=False)
r = RandomizedSearchCV(clf, param_distributions=param_dist,
                       cv=10,
                       scoring='mean_squared_error',
                       n_iter=3,
                       n_jobs=2)
r.fit(X, y)

我的問題是:

1) RandomizedSearchCV使用r2作為評分函數嗎? 沒有記錄默認評分函數對於回歸的作用。

2)即使我在代碼中使用mean_squared_error作為評分函數,為什么分數為負(如下所示)? mean_squared_error應該都是正面的。 然后當我計算r.score(X,y) ,似乎再次報告R2 在所有這些背景下的得分對我來說非常混亂。

In [677]: r.grid_scores_
Out[677]: 
[mean: -35.18642, std: 13.81538, params: {'bootstrap': True, 'min_samples_leaf': 9, 'n_estimators': 5, 'min_samples_split': 3, 'max_features': 3, 'max_depth': 3},
 mean: -15.07619, std: 6.77384, params: {'bootstrap': False, 'min_samples_leaf': 7, 'n_estimators': 10, 'min_samples_split': 10, 'max_features': 10, 'max_depth': None},
 mean: -17.91087, std: 8.97279, params: {'bootstrap': True, 'min_samples_leaf': 7, 'n_estimators': 10, 'min_samples_split': 7, 'max_features': 7, 'max_depth': None}]

In [678]: r.grid_scores_[0].cv_validation_scores
Out[678]: 
array([-37.74058826, -26.73444271, -36.15443525, -23.11874605,
       -33.60726519, -33.4821689 , -36.14897322, -43.80499446,
       -68.50480995, -12.97342433])

In [680]: r.score(X,y)
Out[680]: 0.87989839693054017
  1. 就像GridSearchCV一樣,RandomizedSearchCV默認使用估算器上的score方法。 ExtraTreesRegressor和其他回歸估計器從此方法返回R²分數(分類器返回准確度)。

  2. 慣例是得分最大化。 均方誤差是一種最小化的損失函數,因此它在搜索中被否定。

然后當我計算r.score(X,y)時,似乎再次報告R2。

那不是很好。 這可能是一個錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM