サポートベクタマシン線形・非線形
Coding
code: Python
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
iris = datasets.load_iris()
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
線形の場合
code: Python
# 線形SVMのインスタンスを生成
svm = SVC(kernel='linear', C=1.0, random_state=1)
# 線形SVMのモデルにトレーニングデータを適合させる
svm.fit(X_train_std, y_train)
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
# 決定境界のプロット
plot_decision_regions(X=X_combined_std, y=y_combined, classifier=svm, test_idx=range(105, 150))
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()
https://gyazo.com/a9a0479f838d65dd4fcdc2239d596a2e
非線形の場合
code: Python
# RBFカーネルによるSVMのインスタンスを生成(2つのパラメータを変更)
svm = SVC(kernel='rbf', gamma=0.2, C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
# 決定境界のプロット
plot_decision_regions(X=X_combined_std, y=y_combined, classifier=svm, test_idx=range(105, 150))
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()
https://gyazo.com/8082ba0e10f1b2efcf3eb66d0f933898
gammaを大きくしてみる
code: Python
# RBFカーネルによるSVMのインスタンスを生成(2つのパラメータを変更)
svm = SVC(kernel='rbf', gamma=100.0, C=1.0, random_state=1)
svm.fit(X_train_std, y_train)
X_combined_std = np.vstack((X_train_std, X_test_std))
y_combined = np.hstack((y_train, y_test))
# 決定境界のプロット
plot_decision_regions(X=X_combined_std, y=y_combined, classifier=svm, test_idx=range(105, 150))
plt.legend(loc='upper left')
plt.tight_layout()
plt.show()
https://gyazo.com/1b68baabed548ea561d6010bd260b9de