CatBoost カテゴリカルデータを用いたモデル構築のための解決策
CatBoost カテゴリカルデータを用いたモデル構築の解決策
イントロダクション
熱心な学習者がデータサイエンスや機械学習を学びたい場合、ブーステッドファミリーを学ぶべきです。ブーステッドファミリーから派生した多くのアルゴリズムがあります。例えば、AdaBoost、Gradient Boosting、XGBoostなどです。ブーステッドファミリーのアルゴリズムの1つはCatBoostアルゴリズムです。CatBoostは機械学習アルゴリズムであり、Categorical Boostingを表しています。これはYandexによって開発されたオープンソースのライブラリです。PythonとRの両方で使用することができます。CatBoostはデータセット内のカテゴリ変数と非常にうまく動作します。他のブースティングアルゴリズムと同様に、CatBoostも分類ラベルを予測するために背後で複数の決定木、つまり木のアンサンブルを作成します。これは勾配ブースティングに基づいています。
また読む:CatBoost:カテゴリカル(CAT)データを自動的に処理するための機械学習ライブラリ
学習目標
- ブーステッドアルゴリズムの概念とデータサイエンスおよび機械学習における重要性を理解する。
- カテゴリ変数の処理を担当するブーステッドファミリーの一員であるCatBoostアルゴリズム、その起源、および役割を探索する。
- CatBoostの主な特徴、カテゴリ変数の処理、勾配ブースティング、順序ブースティング、および正則化技術の理解。
- CatBoostの利点、カテゴリ変数の堅牢な処理と優れた予測パフォーマンスについての洞察。
- 回帰および分類タスクにおいてPythonでCatBoostを実装し、モデルパラメータを探索し、テストデータ上で予測を行う方法を学ぶ。
この記事はData Science Blogathonの一部として公開されました。
- 「NVIDIA H100 GPUがAWS Cloudで利用可能になりました」
- 「現在のデータサイエンスの求人市場を進める方法」
- グローバルデータバロメーター:世界のオープンデータの現状はどうなっていますか?
CatBoostの重要な特徴
- カテゴリ変数の処理: CatBoostはカテゴリ変数を含むデータセットの処理に優れています。さまざまな方法を使用して、カテゴリ変数を数値表現に変換することで、自動的にカテゴリ変数を処理します。これにはターゲット統計、ワンホットエンコーディング、または両方の組み合わせが含まれます。この機能により、手動のカテゴリ変数の前処理の要件を省略することで、時間と労力を節約できます。
- 勾配ブースティング: CatBoostは、効果的な予測モデルを作成するために、複数の弱学習器(決定木)を組み合わせるアンサンブル技術である勾配ブースティングを使用します。前の木によって引き起こされる誤りを修正するために訓練され、指示された木を追加することで、異なる可能性のある分割構成を最小化する勾配ブースティングは、イテレーションごとにツリーを作成する方法です。この反復的なアプローチにより、モデルの予測能力が徐々に向上します。
- 順序ブースティング: CatBoostは、「順序ブースティング」と呼ばれる新しい技術を提案して、カテゴリ変数を効果的に処理します。ツリーを構築する際に、カテゴリ変数の最適な分割点を特定するために、カテゴリ変数のパーミュテーション駆動の事前ソートという技術を使用します。この方法により、CatBoostはすべての潜在的な分割構成を考慮し、予測を改善し、過学習を低減することができます。
- 正則化: CatBoostでは、過学習を減らし、汎化性能を向上させるために正則化技術が使用されます。葉の値に対するL2正則化を特徴とし、過剰な葉の値を防ぐために損失関数にペナルティ項が追加されます。また、カテゴリデータのエンコーディング時の過学習を防ぐために、「順序ターゲットエンコーディング」という先端的な手法も使用します。
CatBoostの利点
- カテゴリ変数の堅牢な処理: CatBoostの自動処理により、前処理が便利で効果的になります。手動のエンコーディング方法の必要性をなくし、従来の手順に関連する情報の損失の可能性を低下させます。
- 優れた予測パフォーマンス: CatBoostの勾配ブースティングフレームワークと順序ブースティングを使用して行われる予測は、頻繁に正確です。CatBoostは、他の多くのアルゴリズムを上回る強力なモデルを生成し、データ内の複雑な関係を効果的に捉えることができます。
使用例
カテゴリデータを含むいくつかのKaggleコンテストで、CatBoostは優れたパフォーマンスを示しています。CatBoostは、さまざまな回帰および分類タスクで成功を収めています。以下に、CatBoostが成功裏に使用されているいくつかのインスタンスを示します:
- Cloudflareは、ユーザーのウェブサイトをターゲットにしたボットを識別するためにCatBoostを使用しています。
- ドバイに拠点を置くライドヘイリングサービスCareemは、次に顧客がどこに移動するかを予測するためにCatBoostを使用しています。
実装
CatBoostはオープンソースのライブラリですので、インストールされていることを確認してください。もしインストールされていない場合は、CatBoostパッケージをインストールするためのコマンドは以下の通りです。
#catboostライブラリのインストール
!pip install catboost
PythonとRの両方の言語でCatBoostアルゴリズムをトレーニングして構築することができますが、この実装ではPythonのみを使用します。
CatBoostパッケージがインストールされたら、catboostと他の必要なライブラリをインポートします。
#ライブラリのインポート
import pandas as pd
import os
import matplotlib.pyplot as plt
import seaborn as sns
import catboost as cb
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score
import warnings
warnings.filterwarnings('ignore')
ここではbig mart salesデータセットを使用し、データの正当性を確認します。
#データセットのアップロード
os.chdir('E:\Dataset')
dt = pd.read_csv('big_mart_sales.csv')
dt.head()
dt.describe()
dt.info()
dt.shape
データセットには1,000以上のレコードと35の列が含まれており、そのうち8つの列がカテゴリカルですが、これらの列を数値形式に変換しません。 Catboost自体がそのようなことを行うことができます。これがCatboostの魔法です。モデルパラメーターには任意の数の要素を指定できます。デモ目的で「iteration」のみを取得しました。
#csvのインポート
X = dt.drop('Attrition', axis=1)
y = dt['Attrition']
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=14)
print(X_train.shape)
print(X_test.shape)
cat_var = np.where(X_train.dtypes != np.float)[0]
model = cb.CatBoostClassifier(iterations=10)
model.fit(X_train, y_train, cat_features=cat_var, plot=True)
使用できるモデルパラメーターは多数あります。CatBoostモデルを構築する際に指定できる重要なパラメーターを以下に示します。
パラメーター
- Iterations(イテレーション): 構築するブースティングイテレーションまたはツリーの数。値が高いほどパフォーマンスが向上しますが、トレーニング時間が長くなります。範囲は1から無限大の整数値です [1, ∞]。
- Learning_rate(学習率): 勾配ブースティングアルゴリズムが学習するステップサイズ。小さい値はモデルの収束を遅くするが、一般化を改善する可能性があります。浮動小数点数値で、0から1の範囲です。
- Depth(深さ): アンサンブル内の個々の決定木の最大深度。深い木は過学習の可能性が高いですが、より複雑な相互作用を捉えることができます。範囲は1から無限大の整数値です [1, ∞]。
- Loss_function(損失関数): トレーニング中に損失関数を最適化する必要があります。バイナリ分類の場合は「Logloss」、マルチクラス分類の場合は「MultiClass」、回帰の場合は「RMSE」など、さまざまな問題タイプには異なる解決策があります。文字列値です。
- l2_leaf_reg: 葉の値はL2正則化を受けます。大きな葉の値はより高い値で罰せられ、過学習を抑制するのに役立ちます。浮動小数点数値で、0から無限大の範囲です [0, ∞]。
- border_count: 数値特徴の分割数。高い数値はより正確な分割を提供しますが、過学習を引き起こすこともあります。大規模なデータセットの場合、128が推奨されます。範囲は1から255の整数値です [1, 255]。
- random_strength: 分割ポイントを選択する際に使用するランダム性のレベル。大きな値ではより多くのランダム性が導入され、過学習を防ぎます。範囲:[0, ∞]。
- bagging_temperature: トレーニングインスタンスのサンプリングの強度を制御します。大きな値はバギングプロセスのランダム性を低下させ、小さな値はそれを上昇させます。浮動小数点数値で、0から無限大の範囲です [0, ∞]。
トレーニング済みモデルでの予測の作成
#テストセットでのモデル予測
y_pred = model.predict(X_test)
print(accuracy_score(y_pred, y_test))
print(confusion_matrix(y_pred, y_test))
predict_proba()関数を使用して閾値値を設定することもできます。ここでは、カテゴリカル変数を数値に変換していないことを考慮すると、85%以上の正確性スコアを達成しています。これは、Catboostアルゴリズムの強力さを示しています。
結論
CatBoostは、機械学習の分野での突破口となる有名なモデルの一つです。カテゴリカルな特徴を自己処理する能力により、多くの関心を集めています。この記事からは、以下のことを学ぶことができます:
- catboostの実用的な実装方法
- catboostアルゴリズムの重要な特徴とは何か
- catboostが優れた結果を出したユースケース
- モデルのトレーニング時に使用するcatboostのパラメーター
よくある質問
この記事に表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles