- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 機械学習/Pythonで前処理する へ行く。
目次 †
はじめに †
Pythonの機械学習ライブラリーscikit-learnを用いて機械学習を行うには、入力をNumPy行列にする必要があります。
scikit-learnを使うととても簡単に機械学習ができますが、実際にscikit-learnを使って機械学習をしようとすると、scikit-learnに入力するNumPy行列を作る前処理の方が大変です。
ここでは、前処理について説明します。
環境はこれまでと同じです。
例として、銀行マーケティングのデータセットを用います。
データの読み込み †
データは、Excelなどの表計算ソフトを使って用意し、CSVファイルとして書き出します。
このCSVファイルを、Pandasを使って読み込みます。
import pandas as pd df_bank = pd.read_csv('bank.csv')
ここでは、bank.csvがCSVファイルの名前です。
最初の列が事例IDの場合は、index_col オプションに列番号を指定します。(列番号は 0 から始まります。)
df_bank = pd.read_csv('bank.csv', index_col=0)
カテゴリー変数の変換 †
数値に置換 †
カテゴリー変数の値を数値に置き換えるには、mapメソッドやreplaceメソッドを使います。
例えば、銀行マーケティングのデータセットには month という名前のカテゴリー変数があり、値として jan, feb, ... という月の名前を取っています。
これを月を表す数値に置き換えます。
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})
ダミー変数に変換 †
カテゴリー変数の値ごと変数を作り、その値なら 1、そうでないなら 0 とする変数に変換します。 このようにして作成された変数をダミー変数といいます。
例えば、銀行マーケティングのデータセットには、maritalという名前の説明変数があり、値として married, single, divorced という値を取っています。
age | marital |
39 | married |
51 | married |
36 | single |
34 | divorced |
maritalをダミー変数にすると次のようになります。
age | marital_married | marital_single | marital_divorced |
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 |
39 | 1 | 0 |
51 | 1 | 0 |
36 | 0 | 1 |
34 | 0 | 0 |
ダミー変数は、Pandasの get_dummies 関数を用いて作成します。
dummy = pd.get_dummies(df_bank[['marital']], drop_first=True)
drop_first オプションは、ダミー変数の数を一つ減らすためのものです。 (get_dummiesの結果はデータフレームになります。)
get_dummiesメソッドには複数のカテゴリー変数を指定できるので、実際には、全てのカテゴリー変数をまとめて変換します。
df_bank = pd.get_dummies(df_bank, drop_first=True)
ダミー変数を作成したら、データフレームにダミー変数をマージして、カテゴリー変数を取り除きます。
import numpy as np import pandas as pd df_bank = pd.read_csv('bank.csv') df_bank = df.bank.replace('unknown', np.NaN)
欠損値の補完 †
あとで書きます。