2020.01.03今回は『Kaggleで勝つデータ分析の技術』の第6章、モデルのチューニングについてです。パラメータのチューニングなどでモデルの精度を高めるテクニックを学びます。Kaggleで勝つデータ分析の技術Kaggleなどのデータ分析コンペでは、実際のデータを扱うため、機械学習の解説書にはあまり載っていないような手法やテクニックが数多く活用されています。これらを理解し自身で使えるようにしておくことはコンペだけでなく、実務でのモデル構築において非常に役に立ちます。特徴量の作り方,バリデーション,パラメータチューニングなどについて,一般的な書籍ではあまり言及されない暗黙知やポイントについて記述しています。パラメータ調整について例えば、意味のない特徴量が使われすぎているように感じる場合には正則化のパラメータを強めたり、相互作用の反映が足りないように感じる場合には決定木を分岐させる数を増やすといった方法が考えられます。ベースラインとなるパラメータで学習させる2.次に、もし簡単に調整を行いたい場合は、1~3種類のパラメータとそれぞれ2~5個の候補程度でグリッドサーチを行う3.本格的にパラメータチューニングを行う場合にはベイズ最適化を行う(この段階では、グリッドサーチ/ランダムサーチよりはベイズ最適化を利用する方が効率的)モデルのデフォルト値は速度や単純さを重視しており、分析コンペで使うには向いていないものがある(例えばxgboostのetaのデフォルト値は0.3だがこれは大きすぎる)自動でパラメータ調整する場合、調整を行いすぎると評価対象のデータに過剰に適合してしまう→「パラメータ調整に使うfoldの分割」と「実際にモデルを作成・予測して使うfoldの分割」の乱数シードは変えた方が望ましいモデルがGBDTである場合は、パラメータチューニングよりも、良い特徴量を加えることが精度改善に役立つことが多い→序盤からパラメータ調整に注力しすぎないようにするパラメータチューニングのポイント・重要なパラメータとそこまで重要でないパラメータがある。すべてのパラメータを調整する必要はないので、重要なパラメータから調整していくと良い・パラメータの値を増加させたときに、モデルの複雑性を増すパラメータと、逆にモデルを単純にするパラメータがある。これを理解しておくと、学習が上手く行かないときの考察に有用ベイズ最適化ではパラメータ間の依存性により、効率的に探索できない可能性がある→依存関係をパラメータ空間に明示的に定義する。分析コンペにおいては、特徴量がそれぞれ多少なり予測に役立つ情報を持っていること、GBDTでは意味のない特徴量があっても精度が落ちづらいこと、アンサンブルで過学習が抑えられることなどから、それほど特徴選択が用いられていないように思います。与えられたデータに含まれている特徴量はすべて採用し、考えて作った特徴量はスコアを見ながら取捨選択する、というのが1つの進め方です。Importanceはデフォルトでは頻度が出力されるが、ゲインを出力した方が良い(ゲインの方が、特徴量が重要かどうかをより表現していると考えられる)xgboostの特徴量の重要度は、学習データに対して作成された決定木の分岐の情報から計算されます。連続変数やカテゴリ数の多いカテゴリ変数は分岐の候補が多いためやや上位になりやすかったり、乱数によりでたらめな特徴量を作って試したときにその特徴量が上位に来てしまったりします。そのため、ばらつきを考慮することやランダムな値からなる特徴量と比較することは有効でしょう。正例と負例の比率を変えた場合には、loglossなど確率を予測するときに確率の補正を行う必要がある実装hyperoptを使ったGBDTでのパラメータチューニングと特徴量の重要度を出力するのを手元でも試しました。xgboostもhyperoptもこれまで使った経験はありましたが、コードの書き方など参考になりました。GitHub.github.com第6章は、特にコラムで紹介されている著者の方々のパラメータチューニングの紹介が非常に参考になりました。いうノウハウはとても勉強になります。貴重な情報を公開してくださった筆者の方々に感謝です。今回は『Kaggleで勝つデータ分析の技術』の第7章、アンサンブルについてです。最終章、なんとか冬休み中に辿り着くことが出来ました・・・。以下、第7章の備忘録(メモ、引用)と実装になります。備忘録分...engineeeer.com2020.01.11Kaggleで勝つデータ分析の技術Kaggleなどのデータ分析コンペでは、実際のデータを扱うため、機械学習の解説書にはあまり載っていないような手法やテクニックが数多く活用されています。これらを理解し自身で使えるようにしておくことはコンペだけでなく、実務でのモデル構築において非常に役に立ちます。特徴量の作り方,バリデーション,パラメータチューニングなどについて,一般的な書籍ではあまり言及されない暗黙知やポイントについて記述しています。調べ方もよく忘れるのでここにメモしておきます。以下の一行をターミナルに打ち込むだけ。<パッケージ名...Pythoncategorical_crossentropyとsparse_categorical_crossentropyの違い【Keras】ニューラルネットワークのライブラリKerasにはいくつかの損失関数が実装されています。今日も元気にみどり本を進めていきましょう。前回の第2章の内容を一言でまとめると、「観測データをよく見て対応する真の確率分布を仮定し、そのパラメータを推定する」というお話でした。その流れは第3章も基本的に同じです。以下のようなPandasのデータフレームがあったとします。ための深層学習』を一通り読みました。難しくて理解できない箇所もありましたが、自然言語処理×ディープラーニングの話が網羅的に学べてよかったです。今日も元気にみどり本です。第3章を終わらせましょう。(所々、はてなのtex記法で書いた数式が正しく変換されず、そのまま文字列が表示されてしまっている箇所がありますがご容赦ください...。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。メーカーの研究所に入所。研究や開発に従事しており、普段はプログラミングをしたり論文を読んだりしています。ブログは趣味の学びのアウトプットです。本ブログが何かのお役に立ちましたら幸いです。研究所で働くエンジニアのブログ.。