ロジスティック回帰とは、ベルヌーイ分布に従う変数の統計的回帰モデルの1つです。回帰という名前がついていますが、分類問題を解くためのモデルなので注意しましょう。
ロジスティック回帰ではシグモイド関数を使用して、確率値を算出し0, 1の分類を行います。
目次
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
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, f1_score
データセットの準備
breast_cancer_df = load_breast_cancer(as_frame=True).frame
X = breast_cancer_df.drop("target", axis=1).values
y = breast_cancer_df["target"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
モデルの構築と学習
model = LogisticRegression(
penalty="l2",
dual=False,
tol=1e-4,
C=1.0,
fit_intercept=True,
intercept_scaling=1,
class_weight=None,
random_state=42,
solver="lbfgs",
max_iter=100,
multi_class="auto",
verbose=0,
warm_start=False,
n_jobs=4,
l1_ratio=None,
)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
評価
print("accuracy train data: ", accuracy_score(y_train, y_train_pred))
print("accuracy train data: ", accuracy_score(y_test, y_test_pred))
print("f1 train data: ", f1_score(y_train, y_train_pred))
print("f1 test data: ", f1_score(y_test, y_test_pred))
多値分類
ライブラリのインポート
import pandas as pd
from sklearn.datasets import load_wine
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
データセットの準備
wine_df = load_wine(as_frame=True).frame
X = wine_df.drop("target", axis=1).values
y = wine_df["target"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
モデルの構築と学習
model = LogisticRegression(
penalty="l2",
dual=False,
tol=1e-4,
C=1.0,
fit_intercept=True,
intercept_scaling=1,
class_weight=None,
random_state=42,
solver="lbfgs",
max_iter=100,
multi_class="auto",
verbose=0,
warm_start=False,
n_jobs=4,
l1_ratio=None,
)
model.fit(X_train, y_train)
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
評価
print("accuracy train data: ", accuracy_score(y_train, y_train_pred))
print("accuracy test data: ", accuracy_score(y_test, y_test_pred))
print("f1 train data: ", f1_score(y_train, y_train_pred, average="micro"))
print("f1 test data: ", f1_score(y_test, y_test_pred, average="micro"))
まとめ
本記事では、scikit-learnを用いて線形回帰モデルを構築する手順を解説しました。
コメント