機械学習/Pythonで前処理する のバックアップ差分(No.2)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
*目次 [#f71521a0]
#contents


*はじめに [#c718b344]

Pythonの機械学習ライブラリーscikit-learnを用いて機械学習を行うには、入力をNumPy行列にする必要があります。

scikit-learnを使うととても簡単に機械学習ができますが、実際にscikit-learnを使って機械学習をしようとすると、scikit-learnに入力するNumPy行列を作る前処理の方が大変です。

ここでは、前処理について説明します。

環境はこれまでと同じです。

例として、銀行マーケティングのデータセットを用います。
-[[Bank Marketing Data Set>https://archive.ics.uci.edu/ml/datasets/bank+marketing]]


*データの読み込み [#we2a356e]

データは、Excelなどの表計算ソフトを使って用意し、CSVファイルとして書き出します。

このCSVファイルを、Pandasを使って読み込みます。

#geshi(python){{
import pandas as pd
df_bank = pd.read_csv('bank.csv')
}}
ここでは、bank.csvがCSVファイルの名前です。

最初の列が事例IDの場合は、index_col オプションに列番号を指定します。(列番号は 0 から始まります。)
#geshi(python){{
df_bank = pd.read_csv('bank.csv', index_col=0)
}}




*カテゴリー変数の変換 [#l3d47ab3]

*数値に置換 [#yf14b6d4]
カテゴリー変数の値を数値に置き換えるには、mapメソッドやreplaceメソッドを使います。

例えば、銀行マーケティングのデータセットには month という名前のカテゴリー変数があり、値として jan, feb, ... という月の名前を取っています。

これを月を表す数値に置き換えます。
#geshi(python){{
df_bank['month'] = df_bank['month'].map({'jan':1, 'feb':2, 'mar':3, 'apr':4, 'may':5, 'jun':6, 'jul':7, 'aug':8, 'sep':9, 'oct':10, 'nov':11, 'dec':12})
}}

*ダミー変数に変換 [#zacb704e]
カテゴリー変数の値ごと変数を作り、その値なら 1、そうでないなら 0 とする変数に変換します。
このようにして作成された変数を''ダミー変数''といいます。

例えば、銀行マーケティングのデータセットには、maritalという名前の説明変数があり、値として married, single, divorced という値を取っています。
|age|marital|h
|39|married|
|51|married|
|36|single|
|34|divorced|

maritalをダミー変数にすると次のようになります。
|age|marital_married|marital_single|marital_divorced|h
|39|1|0|0|
|51|1|0|0|
|36|0|1|0|
|34|0|0|1|

実際には、married でも single でもなければ divorced であることがわかるので、一つを取り除き、[math]k[/math] 種類の値を取るカテゴリー変数から [math]k - 1[/math] 個のダミー変数を作成します。
|age|marital_married|marital_single|h
|39|1|0|
|51|1|0|
|36|0|1|
|34|0|0|


ダミー変数は、Pandasの get_dummies 関数を用いて作成します。
#geshi(python){{
dummy = pd.get_dummies(df_bank[['marital']], drop_first=True)
}}
drop_first オプションは、ダミー変数の数を一つ減らすためのものです。
(get_dummiesの結果はデータフレームになります。)

get_dummiesメソッドには複数のカテゴリー変数を指定できるので、実際には、全てのカテゴリー変数をまとめて変換します。
#geshi(python){{
dummies = pd.get_dummies(df_bank[['marital', 'education', 'default', 'housing', 'loan', 'contact',  'duration', 'poutcome']], drop_first=True)
}}

ダミー変数を作成したら、データフレームにダミー変数をマージして、カテゴリー変数を取り除きます。
#geshi(python){{
df_bank = df_bank.merge(dummies, left_index=True, right_index=True)
df_bank.drop(['marital', 'education', 'default', 'housing', 'loan', 'contact',  'duration', 'poutcome'], axis=1)
}}


*欠損値の補完 [#d65c7b01]

あとで書きます。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS