Python 機械学習

【Python】「CATBoost」を使ってタイタニックの機械学習をやってみた

この記事は約5分で読めます。

 

 

こんにちは、ミナピピン(@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の決定木アルゴリズムを使う

 

 

 

 

コメント

タイトルとURLをコピーしました