Support Vector Machine のまとめ
What is SVM ?
SVM は一言で言うと、データを2つに分ける線を引く、教師ありでの機械学習モデルです。
この時に優先事項があります。
- データを正確に group 分けする。(異常値outlierは別)
- 線と点との差である Margin を最大化する。
default のコード
from sklearn.svm import SVC
SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True,
probability=False, tol=0.001, cache_size=200, class_weight=None,
verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)
SVM 内の Parameter の説明
- C
Cは、誤分類をどの程度許容するかを決めるパラメータ。Cの値を大きくすれば大きくするほど、データの分類をより正確にしようとする。つまり、より複雑な線になりやすい。大きくしすぎると、過学習の状態になってしまうので、注意。
According to the 'Introduction to Machine Learning' from Udacity
-
kernel
基本的に使うのは、線形カーネルの Linear と、 非線形カーネルの rbf の二種類。ちなみに、 Linear にすると直線で、データを分け、 rbf にすると、より曲線的で、複雑な線でデータを分ける。 -
gamma
これは、線に近い方の点か線から遠い方の点、どちらを重要視するかを決める。つまり、値を大きくすると、近くの点との margin を重要視して、その結果、線は複雑になる。
According to the 'Introduction to Machine Learning' from Udacity
反対に、小さくすると、遠くの点との margin を重要視するようになるので、線はある程度シンプルになる。
According to the 'Introduction to Machine Learning' from Udacity
SVM の 良い点悪い点。
-
良い点
最適化すべきパラメータが少ない。
データの特徴量が高次元になっても、対応できる。 -
悪い点
データにノイズが含まれている場合(上記の図で言えば、少数のマルが、バツの領域に存在していたり、少数のバツがマルの領域に存在していたり)、そして、データがオーバラップしている場合(上記の図で言うと、真ん中の線を引くべきところで、多くのマルとバツが混在している場合)していると、データが綺麗に分類されずらい。
まとめ
以上が現在筆者のわかる範囲での SVM の概要です。
日々更新していきますので、追加すべきところ、直すべきところありましたら、コメントいただけると幸いです。