knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

機械学習で、ロジスティック回帰 予測問題


index:

概要

前回の重回帰分析と異なり、
目的変数が、連続した値ではなく
予測したい変数が連続数値ではなく、2種類の選択(購入する /しない)の場合
を考えます。

環境

python 3.5
scikit-learn
numpy
matplotlib

参考の資料

東大さまの、データサイエンス資料を参考にしました。
http://weblab.t.u-tokyo.ac.jp/gci_contents/

学習データ

特定の人の、収入に関するデータ

目的変数:
その人の収入が50K(5万ドル)を超えるかどうか
の判定

説明変数:
年齢、職業、性別など


adult_data.info() で、中身をみておきます

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32561 entries, 0 to 32560
Data columns (total 15 columns):
age               32561 non-null int64
workclass         32561 non-null object
fnlwgt            32561 non-null int64
education         32561 non-null object
education-num     32561 non-null int64
marital-status    32561 non-null object
occupation        32561 non-null object
relationship      32561 non-null object
race              32561 non-null object
sex               32561 non-null object
capital-gain      32561 non-null int64
capital-loss      32561 non-null int64
hours-per-week    32561 non-null int64
native-country    32561 non-null object
flg-50K           32561 non-null object
dtypes: int64(6), object(9)
memory usage: 3.7+ MB

コード

データ読み込み、pandas
目的変数:flg立てをする
学習、
評価
・標準化 を、行った場合の例です

import numpy as np
import numpy.random as random
import scipy as sp
from pandas import Series, DataFrame
import pandas as pd

# 可視化モジュール
import matplotlib.pyplot as plt
import matplotlib as mpl
#%matplotlib inline
# 機械学習モジュール
import sklearn

# 標準化対応、学習。
# 学習データ
adult_data = pd.read_csv("dat_money.csv" )
print(adult_data.head( ))

#
adult_data.info()
#
adult_data.groupby("flg-50K").size()
#
# 目的変数:flg立てをする
adult_data["fin_flg"] = adult_data["flg-50K"].map(lambda x: 1 if x ==' >50K' else 0)

#
adult_data.groupby("fin_flg").size()

#
# ロジスティック回帰
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 標準化のためのモジュール
from sklearn.preprocessing import StandardScaler

# 説明変数と目的変数
X = adult_data[["age","fnlwgt","education-num","capital-gain","capital-loss"]]
Y = adult_data['fin_flg']

# 学習データとテストデータに分ける
X_train, X_test, y_train, y_test = train_test_split(X,Y,random_state=0)

# ロジスティック回帰
model = LogisticRegression()

# 標準化
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std  = sc.transform(X_test)

clf = model.fit(X_train_std,y_train)
print("train:",clf.score(X_train_std,y_train))
print("test:", clf.score(X_test_std,y_test))

print(clf.coef_ )
#
pred= model.predict(X_test_std[:10])
print(pred )

実行

テストデータは、80.9% 程の正解
となりました。

train: 0.810483210483
test: 0.809974204643



・先頭の数件テスト、収入判定/ 予測

f:id:knaka0209:20181215131645p:plain