はじめに
この実験では、ワインレビューデータセットにおけるさまざまなカテゴリカルエンコーダの性能を比較します。予測対象の変数として、目的変数の「points」列を使用します。以下のエンコーダを比較します:TargetEncoder、OneHotEncoder、OrdinalEncoder、およびカテゴリを削除する方法。また、HistGradientBoostingRegressorにおけるネイティブなカテゴリカル機能サポートの使用方法についても見てみます。
VM のヒント
VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
OpenML からのデータの読み込み
まず、scikit-learn.datasets モジュールのfetch_openml関数を使ってワインレビューデータセットを読み込みます。データの中では、数値型とカテゴリ型の特徴量のサブセットのみを使用します。データの中では、以下の数値型とカテゴリ型の特徴量のサブセットを使用します:numerical_features = ["price"] および categorical_features = ["country", "province", "region_1", "region_2", "variety", "winery"]。
異なるエンコーダを使用したパイプラインの学習と評価
このセクションでは、異なるエンコード戦略を持つHistGradientBoostingRegressorを使用してパイプラインを評価します。クロスバリデーションを使用してモデルを評価し、結果を記録します。
ネイティブなカテゴリカル機能サポート
このセクションでは、HistGradientBoostingRegressorにおけるネイティブなカテゴリカル機能サポートを使用するパイプラインを構築して評価します。このサポートは最大 255 の一意のカテゴリまでしか対応していません。カテゴリカル機能を低次元と高次元の機能にグループ化します。高次元の機能はターゲットエンコードされ、低次元の機能は勾配ブースティングにおけるネイティブなカテゴリカル機能を使用します。
結果のプロット
このセクションでは、テストと学習のスコアをプロットすることで結果を表示します。
まとめ
この実験では、ワインレビューデータセットにおける異なるカテゴリカルエンコーダの性能を比較しました。また、HistGradientBoostingRegressorにおけるネイティブなカテゴリカル機能サポートの使い方についても見てみました。カテゴリを削除する方法が最も性能が低く、ターゲットエンコーダが最も良い性能を示すことがわかりました。順序エンコーディングは、HistGradientBoostingRegressorによって数値として扱われる機能に任意の順序を課します。ワンホットエンコーディング方式では、特徴量の数が増え、ターゲットと偶然に相関するまれなカテゴリの出現によりパイプラインが過学習する可能性があります。ターゲットエンコーダを使用する場合、同じビニングが行われますが、エンコードされた値がターゲット変数との限界関連によって統計的に並べ替えられているため、HistGradientBoostingRegressorによるビニングの使用は合理的で、良好な結果をもたらします。