はじめに
california housingデータセットを例に用いて、基本統計量の算出、標準化・正規化の適用、ヒストグラム・箱ひげ図の描画を実装していきます。
実装
インポート
各ライブラリをインポートします。データセットはsklearn.datasets
から読み込みます。
import pandas as pd
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn import preprocessing
import matplotlib.pyplot as plt
データセットの読み込み
fetch_california_housing()
でインスタンスを生成。
-
.data
:データの中身(ndarray)。as_frame=True
を指定するとpandas DataFrameが返される。 -
.target
:住宅価格('MedHouseVal'
)(ndarray)。as_frame=True
を指定するとpandas Seriesが返される。 -
.feature_names
:データのラベル(リスト)。
housing = fetch_california_housing()
housing_as_df = fetch_california_housing(as_frame=True)
data_arr = housing.data
data_df = housing_as_df.data
target = housing.target
features = housing.feature_names
標準化、正規化
- StandardScaler:標準化(平均0, 分散1)
- RobustScaler:外れ値に頑健な標準化
- MinMaxScaler:正規化(最大1, 最小0)
StandardScaler
による標準化
sscaler = preprocessing.StandardScaler() # インスタンスの作成
sscaler.fit(data_arr)
ss_arr = sscaler.transform(data_arr) # 変換
ss_df = pd.DataFrame(ss_arr, columns=features) # pandas DataFrame
RobustScaler
による標準化
rscaler = preprocessing.RobustScaler(quantile_range=(25., 75.))
rscaler.fit(data_arr)
rs_arr = rscaler.transform(data_arr) # 変換
rs_df = pd.DataFrame(rs_arr, columns=features) # pandas DataFrame
MinMaxScaler
による正規化
mmscaler = preprocessing.MinMaxScaler() # インスタンスの作成
mmscaler.fit(data_arr)
mm_arr = mmscaler.transform(data_arr) # 変換
mm_df = pd.DataFrame(mm_arr, columns=features) # pandas DataFrame
基本統計量
変換前
data_df.describe()
StandardScaler
による標準化
ss_df.describe()
RobustScaler
による標準化
rs_df.describe()
MinMaxScaler
による正規化
mm_df.describe()
ヒストグラムの描画
変換前
fig = plt.figure(figsize=(10, 5))
plt.suptitle('raw')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.hist(
x=data_df[features[i]],
bins=10,
color='white',
edgecolor='black'
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
StandardScaler
による標準化
コードを見る
fig = plt.figure(figsize=(10, 5))
plt.suptitle('StandardScaler')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.hist(
x=ss_df[features[i]],
bins=10,
color='white',
edgecolor='black'
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
RobustScaler
による標準化
rs_df.describe()
コードを見る
fig = plt.figure(figsize=(10, 5))
plt.suptitle('RobustScaler')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.hist(
x=rs_df[features[i]],
bins=10,
color='white',
edgecolor='black'
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
MinMaxScaler
による正規化
コードを見る
fig = plt.figure(figsize=(10, 5))
plt.suptitle('MinMaxScaler')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.hist(
x=mm_df[features[i]],
bins=10,
color='white',
edgecolor='black'
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
箱ひげ図の描画
変換前
fig = plt.figure(figsize=(8, 5))
plt.suptitle('raw')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.boxplot(
x=data_arr[:,i],
labels=[features[i]],
widths=0.4
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
StandardScaler
による標準化
コードを見る
fig = plt.figure(figsize=(8, 5))
plt.suptitle('StandardScaler')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.boxplot(
x=ss_arr[:,i],
labels=[features[i]],
widths=0.4
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
RobustScaler
による標準化
rs_df.describe()
コードを見る
fig = plt.figure(figsize=(8, 5))
plt.suptitle('RobustScaler')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.boxplot(
x=rs_arr[:,i],
labels=[features[i]],
widths=0.4
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()
MinMaxScaler
による正規化
コードを見る
fig = plt.figure(figsize=(8, 5))
plt.suptitle('MinMaxScaler')
for i in range(len(features)):
ax = fig.add_subplot(2, 4, i+1)
ax.boxplot(
x=mm_arr[:,i],
labels=[features[i]],
widths=0.4
)
ax.set_title(features[i])
plt.tight_layout()
plt.show()