Help us understand the problem. What is going on with this article?

scikit-learnのGridSearchCVに規定外の評価指標を設定する

はじめに

scikit-learnのGridSearchCVにおいて、クロスバリデーションの評価指標をscoringパラメータの引数として指定できるが、通常、公式ドキュメントの3.3.1. The scoring parameter: defining model evaluation rulesにあるものしか指定できない。

今回、kappa係数や、マシューズ相関係数を評価指標として指定したかったのでやり方を調査した。

途中でこの記事とかぶっていることに気が付きました。本記事は「scikit-learnの関数としては用意されているが、GridSearchCVには指定できないケース」として読んでください。

やり方

sklearn.metrics.make_scorerにより評価指標の関数をラップしたスコアラーを作成し、それをGridSearchCVのscoringパラメータに渡せばよい。

以下は、kappa係数、マシューズ相関係数、およびそれ以外(規定のもの)を指定する場合の例である。
値が大きいほどよい指標の場合は、make_scorer関数をそのまま呼び出せばよいが、値が小さい程よい指標(RMSE等)の場合は、make_scorerのgreater_is_betterパラメータをFalseに指定する必要がある。

from sklearn.metrics import cohen_kappa_score, make_scorer, matthews_corrcoef
from sklearn.model_selection import GridSearchCV

scoring = ...  # 評価指標を文字列で指定
estimator =  ... # ハイパーパラメータを求めたい予測器を指定
params = ... # 探索したいハイパーパラメータを指定(dict形式)

if scoring == "kappa":
   kappa_scorer = make_scorer(cohen_kappa_score)
   gc = GridSearchCV(estimator, params, cv=3, scoring=kappa_scorer)
elif scoring == "mcc":
   mcc_scorer = make_scorer(matthews_corrcoef)
   gc = GridSearchCV(estimator, params, cv=3, scoring=mcc_scorer)
else:
   gc = GridSearchCV(estimator, params, cv=3, scoring=scoring)

所感

そういえば、RMSEも規定の評価指標にはない。毎回、GridSearchCVのログに出力される‘neg_mean_squared_error’等の値を読み替えるのも面倒なので、この方法でRMSEも指定できるようにしたい。

参考

3.3.1. The scoring parameter: defining model evaluation rules
How to use Cohen's Kappa as the evaluation metric in GridSearchCV in Scikit Learn?

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away