![見出し画像](https://assets.st-note.com/production/uploads/images/115710302/rectangle_large_type_2_e582b105db060e3844fe449559529871.png?width=1200)
サポートベクトルマシン
サポートベクトルマシン(SVM)?
サポートベクトルマシン(SVM)は、分類および回帰のための教師あり機械学習アルゴリズムです。最適なハイパープレーンまたは決定境界を見つけ、データの異なるクラスを最もよく分離することを目指します。SVMは線形および非線形データを処理し、マージン(ハイパープレーンと最も近いデータポイントの距離)を最大化するようなハイパープレーンを選択します。カーネルトリックを使用して非線形データを処理し、Cパラメータを調整してモデルの複雑性を制御します。 SVMは多クラス分類や高次元データの処理に適しており、正確な問題設定とパラメータの調整が重要です。
実習
データサイエンスの実践についてのコードを説明します。まず、データの読み込みとDataFrameのセットアップが行われます。Breast Cancerデータセットが使用され、特徴量と目標変数がDataFrameに格納されます。次に、データをトレーニングセットとテストセットに分割し、SVMモデルをトレーニングします。トレーニングされたモデルを使用してテストデータの予測を行い、分類レポートおよび混同行列が生成されます。
Import Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Get the Data
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
Set up DataFrame
df_feat = pd.DataFrame(cancer['data'],columns=cancer['feature_names'])
df_feat.info()
df_target = pd.DataFrame(cancer['target'],columns=['Cancer'])
Train Test Split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df_feat, np.ravel(df_target), test_size=0.30, random_state=101)
Train the Support Vector Classifier
from sklearn.svm import SVC
model = SVC()
model.fit(X_train,y_train)
Predictions and Evaluations
predictions = model.predict(X_test)
from sklearn.metrics import classification_report,confusion_matrix
print(confusion_matrix(y_test,predictions))
[[ 56 10]
[ 3 102]]
print(classification_report(y_test,predictions))
precision recall f1-score support
0 0.95 0.85 0.90 66
1 0.91 0.97 0.94 105
accuracy 0.92 171
macro avg 0.93 0.91 0.92 171
weighted avg 0.93 0.92 0.92 171
Gridsearch
適切なパラメータ(使用する C またはガンマ値など)を見つけるのは難しい作業です! しかし幸運にも、私たちは少し怠けて、いくつかの組み合わせを試してみて、何が最も効果的かを確認することができます!
パラメータの「グリッド」を作成し、可能なすべての組み合わせを試してみるというアイデアはGridsearchと呼ばれ、この方法はScikit-learnがGridSearchCVにこの機能を組み込んでいることで十分一般的です! CV はクロス検証の略であり
GridSearchCV は、試すべきパラメータとトレーニングするモデルを記述した辞書を取得します。 パラメータのグリッドは辞書として定義されています。ここで、キーはパラメータ、値はテストする設定です。
param_grid = {'C': [0.1,1, 10, 100, 1000], 'gamma': [1,0.1,0.01,0.001,0.0001], 'kernel': ['rbf']}
from sklearn.model_selection import GridSearchCV
GridSearchCVの素晴らしい点の一つは、メタエスティメータであることです。 それはSVCのような推定器を必要とし、全く同じ動作をする新しい推定器を作成します。この場合、分類器のようになります。 リピートを追加するべき=True を選択し、任意の数値に対して verbose を選択します。数値が大きいほど、より詳細になります(verbose はプロセスを説明するテキスト出力を意味します)。
grid = GridSearchCV(SVC(),param_grid,refit=True,verbose=3)
いつもより少しだけ、フィット感があります。 まず、最適なパラメータの組み合わせを見つけるために、クロス検証と同じループを実行します。 最適な組み合わせになると、最適なパラメータ設定を使用して単一の新しいモデルを構築するために、適合する(交差検証なし)すべてのデータに対して再度適合します。
# May take awhile!
grid.fit(X_train,y_train)
gridSearchCV によって best_params_ アトリビュートで検出された最良のパラメータと、 best_estimator_ アトリビュートで検出された最良の推定値を検査できます:
grid.best_params_
{'C': 10, 'gamma': 0.0001, 'kernel': 'rbf'}
grid.best_estimator_
次に、通常のモデルと同じように、このグリッド オブジェクトで予測を再実行できます。
grid_predictions = grid.predict(X_test)
print(confusion_matrix(y_test,grid_predictions))
[[ 60 6]
[ 3 102]]
print(classification_report(y_test,grid_predictions))
precision recall f1-score support
0 0.95 0.91 0.93 66
1 0.94 0.97 0.96 105
avg / total 0.95 0.95 0.95 171
歴史学への応用
文書分類とテキストマイニング
歴史学者は、大量の歴史的文書やテキストデータを分析して、特定の時代、イベント、または人物に関する洞察を得ようとします。SVMはテキスト分類の問題に有用に使用することができます。例えば、特定の時代の手紙や文書を分類することで、その時代の主要なイベントや流れを理解することができます。 グリッドサーチを活用してSVMの最適なパラメータを見つけ、テキスト分類の精度を向上させることができます。
歴史的パターンの探索
SVMはデータを分類し、パターンを認識するために使用されます。歴史的データに対してSVMを適用して、特定の歴史的パターンや傾向を発見することができます。例えば、特定の時代の兵力数や経済指標に関連するパターンを見つけるためにSVMを活用することができます。
歴史的イベントの予測
SVMは、データに基づいて将来のイベントを予測するためにも使用することができます。歴史的データを基にモデルを訓練することで、特定のイベントの可能性を予測するのに役立ちます。 グリッドサーチを通じて最適な予測モデルを見つけ、歴史的イベントの予測精度を向上させることができます。
履歴データの視覚化
SVMを使用してデータを分類し、視覚化することができます。履歴データをSVMで分類して可視化することで、過去のイベントやパターンをよりよく理解することができます。 グリッドサーチを使用して、可視化モデルのパフォーマンスを向上させることができます。
最後に
このように、SVMとGridSearchCVを組み合わせて、データの分類タスクにおいて最適なモデルとパラメータ設定を見つける方法が示されています。要約すると、サポートベクターマシンは物事の分類や予測に役立ち、グリッドサーチはこのマシンを最適に設定するのに役立ちます。
人文学エンジニア
ソンさん
参考
[Udemy] Python for Data Science and Machine Learning Bootcamp