左側の (x, y) 平面上の点を分類する場合、
このままだと線形分類器(直線で分類するアルゴリズム)ではうまく分類できないのが、
右図のように z 軸を追加してデータを変形すると、
平面できれいに分割できるようになって、線形分類器による分類がうまくいくというものです。
このように、高次元空間にデータを埋め込むことでうまいこと分類するのが
カーネル法の仕組みだというわけです。
svc = サポートベクターマシン
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
from sklearn.svm import LinearSVC from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.datasets import make_gaussian_quantiles # データの生成 X, y = make_gaussian_quantiles( n_samples=1000, n_classes=2, n_features=2, random_state=42) train_X, test_X, train_y, test_y = train_test_split(X, y, random_state=42) # 以下にコードを記述してください # モデルの構築 model1 = SVC(random_state=42) model2 = LinearSVC(random_state=42)#これは線形 # train_Xとtrain_yを使ってモデルに学習させる model1.fit(train_X, train_y) model2.fit(train_X, train_y) # test_Xに対するモデルの分類予測結果 print("非線形SVM: {}".format(model1.score(test_X, test_y))) print("線形SVM: {}".format(model2.score(test_X, test_y))) |