サポートベクターマシン(SVM)
サポートベクターマシン(SVM)は、分類や回帰のための教示あり学習アルゴリズムです。SVMはデータセットの特徴を学習し、データポイントを最もよく分離する超平面を見つけることによって分類を行います。
今回はScikit-learnライブラリを使った実装方法を紹介します。
必要なライブラリのインポート
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
データセットの準備
ここでは、Scikit-kearnで用意されているIrisデータセットを使用します。
# データセットのロード
iris = datasets.load_iris()
X = iris.data
y = iris.target
# トレーニングセットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Irisデータセットは、機械学習でよく使われるデータセットの一つです。このデータセットは、アイリス(Iris)と呼ばれる花の3種類(セトサ、バーシクル、バージニカ)のそれぞれ50サンプルから構成されており、合計150のデータポイントが含まれます。
X(特徴量)
- がく片の長さ (Sepal Length): がく片(花を包む緑色の部分)の長さをセンチメートルで測定。
- がく片の幅 (Sepal Width): がく片の幅をセンチメートルで測定。
- 花びらの長さ (Petal Length): 花びらの長さをセンチメートルで測定。
- 花びらの幅 (Petal Width): 花びらの幅をセンチメートルで測定。
y(ターゲット変数)
- Iris Setosa
- Iris Versicolor
- Iris Virginica
データの標準化
SVMは特徴のスケーリングに敏感なため、データを標準化する
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
SVMモデルの作成とトレーニング
ここでは、RBFカーネルを使用しますが、必要に応じて異なるカーネルを選択できます。
# SVMモデルの作成
svm_model = SVC(kernel='rbf')
# モデルのトレーニング
svm_model.fit(X_train, y_train)
モデルの評価
モデルの性能をテストセットで評価します。
# テストデータに対する予測
y_pred = svm_model.predict(X_test)
# 性能評価
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
"""
出力結果
[[19 0 0]
[ 0 13 0]
[ 0 0 13]]
precision recall f1-score support
0 1.00 1.00 1.00 19
1 1.00 1.00 1.00 13
2 1.00 1.00 1.00 13
accuracy 1.00 45
macro avg 1.00 1.00 1.00 45
weighted avg 1.00 1.00 1.00 45
"""
一つ目の行列はモデルがどのように各クラスを予測したかを示しています。Irisデータセットには3つのクラス(0: Setosa、1: Versicolor、2: Virginica)があるため、3x3の行列になります。
行: 実際のクラス
列: 予測されたクラス
この行列では、各クラスのすべてのサンプルが正しく分類されています。例えば、Setosa(0)の19サンプル全てが正しくSetosaとして予測されています(左上の19)。同様に、Versicolor(1)とVirginica(2)のサンプルも完全に正確に予測されています
分類レポートではクラスごとのモデルの性能を詳細に示しています。
- Precision: クラスに正しく分類されたアイテムの割合。例えば、Setosa(0)については、予測されたすべてのサンプルが正確であるため、1.00(または100%)です。
- Recall: 実際のクラスのサンプルがどれだけ正しく検出されたか。ここでも、各クラスについて完全なリコールがあります。
- F1-score: PrecisionとRecallの調和平均。これも各クラスについて1.00です。
- Support: 各クラスのサンプル数。
また、レポートは全体的な精度(accuracy)、マクロ平均(macro avg)、加重平均(weighted avg)も提供しています。これらの値もすべて1.00(または100%)で、モデルが高い精度で分類を行なっていることが確認できます。