こんにちは、ミナピピン(@python_mllover)です。これまで「XGBoost」と「LightGBM」について紹介しましたが、今回は同じ勾配ブースティングのアルゴリズムである「CATboost」について紹介したいと思います。
参照記事:【Python】元最強アルゴリズム「XGBoost」で機械学習をやってみた
参照記事:【Python】「LightGBM」を使ってタイタニックの機械学習をやってみた
CATboostの概要
CatboostとはXgboostの発展形のLightGBMのさらに発展形という形で2017年に登場したアルゴリズムです。低い計算量で高い精度が出せるためKaggleなどのコンペや実務シーンなど様々な場面で頻繁に使用されています。
参照記事:https://toukei-lab.com/catboost
PythonでCATboostを実装する
という訳で実際にPythonでLightGBMを実装していきましょう。今回学習に使用するのは、皆さんおなじみのKaggleのタイタニックのデータです。以下のサイトから「titanic_train_mod.csv」と「titanic_test_mod.csv」をダウンロードしてください。
csvの中身は欠損値や特徴量を加工したタイタニックの乗客データです。特徴量エンジニアリングに関しては今回の話題ではないのでサクッと飛ばします。ダウンロードしたcsvは任意の場所に配置して、下記のpd.read_csvのパスを弄って読み込めるようにしておいてください。(titanicのデータがある人は手元のものでも代用可能です。)
# ライブラリをインストールする $ pip install catboost
Pythonで実装するコードは以下になります。
import pandas as pd import numpy as np from catboost import CatBoost from catboost import Pool from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split #データの読み込み(パスは自分の環境に合わせて変えてください) train = pd.read_csv('titanic_train_mod.csv') test = pd.read_csv('titanic_test_mod.csv') #学習データを説明変数と目的変数に分ける data = train[["Pclass", "Sex", "Age", "Fare"]].values target = train['Survived'].values # データを訓練データと正解データに7:3で分ける X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3, shuffle=True) # データを専用の型に変換 CatBoost_train = Pool(X_train, label=y_train) # 検証用 CatBoost_eval = Pool(X_test, label=y_test) # パラメータを設定 params = { 'loss_function': 'MultiClass', # 多値分類問題 'num_boost_round': 1000, # 学習の回数 'early_stopping_rounds': 20 # アーリーストッピングの回数 } # 学習 catb = CatBoost(params) catb.fit(CatBoost_train, eval_set=[CatBoost_eval], verbose=False) # 検証用データで予測 prediction_XG = catb.predict(test[["Pclass", "Sex", "Age", "Fare"]], prediction_type='Probability') # 小数を丸めて正解ラベルを抜き出す prediction_XG = [i[1] for i in np.round(prediction_XG).astype(int)] # PassengerIdを取得 PassengerId = np.array(test["PassengerId"]).astype(int) # my_prediction(予測データ)とPassengerIdをデータフレームへ落とし込む my_result = pd.DataFrame(prediction_XG, PassengerId, columns = ["Survived"]) # catboost_result.csvとして書き出し my_result.to_csv("catboost_result.csv", index_label = ["PassengerId"])
出力したCSVをhttps://www.kaggle.com/c/titanic/submitで提出すると結果は0.77033と約77%の正答率になりました。これまでのXGBoostやLightGBMよりも高い結果となりました。
関連記事:データ分析業界で未経験が高給取りを目指すためには何をするべきか
関連記事:【Python】機械学習で株価を予測する~Scikit-Learnの決定木アルゴリズムを使う
コメント