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


目次

はじめに

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 という値を取っています。

agemarital
39married
51married
36single
34divorced

maritalをダミー変数にすると次のようになります。

agemarital_marriedmarital_singlemarital_divorced
39100
51100
36010
34001

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

agemarital_marriedmarital_single
3910
5110
3601
3400

ダミー変数は、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)

欠損値の補完

あとで書きます。

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