ロジスティック回帰
〇ベルヌーイ分布に従う変数の統計的回帰モデルの1つ
-分類のためのアルゴリズム(2値分類)
-シグモイド関数を使って、自称が起こる確率を0から1の範囲で算出。
-3クラス分類でロジスティック回帰を行う場合、確率値は3種類算出される。
【ベルヌーイ分布とは】
→2種類のみの結果しか得られないような実験。
結果を0と1で表した分布。
LogisticRegression
ー線形回帰はscikit-learn.linear_modelの中からLogisticRegressionというモジュールをインポート
【LogisticRegression()の引数】
・引数penalty:ペナルティ関数の設定(l1:L1正則化、l2:L2正則化)
・引数C:正則化の影響度の設定
・引数random_state:乱数
・引数solver: 最適化のアルゴリズム('newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}
・引数max_iter: 収束計算の最大試行回数
・引数n_jobs: 計算に使うジョブの数
【sklearn.linear_model.LogisticRegressionクラスのメソッド】
・fit(X, y[, sample_weight]):学習の実行
・get_params([deep]):学習の際に用いたパラメータの取得
・predict(X): 予測の実行
・predict_proba(X): 予測の実行(確率値)
・score(X, y[, sample_weight]): 決定係数の算出
・set_params(**params): パラメータの設定
〇2値分類
<手順①>データセット
# ライブラリのインポート
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
# データのロード
breast = load_breast_cancer()
df_breast = pd.DataFrame(data=breast.data,columns=breast.feature_names)
df_breast['target'] = breast.target
<手順②>(目的関数のクラス比率をvalue_counts()を使って確認)
In [1]: df_breast['target'].value_counts()
Out[1]: 1 357
0 212
Name: target, dtype: int64
<手順③>(インスタンス作成)
# インスタンス作成
clf = LogisticRegression(solver='liblinear')
インタンス作成時は引数solverのみliblinearと指定します。
liblinearは比較的小さいデータセットに対し用いるsolverとなっています。今回のデータセットもあまり大きいデータセットではないので
<手順➃>(変数の設定とデータの分割)
# 説明変数
X = df_breast[breast.feature_names].values
# 目的変数target
Y = df_breast['target'].values
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)
<手順⑤>(モデル作成、予測)
.predict_proba()とすることで未知データに対しての予測確率を算出することが可能となり、今回は2値分類となっているため2種の確率値となります。
In [2]: # 予測したモデルで未知データに対して予測(確率)
clf.predict_proba(X_test)
Out[2]: array([[2.28206045e-01, 7.71793955e-01],
・・・
[8.81936483e-01, 1.18063517e-01]])
<手順⑥>(精度の算出)
from sklearn.metrics import accuracy_score
In [3]: # 精度算出
accuracy_score(y_test,clf.predict(X_test))
Out[3]: 0.956140350877193
〇多値分類
<手順①>ライブラリのインポート、データのロード
In [1]: # ライブラリのインポート
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# データのロード
wine = load_wine()
df_wine = pd.DataFrame(data=wine.data,columns=wine.feature_names)
df_wine['target'] = wine.target
<手順②>インスタンス作成
# インスタンス作成
clf = LogisticRegression(solver='liblinear')
<手順③>変数の設定、データの分割
# 説明変数
X = df_wine[wine.feature_names].values
# 目的変数target
Y = df_wine['target'].values
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)
<手順➃>予測モデル作成
# 予測モデルを作成
clf.fit(X_train, y_train)
<手順⑤>
# 精度算出
print(accuracy_score(y_test,clf.predict(X_test)))