2021年2月9日
機械学習学習日記 - 8日目
2.3.7 カーネル法を用いたサポートベクタマシン(SVM)について。数学的な説明はかなり難しい、とのことで本書では省かれている。線形SVM(=カーネル法でない)に非線形の特徴量を加えることでモデルが強力になるが、どの特徴量を加えるべきかわからず、計算量も大きくなりすぎる。そのため用いる数学的なトリックがカーネルトリックで、データポイント間の距離計算を直接計算することで非常に大きな計算量無く実現できる。
今までの項の説明と同じく、SVMのパラメータの説明と考え方、前処理の一例としてデータの特徴量を0-1のレンジにおさえて処理させる方法等々を解説している。
SVMはデータの特徴量がわずかでも複雑な決定境界を作れ、低次元・高次元でもうまく機能するが、サンプル数が大きくなると計算機リソースの点で難しくなる。データ前処理とパラメータ調整が必要で、なおかつそのモデル検証とその予想理由が難しい。そのため、勾配ブースティング(GBDT)は前処理がほぼ不要なケースも多いこともあり、決定木ベースのモデルが用いられる事が多い。ただ、特徴量が似たデータにおいて(本ではカメラのピクセルを例に上げている)は、SVMを試す価値がある。
この辺まで読みすすめるにつれ、numpy, ndarray の便利さが徐々に解ってきた。数学的な関数実装群はもちろんのこと、Python での syntax での表現、例えば ndarray > 0
で0以上かどうかの真偽値を返したり、直感的な配列同士の計算だったり、メモリ空間を効率的に使うための工夫だったりが垣間見れる。