033_【分類】SVM(サポートベクターマシン)の使い方

前回学習したSVM(サポートベクターマシン)の使い方を実際にPythonで確認してみましょう!

目次

モデルの使い方

上記の書式を用いて線形分類の場合も非線形分類の場合もsvm.SVCで作成します。学習させたモデルにpredict命令で説明変数Xを渡すと予測結果が帰ってきます。

ここから

で作成したplot_boundary関数を使っていくためこの関数をあらかじめ実行し、読み込ませておいてください!

線形分類

SVM(サポートベクターマシン)で使用するデータセットを自動生成しましょう。
ランダムの種:1
特徴量:2

塊数:3
ばらつき:2
点の数:500その後、データを分け、モデルに学習させ、テストデータでテストし、分類の状態を表示して確認してみましょう!

コード

#1 ランダムの種:1、特徴量:2、塊数:3、ばらつき:2、点の数:500個のデータセットを作成
#2 訓練データ、テストデータに分ける
#3 訓練データを使ってロジスティック回帰の学習モデルを作成
#4 テストデータを使って正解率を調べる
#5 テストデータを使ってこの学習モデルの分類の様子を表示する


from sklearn import svm

X, y = make_blobs(    #1
    random_state=1,
    n_features=2,
    centers=3,
    cluster_std=2,
    n_samples=500) 

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)     #2

model = svm.SVC(kernel="linear")    #3
model.fit(X_train, y_train)

pred = model.predict(X_test)    #4
score = accuracy_score(y_test, pred)
print("正解率:", score*100, "%")

df = pd.DataFrame(X_test)   #5
plot_boundary(model, df[0], df[1], y_test, "df [0]", "df [1]")

参考資料:Python3年生機械学習のしくみ

実行結果

直線で3つに分類することができました!

非線形分類

次に、非線形分類を行ってみましょう。先ほど用意したデータを用いて、境界線の複雑さを1に設定して学習を行いましょう!

コード

#1 訓練データを使ってガウスカーネル法のSVMで学習モデルを作成
#2 テストデータを使って正解率を調べる
#3 テストデータを使ってこの学習モデルの分類の様子を表示する


model = svm.SVC(kernel="rbf", gamma=1)    #1
model.fit(X_train, y_train)

pred = model.predict(X_test)    #2
score = accuracy_score(y_test, pred)
print("正解率:", score*100, "%")

df = pd.DataFrame(X_test)   #3
plot_boundary(model, df[0], df[1], y_test, "df [0]", "df [1]")

参考資料:Python3年生機械学習のしくみ

実行結果

これで非線形な境界線になりました!

このgammaの値は、大きくすると複雑に、小さくすると単純な線に変わります。
次回はgammaの値を変更してみて学習を行ってみましょう!

目次