ロジスティック回帰

〇ベルヌーイ分布に従う変数の統計的回帰モデルの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)))







いいなと思ったら応援しよう!