sklearnのGridSearchCV()での、平均平方2乗誤差(RMSE)や平均2乗誤差(MSE)の算出について

参考サイト:

参考コード:


(1) 平均2乗誤差(MSE)でマイナス値が出る問題

 sklearnでは、仕様上、MSEでマイナス値がでてしまう。それは、sklearnでは、大きい値ほど良いスコアとの判断なので、回帰モデルでそのまま使うと誤差の一番大きな値が一番良いモデルとなってしまう。

 そこで、回帰モデルのスコアリングでは、呼び出されるsklearn.metrics.make_scorer()メソッドのgreater_is_betterパラメーターが自動でFalseになることで、スコアに−1が掛けられた値の中で最大の値を一番いいスコアとすることで、最小値を良いスコアとして判定できるようになっている。なので、MSE値のマイナス値を単純にプラスに置き換えればMSEスコアとなる。



(2) GridSearchCV()で、scoringパラメーターに、独自関数を指定する方法。

例)スコアにr2スコアとMSEスコアの両方を指定するコード

  from sklearn.metrics import r2_score, mean_squared_error, make_scorer

  from sklearn.grid_search import GridSearchCV

  from sklearn.linear_model import Ridge


  def MSE(y_true,y_pred):

    mse = mean_squared_error(y_true, y_pred)

    print 'MSE: %2.3f' % mse

    return mse

  def R2(y_true,y_pred):

    r2 = r2_score(y_true, y_pred)

    print 'R2: %2.3f' % r2

    return r2

  def two_score(y_true,y_pred):

    MSE(y_true,y_pred) #set score here and not below if using MSE in GridCV

    score = R2(y_true,y_pred)

    return score

  def two_scorer():

    return make_scorer(two_score, greater_is_better=True) # change for false if using MSE


  model = Ridge()

  param_grid = {'alpha':[0.1,1,10]}

  X_train = [[1,2],[1,5],[-3,2],[3,7],[-1,1],[0,-1]]

  y_train = [1,0,1,0,3,5]

  grid = GridSearchCV(model, param_grid, scoring=two_scorer())

  grid.fit(X_train, y_train)

  best_params = grid.best_params_

  model = grid.best_estimator_

  score = grid.best_score_

  for item in grid.grid_scores_:

    print "\t%s %s %s" % ('\tGRIDSCORES\t', "R" , item)

  print '%s\tHP\t%s\t%f' % ("R" , str(best_params) ,abs(score))

 >出力結果

機械学習Tips保管庫

データ解析、機械学習のための学習内容の保管庫。復習用。

0コメント

  • 1000 / 1000