Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@kimisyo

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

More than 1 year has passed since last update.

はじめに

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?

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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
kimisyo
主にライフサイエンス分野向けサービス開発を行っています。これからはライフサイエンスの時代です。化学、AI(機械学習)を中心に、学んだこと、経験したことをシェアしていきます。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?