前回
の続き。
今回から、前回紹介した二項分類の実装例のコード解説に入る。
下記にもう一度、プログラムの実装例とその出力例を示しておく。
実装例
# モジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.colors import ListedColormap
import sklearn
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
# データセットのインポート
file=pd.read_csv('logistic.csv',header=None)
# データの割り振り
X=file.iloc[:,0:2]
Y=file.iloc[:,2]
# データセットを学習データ(8割)とテストデータ(2割)に分割(random_stateは0)
X_train, X_test, Y_train, Y_test = sklearn.model_selection.train_test_split(X, Y, test_size=0.2, random_state=0)
# 分割の確認
print('分割の確認:',X_train.shape, X_test.shape, Y_train.shape, Y_test.shape)
# 学習実行
# インスタンスの作成
model=LogisticRegression()
# モデルの作成
model.fit(X_train,Y_train)
# 直線の確認
# 切片
print('切片の値 = ', model.intercept_)
# 係数
print('係数の値 = ', model.coef_)
# 学習データからの予測値
pred_train = model.predict(X_train)
# テストデータからの予測値
pred_test = model.predict(X_test)
# 学習データを用いた分類モデルの評価
print('正解率(学習データ) = ', metrics.accuracy_score(Y_train, pred_train))
print('適合率(学習データ) = ', metrics.precision_score(Y_train, pred_train))
print('再現率(学習データ) = ', metrics.recall_score(Y_train, pred_train))
print('F値(学習データ) = ', metrics.f1_score(Y_train, pred_train))
# テストデータを用いた分類モデルの評価
print('正解率(テストデータ) = ', metrics.accuracy_score(Y_test, pred_test))
print('適合率(テストデータ) = ', metrics.precision_score(Y_test, pred_test))
print('再現率(テストデータ) = ', metrics.recall_score(Y_test, pred_test))
print('F値(テストデータ) = ', metrics.f1_score(Y_test, pred_test))
# データセットおよび直線の図示
plt.figure(figsize=(4,4))
plt.scatter(file.iloc[:,0], file.iloc[:,1],c=file.iloc[:,2], cmap=ListedColormap(['#FF0000', '#0000FF']))
plt.plot(file.iloc[:,0], -file.iloc[:,0]*model.coef_[0,0]/model.coef_[0,1]-model.intercept_[0]/model.coef_[0,1])
plt.show()
出力例
分割の確認: (160, 2) (40, 2) (160,) (40,)
切片の値 = [-9.71024304]
係数の値 = [[0.04871103 1.89741032]]
正解率(学習データ) = 0.91875
適合率(学習データ) = 0.9195402298850575
再現率(学習データ) = 0.9302325581395349
F値(学習データ) = 0.9248554913294798
正解率(テストデータ) = 0.875
適合率(テストデータ) = 0.8125
再現率(テストデータ) = 0.8666666666666667
F値(テストデータ) = 0.8387096774193549
実際にプログラムを実行したい場合は、下記ボタンよりcsvファイル「logistic.csv」をダウンロードしてプログラムの保存先に保存すること。
1. モジュールのインポート
最初に書かれているのは、モジュールを読み込む(インポートする)ためのコードだ。
# モジュールのインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.colors import ListedColormap
import sklearn
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
モジュールとは、端的に言うとプログラムが書かれたファイルのことである。
モジュールとモジュールをインポートするためのコードの詳説は下記を参照。
実装例のコードを詳しく見ていくと次のようになる。
import numpy as np
import pandas as pd
⇒1行目は「NumPy」をインポートし、「np」という名前で使うためのコード。
2行目は「pandas」をインポートし、「pd」という名前で使うためのコード。
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.colors import ListedColormap
⇒「matplotlib」の「pyplot」をインポートし、「plt」という名前で使うためのコード。
2行目の「%」以下はJupyter Notebook上に図表を表示させるためのコードである。
3行目はライブラリ「matplotlib」の中にある「ListedColormap」というクラスをインポートするためのコード。
import sklearn
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
⇒ 「scikit-learn」をインポートし、その中にある「LogisticRegression」と「metrics」をインポートするためのコード。
「LogisticRegression」はロジスティック回帰モデルのクラスである。
「metrics」は分類モデルを評価する指標を計算する機能を備えている。
2. データセットのインポート
「モジュールのインポート」の後に書かれているのは、分類するデータセットをインポートするコードだ。
データセットのインポートを実行するコードの詳説は下記を参照。
実装例のコードを詳しく見ていくと次のようになる。
# データセットのインポート
file=pd.read_csv('logistic.csv',header=None)
⇒「logistic.csv」というcsvファイルを、ヘッダーなしでプログラム内に読み込み、それを変数「file」に格納するためのコード。
今回の例では、「logistic.csv」は下記のように、x-y座標上の点に対して「0」または「1」の値を割り振ったデータを集めたものになっている。
3.4 | 0.7 | 0 |
1.8 | 8.4 | 1 |
3.1 | 0.2 | 0 |
・ ・ ・ | ・ ・ ・ | ・ ・ ・ |
左端の列がx、中間の列がy、右端の列が「0」または「1」である。
この3つの数値を一括りにしたデータが200個集められている。
今回はヘッダーなしを条件にしているため、先頭行もデータとして扱われる。
次回予告
次回は各データの割り振りと、学習データとテストデータの分割を見ていこうと思う。
とはいっても、回帰分析のときとやっていることは大きく変わらないが。
END
※追記
データの分割について書いた。
コメント