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()
続いてカーネル法。同じく学習データと検証データをプロット。
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()
このライブラリから境界線を引っ張る方法がわからなかったので、とりあえずしらみつぶしにポイントした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()
The Chikarazuku!
とりあえず力ずくで。スマートなやり方もゆくゆく学んでいきたい。