思考ノイズ

無い知恵を絞りだす。無理はしない。

04_サポートベクトルマシン 05_サポートベクトルマシン(カーネル法)

サポートベクトルマシンの項目、境界線を視覚化したいなということで持ってる知識で無理くりやってみた。

まずは線形のサポートベクトルマシン(04)の学習データに境界線をひくのと、検証データのプロットをそれぞれ。

import matplotlib.pyplot as plt
import numpy as np

clr = ['red', 'blue']
plt.scatter(X_train.T[0], X_train.T[1], color=np.where(y_train==0, 'red', 'blue'))


line =np.linspace(-1.5, 1.5)
for coef, intercept, color in zip(fit.coef_, fit.intercept_, ['k','k']):                              
    plt.plot(line, -(line*coef[0] + intercept) / coef[1], c=color)
    break
plt.show()

plt.scatter(X_test.T[0], X_test.T[1], color=np.where(y_pred==0, 'red', 'blue'))
plt.show()

f:id:bython-chogo:20210430103954p:plainf:id:bython-chogo:20210430104006p:plain

続いてカーネル法。同じく学習データと検証データをプロット。

import numpy as np

clr = ['red', 'blue']
plt.scatter(X_train.T[0], X_train.T[1], color=np.where(y_train==0, 'red', 'blue'))

plt.show()

plt.scatter(X_test.T[0], X_test.T[1], color=np.where(y_pred==0, 'red', 'blue'))
plt.show()

f:id:bython-chogo:20210430104337p:plainf:id:bython-chogo:20210430104345p:plain

このライブラリから境界線を引っ張る方法がわからなかったので、とりあえずしらみつぶしにポイントしたArrayを作成してそれらをPredictさせた結果をプロットしてみた。

line =np.linspace(-1.5, 1.5)
arr = []
for x in line:
    for y in line:
        arr.append([x, y])
x_arr = np.array(arr)
y_arr = model.predict(arr)
clr = ['red', 'blue']
plt.scatter(x_arr.T[0], x_arr.T[1], color=np.where(y_arr==0, 'red', 'blue'))
plt.show()

f:id:bython-chogo:20210430104538p:plain

The Chikarazuku!

とりあえず力ずくで。スマートなやり方もゆくゆく学んでいきたい。