Python ではじめる機械学習 7. サポートベクトルマシン

>100 Views

November 22, 25

スライド概要

profile-image

機械学習・音声認識・プログラミングに関する書籍を執筆しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

7. サポートベクトルマシン 線形分離できる 可能性が⾼い !! (a) 2次元上では線形分離不可能なデータ (b) ⾼次元へ写像されたデータ 7.1 サポートベクトルマシンとは 7.2 ソフトマージンによる誤識別データの吸収 7.3 カーネル関数を用いたSVM 7.4 SVMの応用 7.5 ハイパーパラメータの調整 荒木雅弘 : 『Pythonではじめる機械学 習』 (森北出版,2025年) スライドとコード

2.

7. サポートベクトルマシン 本章の説明手順 1. 線形分離可能なデータに対して,なるべく学習データに特化しすぎない識別面を求める 2. 線形分離不可能なデータに対して,誤識別に対するペナルティを設定することで,1. の 手法を改良する 3. さらに複雑なデータに対して,学習データを高次元の空間に写して,2. の手法を適用す る 4. 応用例の紹介 5. 3.の手法に対して,最適なハイパーパラメータを求める

3.

7.1 サポートベクトルマシンとは (1/6) 汎化性能を高めるために,マージンを最大化する識別面を求める マージン : 識別面と最も近いデータとの距離 学習データは線形分離可能とする サポート ベクトル (a) マージンの⼩さい識別⾯ マージン (b) マージンの⼤きい識別⾯

4.

7.1 サポートベクトルマシンとは (2/6) マージン最大化のための定式化 学習データ: x ∈ Rd , y ∈ {−1, 1} {(xi , yi )} (i = 1, … , N ) ​ ​ 識別面の式(超平面) w T x + w0 = 0 識別面の式に制約を導入(係数を定数倍しても超平面は不変) min ∣wT xi + w0 ∣ = 1 ​ i ​ ​

5.

7.1 サポートベクトルマシンとは (3/6) 学習対象の設定 学習データと識別面との最小距離(マージン) cf) 点と直線の距離の公式 ∣wT xi + w0 ∣ 1 min Dist(xi ) = min = i i ∥w∥ ∥w∥ ​ ​ ​ ​ ​ 目的関数:マージン最大化を,逆数の2乗の最小化と置き換える 1 min ∥w∥2 2 ​ 制約条件 : w で定まる超平面で正しく識別が行えること yi (wT xi + w0 ) ≥ 1, ​ ​ ​ (i = 1, … , N ) ​

6.

7.1 サポートベクトルマシンとは (4/6) 最適化問題の解法 : ラグランジュの未定乗数法 例題(2変数,等式制約) min f (x, y) s.t. g(x, y) = 0 ラグランジュ関数の導入 : L(x, y, α) = f (x, y) + αg(x, y) ラグランジュ係数の制約 : α ≥ 0 L を x, y, α で偏微分して 0 になる値が f の極値 変数3つに対して制約式が3つなので,変数について解ける ∂L ∂L ∂L = = =0 ∂x ∂y ∂α ​ ​ ​

7.

7.1 サポートベクトルマシンとは (5/6) より解きやすい問題への変換 N 1 L(w, w0 , α) = ∥w∥2 − ∑ αi (yi (wT xi + w0 ) − 1) 2 i=1 ​ ​ ​ N ​ ​ ​ ​ ​ N ∂L = 0 ⇒ ∑ αi yi = 0, ∂w0 i=1 ​ ​ ∂L = 0 ⇒ w = ∑ α i y i xi ∂w i=1 ​ ​ ​ ​ N ​ ​ N 1 L(α) = − ∑ αi αj yi yj xTi xj + ∑ αi 2 i,j=1 i=1 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 最後の式の最小化は αi ≥ 0 での2次計画問題なので,容易に極値となる α を求めるこ ​ とができ,そこから w が求まる

8.

7.1 サポートベクトルマシンとは (6/6) 定数項の計算 各クラスのサポートベクトルを引数とした識別関数の値の絶対値が 1 であることから 1 wT x+ + w0 = −(wT x− + w0 ) ⇔ w0 = − (wT x+ + wT x− ) 2 ​ ​ ​ ​ ​ ​ ​ ​ マージンが最大の識別関数 N g(x) = wT x + w0 = ∑ αi yi xT xi + w0 ​ ​ ​ ​ ​ i=1 サポートベクトル xi に対応する αi のみが 0 以上,残りは 0 ​ ​ マージン最大の識別面の決定にはサポートベクトルしか関与しない ​

9.

7.2 ソフトマージンによる誤識別データの吸収 (1/3) 少量のデータが線形分離性を妨げている場合 誤差を考える

10.

7.2 ソフトマージンによる誤識別データの吸収 (2/3) スラック変数 ξi の導入 ​ y i ( w T x i + w 0 ) ≥ 1 − ξi , ​ ​ ​ ​ (i = 1, … , N , ξi ≥ 0) ​ ξi = 0 : マージンの外側,0 < ξi ≤ 1 : マージンと識別面の間,1 < ξi : 誤り ​ ​ ​ 最小化問題の修正: スラック変数も小さい方がよい N 1 min ( ∥w∥2 + C ∑ ξi ) 2 ​ ​ i=1 計算結果 αi の2次計画問題に 0 ≤ αi ≤ C が加わるだけ ​ ​ ​

