ふと思う、、、アウトプットが足りねぇ!!!
現在大学2年生、エンジニアになるために勉強してはいるものの、アウトプットが圧倒的に足りないとおもった。よし、とりあえずQiita書いてみよう!
まず書く前に、コードの書き方を一読。
参考にした記事
https://qiita.com/shizen-shin/items/a997bc228fa2850c9fce
ってことで、とりあえず事始めとして最近勉強したサポートベクターマシーン(svm)の備忘録書いていく。
今回やること
svmを使った簡単な分類問題を解いていきます。
使うデータはsklearnのワインのデータ。3つに分類していきます。
ほぼ教科書に載ってることですね。
必要なライブラリをインポート
サポートベクターマシーンに必要なライブラリをインポートします。
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
import seaborn as sns
使用するデータを用意
from sklearn.datasets import load_wine
wine = load_wine() # データをロード
wine_df = pd.DataFrame(wine.data, columns=wine.feature_names) # データをデータフレームに変換
wine_df["class"] = wine.target # カラム[class]に目的変数を設定。
簡単にデータの分布を確認
wine_df.describe()
訓練データとテストデータに分割 & 標準化
svmが学習できるように説明変数を標準化していきます。
標準化とは平均を0、標準偏差を1にすることです。
# 訓練データとテストデータに分割
x_train, x_test, t_train, t_test = train_test_split(wine.data, wine.target, random_state=0)
# データの標準化
std_scl = StandardScaler()
std_scl.fit(x_train)
x_train = std_scl.transform(x_train)
x_test = std_scl.transform(x_test)
モデルの定義、学習、予測した後、評価
モデルを定義、学習、予測した後、
accuracy_scoreを使って今回の予測の正答率を計算します。
model = LinearSVC(random_state=0) # モデルを定義
model.fit(x_train, t_train) # 学習
# 予測
y_test = model.predict(x_test)
# 正解率
acc_test = accuracy_score(t_test, y_test)
print(acc_train, acc_test)
1.0 1.0
今回テストに使用した45件のデータ全てにおいて正解することができました。
裏で行われている計算をもっと深く知っていきたいです。
最後に
今回初めてのQiita投稿ということで、試しにsvmの備忘録を記録しました。
結構楽しく書けたので、今後も投稿していきたいです!
ありがとうございました。
sklearnドキュメント
https://scikit-learn.org