1
3

More than 5 years have passed since last update.

scikit-learnの実装トレーニング1~ロジスティック回帰を使ってみる~

Last updated at Posted at 2019-08-13

やること

顧客情報から顧客が定期預金を申し込む確率を予測。
ロジスティック回帰を使用。
他のモデルの利用は次回に。
実装コードはこちらのbank1.py

目的

sckit-learnを用いて自分で実装してみる。

データ収集

UCIのBank Marketingを利用。
bank-additional.csv をダウンロード。
このままでは使えないのでこちらを参考にデータを列ごとに格納。
bank-01.csv と名前をつけて保存。

パッケージのインポート
import numpy as np
import pandas as pd
from sklearn.model_selection import *
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
import warnings
import mglearn
データの読み込み
df = pd.read_csv("data/bank_01.csv")
#ワンホットエンコーディング
data_dummies = pd.get_dummies(df)

features = data_dummies.loc[:, 'age':'poutcome_success']
X = features.values
y = data_dummies['y_no'].values
#データ確認
print("X.shape: {}  y.shape: {}".format(X.shape, y.shape))
print(data_dummies.y_no.value_counts())

X.shape: (4119, 63) y.shape: (4119,)
1 3668
0 451
データに偏りがあるのでAUCスコアを使用する。

GridSearchCVを使って最適な正則化強度Cを探索
pipe = Pipeline([('scaler', StandardScaler()), ('classifier', LogisticRegression())])
param_grid = {'classifier__C':[0.001, 0.01, 0.1, 1, 10]}

X_train, X_test, y_train, y_test = train_test_split(
    X, y, random_state=0)
grid = GridSearchCV(pipe, param_grid=param_grid, cv=3, return_train_score=False,  scoring="roc_auc")
grid.fit(X_train, y_train)
print("Best parameters: ", grid.best_params_)
print("grid best score, ", grid.best_score_)
print("Test set AUC: {:.2f}".format(grid.score(X_test, y_test)))

結果
Best parameters: {'classifier__C': 0.01}
grid best score, 0.9383648126404396
Test set AUC: 0.91

grid.cv_results_で調べると、Cの値ではそこまで結果は変わらなかった。
次回はロジスティック回帰以外で探索しよう。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3