Pythonで分類モデル作りたいけど、結局何を使うのがいいの?
高度なモデルって高スペックなPCじゃないと動かない?
今回はビジネスシーンで必要になることが多い、分類モデルについて説明していきます!
順位・ランキング予測などのタスクを実行する際に、回帰で数値を求めてからランキングを導出しようとするとかえって精度が落ちます。
しっかりと分類モデルのアルゴリズムを理解し、実装する力を身につけましょう!
機械学習の世界コンペ(Kaggleなど)でランキング上位を独占しているモデルのXGBoostの実装を紹介します。
XGBoostは、回帰でも分類でも非常に優秀なモデルです。
身に付くスキル
- 高度な分類モデルの実装スキル
- 高度なモデルを理解し、わかりやすく説明する力
- 自信をもって分析結果から決断をするスキル
それではさっそく、本題を解説していきます!
この記事を書いた人
XGBoostによる分類モデルの実装
XGboostとは?
XGboostは、勾配ブースティングを実装するための強力な高性能機械学習ライブラリです。
大規模データから決定木を構築する際の速度と精度が最適化されているため、データサイエンス用途に広く利用されています。
XGboostは、弱い学習器をブーストして複雑なモデルに集約するという原則に基づいて動作し、最良の結果が得られるようにバイアスと分散のトレードオフを考慮します。
オープンソースであり、多くのインターフェイスライブラリで簡単に使用できるため、データサイエンスコミュニティで人気があります。
今回のシナリオとデータ
今回の分析シナリオは、
シナリオ
アヤメのがく片と花びらの長さと幅から品種を分類するモデルを作成してください。
また、影響の大きい説明変数を特定し、予測の根拠を説明してください。
です。
データの構成
- E列に目的変数の住宅価格が存在。
- A~D列に説明変数が列挙されている。
利用するデータは、以下のボタンを押下するとダウンロードできます。
最終的に得られるモデルの精度
学習の見通しを立てるために、最終的に得られるモデルの精度を先に説明します。
最終的な構築モデルの精度
- 97.8%の精度で品種が予測できている。
- 花びらの長さと幅が品種予測の重要なファクターになっている。
こんな強力なモデルを驚くほど簡単なコードで実装することが可能です。
さっそく実践に移りましょう!
XGBoostのコード紹介
今回の予測モデルは、こちらのコードで実装が可能です。
#必要なモジュールのインストール
!pip install xgboost
import numpy as np
import pandas as pd
import xgboost as xgb
#データの読み込み
df = pd.read_csv('アヤメの品種分類.csv',encoding='shift-jis')
#予測ターゲットの格納(品種:E列)
target_df = df[["品種"]]
#特徴量の格納(説明変数:A~B列)
train_df = df.iloc[:,0:4]
#モデル学習のための、訓練データとテストデータを7:3で分割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(train_df, target_df, test_size=0.3)
#XGBoostで学習するためのデータ形式に変換
dtrain = xgb.DMatrix(X_train, y_train)
dvalid = xgb.DMatrix(X_test, y_test)
#モデルパラメータの設定
param = {'objective': 'multi:softmax', 'num_class': 15}
num_round = 100
bst = xgb.train(param, dtrain, num_round)
#予測の実行と書き出し
dtest = xgb.DMatrix(X_test)
pred = bst.predict(dtest)
print(pred)
#予測の精度の出力
from sklearn.metrics import accuracy_score
score = accuracy_score(y_test, pred)
print('score:{0:.4f}'.format(score))
# 性能向上に寄与する度合いで重要度をプロット
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(font=['Meiryo','Yu Gothic'])
_, ax = plt.subplots(figsize=(12, 4))
xgb.plot_importance(bst,
ax=ax,
importance_type='gain',
show_values=False)
plt.show()
先ほどの最終的なモデルと同じ結果が出力されれば、分類モデルの完成です!
CSVデータを自身の業務データに置き換えて、コードをいじれば業務で即戦力になる分類モデルとしてそのまま活用いただけます。
なぜXGBoostが最強のモデルなのか?
XGBoostがコンペでも実業務でも最強のモデルである理由は、
- ビジネスデータへの適用性が高い
⇒欠損値や外れ値があっても、関係なく学習できる - モデルが軽いので、高スペックなPCが不要
⇒専用の機器が不要で通常のPCで動く - 汎用的である程度の精度が簡単に出る
⇒初期パラメータで、ビジネス判断に十分な精度がでる
の3点にあります。
XGBoostのモデル理解
XGBoostのモデル構造を端的に説明すると、以下のイメージになります。
ポイント
分岐条件のツリーの作成と適用・修正を繰り返し、最高精度のツリーをモデルとして構築する。
もっとこの予測手法の力を感じたい方は、Akinator(アキネーターというコンテンツで遊んでみるのをオススメします。
頭の中でイメージした人物を充てるゲームですが、ツリーベースで分類結果を学習させているコンテンツの1つです!
まとめ
今回は「XGBoostによる分類モデルの作成方法」について解説しました。
XGBoostはその利点から実際のビジネスシーンでの汎用性が高く、名がある分析の大会で利用されているモデルです。
解釈もしやすいモデルですので、仕事でも活用することをオススメします。
分類モデルではなく、XGBoostを用いた数値の予測モデルに興味がある方はこちらの記事をご覧下さい。
-
コピペで動くXGBoost |Pythonで最強予測モデルの実装
Pythonで予測モデル作りたいけど、結局何を使うのがいいの? 高度なモデルって高スペックなPCじゃないと動かない? 今回はビジネスシーンで使うことが多い、予測モデルについて説明していきます! 施策の ...
データサイエンティストとして、キャリア形成を考えている人は以下の記事も参考になります。
-
【完全版】Python習得のロードマップ|初心者プログラミング知識0から年収800万円へ
年収上げたいけど、プログラマって稼げるの? プログラマって知識0からでもなれるの? という質問をもらいますが、「Python」と「データ分析」を武器にすれば6ヶ月で年収800万円以上を狙うことは十分可 ...
それでは、また次の記事でお会いしましょう。
最近のコメント