11.

7.2 ソフトマージンによる誤識別データの吸収 (3/3) C : エラー事例に対するペナルティの大きさ 大きな値 : 誤識別データの影響が大きい マージンが狭くても誤識別をなるべく減らすようにする 小さな値 : 誤識別データの影響が小さい 多少の誤識別があっても,なるべくマージンを広くする

12.

7.3 カーネル関数を用いたSVM (1/5) クラスが複雑に入り交じった学習データ 特徴ベクトルを高次元空間に写像して線形分離可能性を高める ただし,もとの空間でのデータ間の近接関係は保持するように写像する 線形分離できる 可能性が⾼い !! (a) 2次元上では線形分離不可能なデータ (b) ⾼次元へ写像されたデータ

13.

7.3 カーネル関数を用いたSVM (2/5) 高次元への非線形変換関数 ϕ(x) を設定する カーネル関数 : 2つの点の近さを表す k(x, x′ ) = ϕ(x)T ϕ(x′ ) もとの空間での2つの点の近さを,変換後の空間での2つのベクトルの内積に対応させる x と x′ が近ければ k(x, x′ ) は大きい値 カーネル関数が正定値性を満たすとき,このような非線形変換が存在することが保証さ れている

14.

7.3 カーネル関数を用いたSVM (3/5) 正定値カーネル関数の例(scikit-learn SVCの定義) 線形(linear) : k(x, x′ ) = xT x′ 高次元に写像せず,もとの特徴空間でマージン最大の超平面を求めるときのカーネル関数 多項式(poly) : k(x, x′ ) = (xT x′ + r)d d 項の相関を加えるので d が大きいほど複雑な識別面.r はたいてい 1 ガウシアン(rbf) : k(x, x′ ) = exp(−γ∥x − x′ ∥2 ) γ が大きいほど近くのデータしか影響しないので複雑な識別面

15.

7.3 カーネル関数を用いたSVM (4/5) 変換後の線形識別関数:g(x) = w T ϕ(x) + w0 ​ N SVMで求めた w の値を代入: w = ∑i=1 αi yi ϕ(xi ) ​ ​ ​ N ​ N g(x) = ∑ αi yi ϕ(x)T ϕ(xi ) + w0 = ∑ αi yi K (x, xi ) + w0 ​ i=1 ​ ​ ​ ​ ​ ​ ​ ​ ​ i=1 カーネルトリック : 非線形変換の式は不要で,カーネル関数を用いて元の空間の情報の みで識別関数が書ける 変換後の空間での線形識別面は,もとの空間での複雑な非線形識別面に対応

16.

7.3 カーネル関数を用いたSVM (5/5) sklearn で識別を行う SVM の定義 SVC(C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None) ハイパーパラメータ C : スラック変数の重み kernel : カーネルの種類 'poly' : 多項式カーネル 'rbf' : RBFカーネル その他 : 'linear', 'sigmoid', 'precomputed' degree : polyカーネルを指定したときの次数 gamma : (主として)RBFカーネルを指定したときの係数

17.

7.4 SVMの応用 (1/2) One-class SVMによる新規検知 RBFカーネルによる写像後の学習データを正例,原点を負例とみなして境界を得る 新規データに対して,境界の外の場合は異常とみなす

18.

7.4 SVMの応用 (2/2) サポートベクトル回帰 回帰における基底関数としてカーネル関数を用いる 例) RBFカーネルを用いた場合 N N c^(x) = ∑ αj K (x, xj ) = ∑ αj exp(−γ∥x − xj ∥2 ) ​ ​ j=1 1次元特徴の場合 ​ ​ ​ ​ j=1 2次元特徴の場合

19.

7.5 ハイパーパラメータの調整 (1/2) パラメータ : 学習データを用いて調整 線形識別関数の重み w SVMの α ニューラルネットワークの結合の重み ハイパーパラメータ : 学習前に決めておくもの 高次識別関数の次数 b,正則化項の重み α SVM におけるスラック変数の重み C , 多項式カーネルの次数 d ニューラルネットワークの中間ユニット数,層数

20.

7.5 ハイパーパラメータの調整 (2/2) ハイパーパラメータが複数ある場合 グリッドサーチ:各格子点で性能を予測する 格子点の最小値・最大値・間隔等の知見が必要 ハイパーパラメータが連続値の場合は等比数列で設定する ランダムサーチ:各ハイパーパラメータの適切な範囲内で乱数によって複数点を設定 性能に大きく寄与するハイパーパラメータが存在する場合に有効 ベイズ最適化 ハイパーパラメータの値を入力,性能を出力とした回帰問題を設定し,ガウス過程回帰を用い て性能が高くなりそうなハイパーパラメータを探索

21.

まとめ SVMは線形分離可能なデータに対して,マージン最大の識別面を求める手法 誤識別に対するペナルティをスラック変数として設定することで,線形分離不可 能なデータへも適用可能 学習データを高次元の空間に写像するカーネル法では,カーネルトリックによっ て元の空間での情報のみで識別関数を表現できる SVMのような多数のハイパーパラメータを持つモデルではハイパーパラメータチ ューニングを行う