1.はじめに
以前の投稿で、機械学習について2つの記事を書きました。
全体像(機械学習初学者の私に告ぐ「4つの忠告」の2-2)と
前処理(機械学習のデータ前処理備忘録)についてです。
他の箇所についてもまとめていきます。
2.機械学習の全体像振り返り
以前の記事でも紹介した機械学習の全体像を以下に示します。
今回は赤枠で囲った手法選択についてです。
図.2-1 機械学習の全体像
この手法選択の中でも最近私がよく使用している決定木モデルについてまとめます。
決定木モデルは、回帰モデルと分類モデルとどちらもライブラリとして用意されていますが、
今回は分類モデルについてです。
3.決定木モデルとは
そもそも決定木モデルとは何なのでしょう。
決定木モデルは不純度を表す、ジニ係数(もしくはエントロピー)を使用して、
分類していくモデルです。
分類していく様子を可視化できるところにも強みがあります。
ここでジニ係数の数式的な説明は省きますが、
感覚的に掴んでいただくために、以下のことを想像してみてください。
あるところにブラックチョコレート、ミルクチョコレート、ストロベリーチョコレートの
3種類のチョコレートが50個ずつあります。
この複数個のチョコレートを種類ごとに3つのグループに分類するとします。
このチョコレートのとある特徴量に閾値を持たせ、その閾値によって分けていき、
3種類が全て分かれている状態を目指していきます。
例えばカカオの量が50%以上かどうかなどで分類をします。
この時ブラックチョコレート、ミルクチョコレート、ストロベリーチョコレートが
それぞれ30個ずつ混ざって1つのグループ状態になっている場合、ジニ係数は高く、
ブラックチョコレート、ミルクチョコレート、ストロベリーチョコレートが
それぞれ綺麗に3種類に分け切れている状態だとジニ係数は0になります。
以下実際にIrisのデータセットで決定木モデルを使用し、可視化した例を貼ります。
図3-1.Iris データセットを用いたDecisionTreeClassifierを可視化
以上がシンプルな決定木モデルです。
この決定木モデルを応用させたモデルがいくつかありますので、その違いについて次章に書きます。
4.各モデルの違いについて
4-1.決定木モデルの種類
まず、決定木モデルを応用したモデルとして、以下のようなものがあります。
・XGBoost
・LightGBM
・RandomForest
大きく分けると XGBoost と LightGBM はブースティングという手法を用いており、
RandomForest はバギングという手法を用いています。
このブースティングとバギングの二つを説明するためには、
バイアスとバリアンスという言葉を理解する必要があるので、
まずこの二つの違いについて説明します。
4-2.バイアスとバリアンス
■バイアス
バイアスとは、「偏り」という意味を持った言葉であり、
機械学習の分野では、「実際値と予測値との誤差の平均」を表します。
わかりやすい例でいうと、以下の式のbの部分です。
$$y=ax+b$$
■バリアンス
バリアンスとは、「分散」という意味を持った言葉であり、
機械学習の分野では、「予測値の散らばり度合い」を表します。
以下の図は、バイアスとバリアンスを説明する際によく使われる、
バイアスとバリアンスの高低差を図にしたものです。
赤丸が真の値、青い点は予想値になります。
こちらを見ていただくと視覚的にイメージできると思います。
右上が「高バイアス」の状態、左下が「高バリアンス」の状態です。
図.4-2-1.バイアスとバリアンス
4-3.ブースティングとバギング
■ブースティング
ブースティングとは、『予測モデルの間違った予測に焦点を当て、
「重み」を加味し次のモデルを改善する』手法です。
先ほどのバイアスとバリアンスという言葉を用いると、
バイアスを減らす(未学習を減らす)動きをします。
■バギング
バギングとは、『Bootstrap Aggregating(ブートストラップ法)の略であり、
学習データを復元抽出でランダムに抽出し、学習する』手法です。
先ほどのバイアスとバリアンスという言葉を用いると、
バリアンスを減らす(過学習を減らす)動きをします。
4-4.XGBoost とLightGBMの違い
XGBoost と LightGBM はどちらもブースティングであると書きました。
この二つの差は決定木の『階層』に着目しているか、『葉』に着目しているかの違いです。
詳細についてはこちらがわかりやすかったのでご参照ください。
5.まとめ
決定木モデルとは何かという話から、
決定木モデルを応用させたモデルの違いについてまとめました。
一度理解してから感覚的に決定木モデルを使用していましたが、
実際に説明しようとすると難しいものだと痛感しています。
ただ理解できれば可視化もしやすく、とても優秀な手法なのでガンガン使ってみてください。
何か間違い等あればご指摘いただければ幸いです。