機械学習/Pythonで前処理する
をテンプレートにして作成
開始行:
*目次 [#f71521a0]
#contents
*はじめに [#c718b344]
Pythonの機械学習ライブラリーscikit-learnを用いて機械学習...
scikit-learnを使うととても簡単に機械学習ができますが、実...
ここでは、前処理(カテゴリー変数の変換、欠損値の処理、標...
環境はこれまでと同じです。
例として、銀行マーケティングのデータセットを用います。
-[[Bank Marketing Data Set>https://archive.ics.uci.edu/ml...
*データの読み込み [#we2a356e]
データは、Excelなどの表計算ソフトを使って用意し、CSVファ...
このCSVファイルを、Pandasを使って読み込みます。
#geshi(python){{
import pandas as pd
df_bank = pd.read_csv('bank.csv')
}}
ここでは、bank.csvがCSVファイルの名前です。
最初の列が事例IDの場合は、index_col オプションに列番号を...
#geshi(python){{
df_bank = pd.read_csv('bank.csv', index_col=0)
}}
*カテゴリー変数の変換 [#l3d47ab3]
scikit-learnは、NumPy行列を入力とします。
このため、scikit-learnには数値しか入力できません。
一般的なカテゴリー変数は文字列で表されているため、これを...
ここでは、二つの方法を説明します。
-カテゴリー変数を数値に置換する
-カテゴリー変数をダミー変数に変換する
**数値に置換 [#yf14b6d4]
カテゴリー変数の値を数値に置き換えるには、map()メソッドや...
例えば、銀行マーケティングのデータセットには month という...
map()メソッドを用いて、月を表す名前を数値に置き換えます。
#geshi(python){{
df_bank['month'] = df_bank['month'].map({'jan':1, 'feb':2...
}}
**ダミー変数に変換 [#zacb704e]
カテゴリー変数の値ごと変数を作り、その値なら 1、そうでな...
このようにして作成された変数を''ダミー変数''といいます。
例えば、銀行マーケティングのデータセットには、maritalとい...
|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 であ...
|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=T...
}}
drop_first オプションは、ダミー変数の数を一つ減らすための...
(get_dummiesの結果はデータフレームになります。)
get_dummiesメソッドにデータフレームを渡すと、全てのカテゴ...
#geshi(python){{
df_bank = pd.get_dummies(df_bank, drop_first=True)
}}
*欠損値の処理 [#d65c7b01]
一般的なデータには欠損値(値がない項目)があります。
欠損値に対応していない機械学習手法を使うときには、欠損値...
ここでは、三つの方法を説明します。
-欠損値が多い説明変数の除去
-欠損値を含むデータの除去
-値の補完
欠損値を含むデータをPandasのread.csv()メソッドで読み込む...
今回、例に用いている銀行マーケティングのデータセットでは...
そこで、まず初めに、CSVファイルを読み込んだ直後に 'unknow...
#geshi(python){{
import numpy as np
import pandas as pd
df_bank = pd.read_csv('bank.csv')
df_bank = df.bank.replace('unknown', np.NaN)
}}
**欠損値が多い説明変数の除去 [#qe87fd79]
そもそも、欠損値が多く、重要でない説明変数を使わないよう...
説明変数を取り除くには、pandas.DataFrameのdrop()メソッド...
#geshi(python){{
df_bank = df_bank.drop('poutcome', axis=1)
}}
オプションの axis=1 は、列を削除します(行を削除するとき...
**欠損値を含むデータの除去 [#c8404d77]
データの数が十分に多く、かつ、欠損値を含むデータが少ない...
欠損値を含むデータを取り除くには、pandas.DataFrameのdropn...
#geshi(python){{
df_bank = df_bank.dropna(how='any')
}}
オプションの how='any' は、NumPy.NaN を一つでも含む行を削...
**値の補完 [#h2ccbc69]
データの数が少ないときや欠損値を含むデータが多いときは、...
そこで、このような場合には、欠損値に平均値、中央値、最頻...
今回の銀行マーケティングのデータセットでは、欠損値は全て...
#geshi(python){{
df_bank['poutcome'] = df_bank['poutcome'].map({'success':...
}}
欠損値に値を補完するには、sklearn.imputeのSimpleImputerを...
#geshi(python){{
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='...
df_bank['poutcome'] = imputer.fit_transform(df_bank['pout...
}}
SimpleImputerを作成するときの missing_valueオプションには...
strategyオプションには補完する値を指定し、平均値を補完す...
SimpleImputerによる補完は、fit()メソッドで補完する値を求...
上の例では、この手順を一度に行うfit_transform()メソッドを...
*スケーリング [#hbce840d]
説明変数の値域のスケールが大きく異なると、学習された予測...
そこで、説明変数の値が同じくらいになるように変換します。
これをスケーリングといいます。
**標準化 [#m2976eb1]
統計学の分野でよく用いられるスケーリングが、説明変数が平...
\[
z = \frac{x - \mu}{\sigma}
\]
ここで、[math]\mu[/math] は平均値、[math]\sigma[/math]は...
zスコアに標準化することによって、説明変数が正規分布にした...
標準化するには、sklearn.preprocessingのStandardScalerを使...
#geshi(python){{
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
df_bank['age'] = sc.fit_transform(df_bank['age'].values.r...
}}
StandardScalerによる標準化も、Imputerによる補完と同じよう...
この例でも、fitとtransformを一度に行うfit_transform()メソ...
ageは整数なので、実際に標準化すると int64 が float64 にな...
**min-maxスケーリング [#zbaae243]
zスコアによる標準化は、データが正規分布にしたがっているこ...
しかし、例えば誕生月は正規分布にはなりませんので、zスコア...
そこで、データを一様分布と仮定して、最小値が 0、最大値が ...
\[
x' = \frac{x - \min}{\max - \min}
\]
ここで、[math]\min[/math] は最小値、[math]\max[/math] は...
min-maxスケーリングを行うには、sklearn.preprocessingのMin...
#geshi(python){{
from sklearn.preprocessing import MinMaxScaler
sc = minmax_scale()
df_bank['age'] = sc.fit_transform(df_bank['age'].values.r...
}}
*前処理の注意点 [#e42095cb]
上の例では、fit_transform()メソッドを用いて、fitとtransfo...
まず、sklearn.model_selectionのtrain_test_split()メソッド...
#geshi(python){{
from sklearn.model_selection import train_test_split
(X_train, X_test, y_train, y_test) = train_test_split(X, y)
}}
テストデータ X_test に対して、fit_transform()メソッドを用...
たとえば、min-maxスケーリングによる標準化をする場合、訓練...
このような問題が生じないように、訓練データに対してfはit_t...
#geshi(python){{
from sklearn.preprocessing import MinMaxScaler
sc = minimax_scale()
X_train = sc.fit_transform(X_train)
X_test = sc.fit(X_test)
}}
訓練データに合わせて標準化されることに注意が必要です。
min-maxスケーリングの場合、テストデータに訓練データの最小...
終了行:
*目次 [#f71521a0]
#contents
*はじめに [#c718b344]
Pythonの機械学習ライブラリーscikit-learnを用いて機械学習...
scikit-learnを使うととても簡単に機械学習ができますが、実...
ここでは、前処理(カテゴリー変数の変換、欠損値の処理、標...
環境はこれまでと同じです。
例として、銀行マーケティングのデータセットを用います。
-[[Bank Marketing Data Set>https://archive.ics.uci.edu/ml...
*データの読み込み [#we2a356e]
データは、Excelなどの表計算ソフトを使って用意し、CSVファ...
このCSVファイルを、Pandasを使って読み込みます。
#geshi(python){{
import pandas as pd
df_bank = pd.read_csv('bank.csv')
}}
ここでは、bank.csvがCSVファイルの名前です。
最初の列が事例IDの場合は、index_col オプションに列番号を...
#geshi(python){{
df_bank = pd.read_csv('bank.csv', index_col=0)
}}
*カテゴリー変数の変換 [#l3d47ab3]
scikit-learnは、NumPy行列を入力とします。
このため、scikit-learnには数値しか入力できません。
一般的なカテゴリー変数は文字列で表されているため、これを...
ここでは、二つの方法を説明します。
-カテゴリー変数を数値に置換する
-カテゴリー変数をダミー変数に変換する
**数値に置換 [#yf14b6d4]
カテゴリー変数の値を数値に置き換えるには、map()メソッドや...
例えば、銀行マーケティングのデータセットには month という...
map()メソッドを用いて、月を表す名前を数値に置き換えます。
#geshi(python){{
df_bank['month'] = df_bank['month'].map({'jan':1, 'feb':2...
}}
**ダミー変数に変換 [#zacb704e]
カテゴリー変数の値ごと変数を作り、その値なら 1、そうでな...
このようにして作成された変数を''ダミー変数''といいます。
例えば、銀行マーケティングのデータセットには、maritalとい...
|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 であ...
|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=T...
}}
drop_first オプションは、ダミー変数の数を一つ減らすための...
(get_dummiesの結果はデータフレームになります。)
get_dummiesメソッドにデータフレームを渡すと、全てのカテゴ...
#geshi(python){{
df_bank = pd.get_dummies(df_bank, drop_first=True)
}}
*欠損値の処理 [#d65c7b01]
一般的なデータには欠損値(値がない項目)があります。
欠損値に対応していない機械学習手法を使うときには、欠損値...
ここでは、三つの方法を説明します。
-欠損値が多い説明変数の除去
-欠損値を含むデータの除去
-値の補完
欠損値を含むデータをPandasのread.csv()メソッドで読み込む...
今回、例に用いている銀行マーケティングのデータセットでは...
そこで、まず初めに、CSVファイルを読み込んだ直後に 'unknow...
#geshi(python){{
import numpy as np
import pandas as pd
df_bank = pd.read_csv('bank.csv')
df_bank = df.bank.replace('unknown', np.NaN)
}}
**欠損値が多い説明変数の除去 [#qe87fd79]
そもそも、欠損値が多く、重要でない説明変数を使わないよう...
説明変数を取り除くには、pandas.DataFrameのdrop()メソッド...
#geshi(python){{
df_bank = df_bank.drop('poutcome', axis=1)
}}
オプションの axis=1 は、列を削除します(行を削除するとき...
**欠損値を含むデータの除去 [#c8404d77]
データの数が十分に多く、かつ、欠損値を含むデータが少ない...
欠損値を含むデータを取り除くには、pandas.DataFrameのdropn...
#geshi(python){{
df_bank = df_bank.dropna(how='any')
}}
オプションの how='any' は、NumPy.NaN を一つでも含む行を削...
**値の補完 [#h2ccbc69]
データの数が少ないときや欠損値を含むデータが多いときは、...
そこで、このような場合には、欠損値に平均値、中央値、最頻...
今回の銀行マーケティングのデータセットでは、欠損値は全て...
#geshi(python){{
df_bank['poutcome'] = df_bank['poutcome'].map({'success':...
}}
欠損値に値を補完するには、sklearn.imputeのSimpleImputerを...
#geshi(python){{
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='...
df_bank['poutcome'] = imputer.fit_transform(df_bank['pout...
}}
SimpleImputerを作成するときの missing_valueオプションには...
strategyオプションには補完する値を指定し、平均値を補完す...
SimpleImputerによる補完は、fit()メソッドで補完する値を求...
上の例では、この手順を一度に行うfit_transform()メソッドを...
*スケーリング [#hbce840d]
説明変数の値域のスケールが大きく異なると、学習された予測...
そこで、説明変数の値が同じくらいになるように変換します。
これをスケーリングといいます。
**標準化 [#m2976eb1]
統計学の分野でよく用いられるスケーリングが、説明変数が平...
\[
z = \frac{x - \mu}{\sigma}
\]
ここで、[math]\mu[/math] は平均値、[math]\sigma[/math]は...
zスコアに標準化することによって、説明変数が正規分布にした...
標準化するには、sklearn.preprocessingのStandardScalerを使...
#geshi(python){{
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
df_bank['age'] = sc.fit_transform(df_bank['age'].values.r...
}}
StandardScalerによる標準化も、Imputerによる補完と同じよう...
この例でも、fitとtransformを一度に行うfit_transform()メソ...
ageは整数なので、実際に標準化すると int64 が float64 にな...
**min-maxスケーリング [#zbaae243]
zスコアによる標準化は、データが正規分布にしたがっているこ...
しかし、例えば誕生月は正規分布にはなりませんので、zスコア...
そこで、データを一様分布と仮定して、最小値が 0、最大値が ...
\[
x' = \frac{x - \min}{\max - \min}
\]
ここで、[math]\min[/math] は最小値、[math]\max[/math] は...
min-maxスケーリングを行うには、sklearn.preprocessingのMin...
#geshi(python){{
from sklearn.preprocessing import MinMaxScaler
sc = minmax_scale()
df_bank['age'] = sc.fit_transform(df_bank['age'].values.r...
}}
*前処理の注意点 [#e42095cb]
上の例では、fit_transform()メソッドを用いて、fitとtransfo...
まず、sklearn.model_selectionのtrain_test_split()メソッド...
#geshi(python){{
from sklearn.model_selection import train_test_split
(X_train, X_test, y_train, y_test) = train_test_split(X, y)
}}
テストデータ X_test に対して、fit_transform()メソッドを用...
たとえば、min-maxスケーリングによる標準化をする場合、訓練...
このような問題が生じないように、訓練データに対してfはit_t...
#geshi(python){{
from sklearn.preprocessing import MinMaxScaler
sc = minimax_scale()
X_train = sc.fit_transform(X_train)
X_test = sc.fit(X_test)
}}
訓練データに合わせて標準化されることに注意が必要です。
min-maxスケーリングの場合、テストデータに訓練データの最小...
ページ名: