今回の「ゆるっと機械学習」は応用編です。
「SVM?」「勾配ブースティング?」「カーレースの用語?」と思った方、大丈夫です。
今回も数学の森にはまだ入りません。
いつもと同じように、まずは感覚で理解する編として、イメージでつかんでいきましょう。
それでは、レッツゴーーーー!!!
SVM(サポートベクターマシン)
まず、SVMは分類(クラス分け)をするアルゴリズムです。
たとえば健診結果のデータから、「要再検査」か「問題なし」かを分けたいときに登場します。
ロジスティック回帰も分類に使えましたよね?(忘れた方は、こちらの記事をどうぞ)
SVMは、そこから一歩進んでこう考えます。
「どうせ線を引くなら、できるだけ余裕をもって分けてぇ〜〜〜!」
そう、SVMのキーワードはマージン(margin、余白)です。
つまり、「クラスA」と「クラスB」を分ける境界線の両側に、余裕をとるのです。
マージン最大化ってなんぞや
例えば、病棟のナースステーションにAチーム、Bチームの看護師の制服が大きな棚に置いてあるとしましょう。
間に仕切りを置こうとすると、AチームとBチームの範囲のギリギリに置いたら服が混ざってしまいますよね。
でも仕切りをちょっとずつ動かして、どっちの服も当たらない位置に置けたらベストです。
SVMがやっているのは、まさにこの仕切り(=境界線)を最も安全な位置に置くことなんです。

サポートベクトルってなんぞや
実は、SVMが最も注目しているのはすべてのデータではなく境界線のそばにあるデータなんです。
この「ギリギリ境界に触れそうなデータ」がサポートベクトルです。
SVMはこのギリギリのデータを見ながら、どの位置に仕切りを置くかを判断します。
カーネル法:「線で分けられない」世界でも愛と勇気と誇りを持って戦うよ
しかし、現実のデータは、まっすぐな線では分けられないことが多いのです。
健康データなんて、その代表格です!なんてこったい。
そこで登場するのが「カーネル法」です。
ざっくり言えば、データを高次元の空間に持ち上げて、線で分けられるように変換するという方法です。
……「意味が分かりにくい」って??じゃあこうしましょう。
例えば、あなたが企業で健康相談を受けている保健師さんだとしましょう。
「生活習慣」だけでストレスが高い人を見分けようとしても、上手くできなかったとしましょう。
でもそこに「睡眠の質」や「職場の人間関係」という新しい視点(次元)を加えたら、
ストレスが高い人と低い人がきれいに分かれるようになるかもしれません。
このように、データの見方を立体的に捉えて、違う角度で見たら発見があるかもよ、という考え方です。
もちろん弱点もある
SVMは精密で美しい理論を持っていますが、実はちょっと神経質なアルゴリズムでもあります。
カーネルの種類やパラメータの調整を間違えると、全くデータを分けられなくなることもあります。
また、データが増えると計算が重くなるのも難点です。
少人数の健診データなら得意でも、全国規模の大規模データになると息切れします。
いわば「少数精鋭の外科医タイプ」です。
勾配ブースティング
SVMが「1本の線で勝負するタイプ」だとしたら、
勾配ブースティング(Gradient Boosting)は「チームプレイ型」です。
名前の通り、「ブースト=押し上げる」アルゴリズム。
つまり「ちょっとだけ下手っぴな子たち(=弱学習器)」をたくさん集めて、みんなで協力して強くなろう!という考え方です。
弱学習器ってなんぞや
たとえば、小さな決定木(木の深さが浅い)を思い浮かべてください。
(決定木って何だったっけ?という方はこちらの記事をどうぞ)
小さな決定木達(弱学習器)は経験が浅い看護師さん達のようなものです。
1人ではちょっと頼りないですが、「Aさんは口下手だけどフィジカルアセスメントが得意!」「Bさんは知識が浅いけどコミュニケーション力が高い!」と部分的には良いところがあります。
この「ちょっと惜しくて上手くいかなかった」という経験を何度も繰り返して、
「ある決定木(看護師さん)のミスを他の決定木(看護師さん)が補い合い、修正していく」
それが勾配ブースティングです。
「失敗を次に活かす、成長型アルゴリズム」ですね。
どうやってミスを修正している?
ここで出てくるのが「勾配」という言葉です。
ざっくり言うと、「どの方向に改善すればいいかを数学的に教えてくれるベクトル」です。
これを使って、前の予測の誤りを少しずつ埋めていきます。
イメージとしては、「前回の看護記録で抜けていた項目を確認 → 次回はそこを重点的に観察」といったところです。
最強の仲間達を紹介するぜ!!!
勾配ブースティングにはいくつか有名な派生モデルがあります。
いわば、「ブースティング三兄弟」です。
どれも同じ弱学習器を積み重ねるという考え方ですが、
それぞれ性格や得意分野がちょっとずつ違います。
XGBoost(エックスジーブースト)
最も有名で、ブースティング界の長男的存在です。
特徴としては、とにかく高精度。そして計算もそこそこ速い。
欠損値にも自動対応でき、抜けのあるデータにも強いです。
少し職人気質でパラメータ調整が多いですが、安定感抜群の万能エースです。
LightGBM(ライトジービーエム)
次男はスピード重視タイプです。
Microsoftが開発したモデルで、「データが多すぎてXGBoostが重い…」という時に活躍します。
特徴としては、軽くて速いけど、頭もキレる。
仕事のできる中堅ナースのような存在です。
しかもメモリの使い方が上手いので、大量の健診データや全国規模の調査データにも向いています。
実務やデータサイエンス系のコンペでは、LightGBMはメモリの使い方が上手いので大活躍するようです。
CatBoost(キャットブースト)
三男はロシア発の猫の名を持つ天才肌です。
カテゴリデータ(例:性別、地域、職種、部署など)を自動で処理してくれるのが最大の強みです。
通常、カテゴリ変数はエンコード(数値化)しないと使えませんが、CatBoostはそれを自分で良い感じに変換してくれます。
そんな気配り上手な三男です。
弱点もまとめるよ
勾配ブースティングは、とても真面目で頑張り屋なアルゴリズムです。
そのあまりの頑張りぶりゆえに、訓練データを覚えすぎてしまう(過学習)という問題を起こすことがあります。
(過学習が起こると何があるんだっけ?という方はこちらをどうぞ)
また、木を何本も重ねるため、学習に時間がかかるのも弱点です。
XGBoostやLightGBMはその欠点を少しずつ改善していますが、「速さより正確さを取る」性格は今も健在です。
まとめ
以上、SVM、勾配ブースティングの説明でした。
- SVM:きっちり分ける職人気質
- 勾配ブースティング:チームプレイで弱点を補い合う
機械学習の性格がそれぞれ異なるのが面白いですね。
次回の記事はいよいよ数学編です!
お楽しみに!!!
