○この記事の要点
サポートベクトルマシンを学習したのでメモ
サポートベクトルマシン:
・分類問題、回帰問題のどちらでも利用できるアルゴリズム
・ロジスティック回帰を利用するよりも、良い結果が得られる場合がある
・マージン(学習データのうち、最も決定境界に近いものと、決定境界との距離)を大きくすることで、より良い境界を得ようとする手法
・ハードマージンとソフトマージンの手法がある。ハイパーパラメータで設定する
ハードマージン:マージンの内側にデータが入り込むのを許容しない手法。厳密に線を引きすぎるので、過学習につながる可能性がある。
ソフトマージン:マージンの内側にデータが入り込むのを許容する手法。柔軟。
・教師あり学習
#○ソースコード(Python) 二値分類問題への適用
サポートベクトルマシン
from sklearn.svm import LinearSVC
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
%matplotlib inline
# データ生成
centers = [(-1, -0.125), (0.5, 0.5)]
X, y = make_blobs(n_samples=50, n_features=2, centers=centers, cluster_std=0.3)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# モデルの作成と学習及び評価
model = LinearSVC()
model.fit(X_train, y_train) # 学習
y_pred = model.predict(X_test)
accuracy_score(y_pred, y_test) # 評価
print(y_test) # テストデータの正解ラベル
print(y_pred) # 予測データの正解ラベル
print(accuracy_score(y_pred, y_test)) # 正解率
# テストデータの散布図
fig, ax = plt.subplots()
ax.scatter(X_test[:, [0]], y_test[:], c='blue', label='test data')
ax.legend()
結果
[1 0 0 1 0 0 0 1 1 0 0 1 1 1 0]
[1 0 0 1 0 0 0 1 1 0 0 1 1 1 0]
1.0
・テストデータと予測データが完全に一致しており、正解率が100%となっている。
・ただし、上記はデータが少ないことから、良いモデルになっているとは言い切れない。あくまでテストコード。