実行例は「saka.mokumoku」の「Google Colabotry」環境に保存してある
iris(菖蒲:アヤメ)データセットを使って進める
(その2)は行番号28~51までを解説する
#
# 1.データの読み込み
#
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#
from sklearn import datasets
#
%matplotlib inline
#
iris_datasets = datasets.load_iris()
#
#
#print("***詳細*****",flush=True)
#print(iris_datasets.DESCR)
#print("********",flush=True)
#
#
# 2.データの確認
#
iris = pd.DataFrame(iris_datasets.data,columns = iris_datasets.feature_names)
iris['target'] = iris_datasets.target
#
iris.head()
#
#
# 3.モデルの学習
#
target = iris['target']
data = iris[iris_datasets.feature_names]
#
from sklearn import model_selection
data_train,data_test,target_train,target_test = \
model_selection.train_test_split(data,target,train_size=0.8)
#
print(target_train.shape,target_test.shape)
print(data_train.shape,data_test.shape)
#
from sklearn.svm import SVC
model = SVC(gamma='scale')
model.fit(data_train,target_train)
#
target_predict = model.predict(data_test)
#
print(target_predict)
print(np.array(target_test))
#
model.score(data_test,target_test)
#
#
# 4.モデルの評価
#
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
#
precision = precision_score(target_test,target_predict,average='micro')
recall = recall_score(target_test,target_predict,average='micro')
f1 = f1_score(target_test,target_predict,average='micro')
#
print('適合率(precision)',precision)
print('再現率(recall)',recall)
print('F値(F-measure)',f1)
#
#
#
# データの先頭
#print("***先頭****",flush=True)
#iris.head()
#print("********",flush=True)
#
# データの概要
#print("***概要****",flush=True)
#iris.info()
#print("********",flush=True)
#
# データの要約統計量
#print("***統計*****")
#iris.describe()
#print("********")
#
# データの形状
#print("***形状*****")
#iris.shape
#print("********")
#
# データ要素の取り出し
#print("***要素*****")
#iris.iloc[:10]
#print("********")
#
# 条件に合う行の取得
#print("***条件*****")
#iris.query("target==1")
#print("********")
#
#
以下にサンプルコードと解説を載せます
3.モデルの学習
#
target = iris['target']
data = iris[iris_datasets.feature_names]
irisデータを機械学習用に準備する
今回は評価用データは設けず、全て機械学習用とする
目的変数(target)、説明変数(data)の2つを用意する
目的変数:結果(推論を行う対象)
説明変数:要因(推論を行うために用いる変数)
#
from sklearn import model_selection
data_train,data_test,target_train,target_test = \
model_selection.train_test_split(data,target,train_size=0.8)
分割用のオブジェクトをsklearnから読み込む
model_selectionを呼び出す
データの分割にはtrain_test_split関数を使用する
ランダムにデータをピックアップする関数
※記述した計算結果の数値は都度異なる結果になる
目的変数と説明変数は以下の様に分割される
target_train・・・80%、学習データ
target_test ・・・20%、検証データ
data_train・・・80%、学習データ
data_test ・・・20%、検証データ
#
print(target_train.shape,target_test.shape)
print(data_train.shape,data_test.shape)
分割の結果を確認する
目的変数の形状(shape)を各々出力する
説明変数の形状(shape)を各々出力する
以下はprint文による出力例
(120,) (30,)
(120, 4) (30, 4)
150行のデータが各々120行と30行に分割されている
target_train・・・80%(120行)
target_test ・・・20%(30行)
data_train・・・80% (120行、4列)
data_test ・・・20% (30行、4列)
#
from sklearn.svm import SVC
model = SVC(gamma='scale')
model.fit(data_train,target_train)
sklearn.svmモジュールに含まれるSVCクラスを呼び出す
サポートベクターマシン(SVM)を使って学習する
SVM・・・予測に必要なデータに絞り込んでいくこと
例:1本の境界線で2つに分類できるとして、
最もよく分類できる直線を求める
モデルとしてガンマ分布(gamma)を使用する
fit関数に学習データ(data_trainとtarget_tran)を渡す
モデルのデータ関連性を学習する
#
target_predict = model.predict(data_test)
検証データを使って予測する
predict関数に説明変数の検証データを与えると
予測結果がtarget_predictに返ってくる
#
print(target_predict)
print(np.array(target_test))
予測結果(target_predict)データと
正解(目的変数の検証データ:target_test)を並べて比較する
検証データは配列に変換する
以下はprint文による出力例
[0 0 2 2 1 1 1 2 2 1 0 1 1 1 2 0 0 1 1 1 1 0 0 0 0 1 0 0 2 0]
[0 0 2 2 1 1 1 2 2 1 0 1 1 1 2 0 0 1 1 1 1 0 0 0 0 1 0 0 2 0]
#
model.score(data_test,target_test)
正解率(決定係数)を計算する
説明変数の検証データ(data_test)と
目的変数の検証データ(target_test)とで正解率を求める
以下は正解率(score関数の出力)
0.9666666666666667