スキップしてメイン コンテンツに移動

線形SVMの実装

Introduction


今日は線形SVMの実装をしました。
SVMはDeep learningが主流になる前、人気だったとどこかで拝見しました。
SVMの詳しい理論の説明は別の機会に必ず書きます。

# 第一弾書きました。
SVMの理論 part 1

computerはwindowsでOSはwindows10です。Python3で実装します。
このプログラムには内点法という最適化を使っています。

Dataset

次の二つのdastasetを使います。
一つは、完全に分離できるような分布のデータです・
もう一つは完全に分離できないような分布のデータです。
例えば、data1の分布はこのような形になります。
enter image description here
この分布ならきれいに二つのクラスを分けるような線が引けそうですね。
もう一つのデータは次のようなデータを使います。
enter image description here
このデータはきれいに分けるような線は引けなさそうです。
この二つのデータを用いて、線形SVMを使っていきましょう。

Implementation

  • data1
    enter image description here
この線が分離面になります。
きれいにいい感じのところに引けてます。
  • data2
    このデータについては様々なCを用いて計算してみました。
enter image description here
enter image description here
enter image description here
Cの値が小さければ小さいほど、誤分類を認めてしまうことになります。
このデータではCの影響を確認しずらいかもしれませんが、\(C=1\) の時、よく見ると、赤色のデータが一つ境界面を飛び出しています。
線形でないSVMを使うとCの影響がもっとわかりやすいかもしれません。
非線形なSVMについては、別の記事で書こうと思います。

CODE

コードはすべてgithubに乗せています。
My SVM code is here
今回使ったファイルはgit_SVM_check.pyとgit_SVM_def.pyです。
git_SVM_check.py には次のようなコードが入ったメインファイルです。
if __name__ == '__main__':
git_SVM_def にはSVMのクラスと、内点法の実装が入っています。
次は非線形のSVMについても書きたいと思います。
もし、そちらの記事も見ていただけたらハッピーです。

コメント

このブログの人気の投稿

ヘッセ行列

Introduction English ver 今日は、ヘッセ行列を用いたテイラー展開について書こうと思います。 これは最適化を勉強するにあたって、とても大事になってくるので自分でまとめて残しておくことにしました。とくに、機械学習では最適化を必ず行うため、このブログのタイトルにもマッチした内容だと思います。 . 概要 ヘッセ行列の定義 ベクトルを用いたテイラー展開 関数の最適性 ヘッセ行列の定義 仮定 f は次のような条件を満たす関数です。. f はn次元ベクトルから実数値を出力します。 このベクトルは次のように表せます。 \[x = [x_1,x_2,,,,x_n]\] \(\forall x_i , i \in {1,2,,,n}\), f は二回偏微分可能です。 定義 ヘッセ行列は \(\frac{\partial^2}{\partial x_i \partial x_j}を (i,j)要素に持ちます。\) よってヘッセ行列は次のように表せます。 \[ H(f) = \left( \begin{array}{cccc} \frac{\partial^ 2}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & &\ldots \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^ 2 f}{\partial x_1 \partial x_2} & \frac{\partial^ 2 f}{\partial x_2^ 2} & \ldots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^ 2 f}{\partial x_n \partial x_2} & \frac{\partial^ 2 f}{\partial x_n \partial x_2} & \ldo...

Plane in two dimention

Introduction 日本語 ver Today, I prove this theorem. Plane in two dimention is expressed following. \[\{x|<x,v> = 0\}\] however, v is orthogonal vector for plane and not zero vector. Proof \[\forall k \in \{x|<x,v> = 0\},\] k is fulfill this form. \[<k,v> = 0\] Now, because k and v in two dimentinal space, each vector express following. \[k = (k_1,k_2)\] \[v = (v_1,v_2)\] Thus, \(<k,v>=k_1v_1 + k_2v_2=0\) Change this equation. \[k_2 = -\frac{v_1}{v_2} k_1\] This equation is plane that slope is \(-\frac{v_1}{v_2}\). Q.E.D

Discrete Fourier transform

Introduction 日本語 ver I will write about Discrete Fourier transform. Discrete Fourier transform is Abbreviated DFT. I am making pdf about Audio Signal Processing. I publish pdf at  github . However, I write tex in Japanese. I take a lecture about the signal processing. There is lecture at  thie page . I update this pdf.