機械学習で、ロジスティック回帰 予測問題
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 )
github
github.com
python3 です。
実行
テストデータは、80.9% 程の正解
となりました。
train: 0.810483210483 test: 0.809974204643
・先頭の数件テスト、収入判定/ 予測