こんにちは、アルファアーキテクトでVPoEをやっております胡 恩召(Ethan Hu)です。
先日書いた記事「機械学習の基礎 ①:モデル評価指標」の続き、機械学習の前段階の「特徴量エンジニアリング」をご紹介いたします。
特徴抽出
機械学習のモデルは、直接生データから学習出来ず、生データからいろいろな前処理をして、モデルが学習出来、フォーマットを変換した後データは、特徴データです。
仮で下記のデータがあります。これからデータの処理方法をご紹介します。
ID | 性別 | 出身地 | 年齢 | 身長(cm) | 体重(kg) |
---|---|---|---|---|---|
1 | 男性 | 東京都 | 25 | 165 | 55 |
2 | 女性 | 神奈川県 | 29 | 173 | 60 |
3 | 女性 | 千葉県 | 31 | 158 | 49 |
4 | 男性 | 大阪府 | 48 | 181 | 73 |
5 | 不明 | 埼玉県 | 18 | 177 | 67 |
... | ... | ... | ... | ... | ... |
数値データ処理
上記のデータの中で、数値特徴は、年齢と身長と体重です。
区切り
年齢の処理は、5歳刻みまた10歳刻みで区切り出来ます。
10歳刻み場合、処理後「年齢」データが下記です。
ID | 年齢(元) | 年齢(~20) | 年齢(21~30) | 年齢(31~40) | 年齢(41~50) | 年齢(51~60) | 年齢(60~) |
---|---|---|---|---|---|---|---|
1 | 25 | 0 | 1 | 0 | 0 | 0 | 0 |
2 | 29 | 0 | 1 | 0 | 0 | 0 | 0 |
3 | 31 | 0 | 0 | 1 | 0 | 0 | 0 |
4 | 48 | 0 | 0 | 0 | 1 | 0 | 0 |
5 | 18 | 1 | 0 | 0 | 0 | 0 | 0 |
... | ... | ... | ... | ... | ... | ... | ... |
変換
身長と体重の処理は、変換して出来ます。変更方法は、主に下記の3種類があります。
- Mean Normalization
x^{new} = \frac{x - mean(x)}{max(x) - min(x)}
- Min-Max Normalization
x^{new} = \frac{x - min(x)}{max(x) - min(x)}
- Standardization / Z-Score Normalization
標準化処理
x^{new} = \frac{x - mean(x)}{σ(x)}
標準差計算式:
σ(x) = \frac{1}{N} \cdot \sum_{i=1}^{N}(x_i - mean(x))^2
カテゴリーデータ処理
Label encoding
カテゴリーのテキスト値を数字に変換する。出身地の処理は、使えます。
出身地(都道府県名) | Label 数字 |
---|---|
北海道 | 1 |
... | ... |
埼玉県 | 11 |
千葉県 | 12 |
東京都 | 13 |
... | ... |
沖縄県 | 47 |
Label化した
ID | 出身地(元) | 出身地(数字) |
---|---|---|
1 | 東京都 | 13 |
2 | 神奈川県 | 14 |
3 | 千葉県 | 12 |
4 | 大阪府 | 27 |
5 | 埼玉県 | 11 |
... | ... | ... |
One-hot encoding
性別と出身地の処理は、One-hot encodingで出来ます。
ID | 性別(元) | 性別(男性) | 性別(女性) | 性別(不明) |
---|---|---|---|---|
1 | 男性 | 1 | 0 | 0 |
2 | 女性 | 0 | 1 | 0 |
3 | 女性 | 0 | 1 | 0 |
4 | 男性 | 1 | 0 | 0 |
5 | 不明 | 0 | 0 | 1 |
... | ... | ... | ... | ... |
Hash encoding
Hash化処理は、One-hot encodingと似ています。One-hot encodingとの違いは、One-hot encodingは、種類が多すぎな特徴(ドメイン、国など)の場合、処理後の列数(特徴数)も多すぎてしまい、超スパースデータセットになります。Hash化処理をすれば、処理後の列数(特徴数)が減ります。
特徴選択
特徴量エンジニアリング(Feature Engineering)は、機械学習のモデルにおいて重要な工程です。良い特徴量を見つけられれば、同じモデルでも効果が違います。これからよく使う特徴選択手法をご紹介します。
Pearson相関係数
Pearson相関係数は、変数 $X$ と $Y$ の線形相関関係を計算出来ます。
Pearson相関係数の計算式:
ρ_{X,Y} = \frac{con(X,Y)}{σ_X \cdot σ_Y} = \frac{E[(X - μ_X)(Y - μ_Y)]}{σ_X \cdot σ_Y}
サンプルのPearson相関係数の計算式:
r = \frac{\sum_{i=1}^{n}(X_i - \overline{\text{X}})(Y_i - \overline{\text{Y}})}{\sqrt(\sum_{i=1}^{n}(X_i - \overline{\text{X}})^2) \cdot \sqrt(\sum_{i=1}^{n}(Y_i - \overline{\text{Y}})^2)}
Pearsonカイ二乗検定
カイ二乗統計量が大きいほど変数間の相関関係が高いです。
カイ二乗統計量の計算式:
χ^2 = \sum_{i=1}^{r}\sum_{j=1}^{c} \frac{(Q_{i,j} - E_{i,j})^2}{E_{i,j}^2} = N \cdot \sum_{i,j}p_ip_j(\frac{(Q_{i,j}/N) - p_ip_j}{p_ip_j})^2
$N$:合計サンプル数
$Q_i$:類別$i$のサンプル数
Fisherスコア
分類のタスクで、良い特徴は、同じ類別の値の差が少なくて、異なる類別の値の差が大きいです。その評価手法は、Fisherスコアで出来ます。Fisherスコアが大きいほど変数間の相関関係が高いです。
Fisherスコアの計算式:
S_i = \frac{\sum_{j=1}^{K} n_j(μ_{ij} - μ_i)^2}{\sum_{j=1}^{K} n_jρ_{ij}^2}
$μ_i$:特徴$i$の平均値
$n_j$:類別$j$のサンプル数
$μ_{ij}$:類別$j$の中で、特徴$i$の平均値
$ρ_{ij}$:類別$j$の中で、特徴$i$の分散(variance)
Kullback–Leibler情報量
Kullback–Leibler情報量は、確率論と情報理論における2つの確率分布の差異を計る尺度である。Kullback–Leibler情報量が大きいほど変数間の相関関係が高いです。
Kullback–Leibler情報量の計算式:
I(X, Y) = \sum_{y \in Y}^{}\sum_{x \in X}^{} p(x,y) \cdot log(\frac{p(x,y)}{p(x)\cdotp(y)}) = D_{KL}(p(x,y)||p(x)\cdotp(y))
まとめ
特徴量エンジニアリング作業は、とても重要な作業です。質が高い学習データを作れば、より良いモデルを構築出来ます。
アルファアーキテクトは現在IPOを目指しています。『VeleT』の発展を加速させるため、 現在インフラエンジニア、バックエンドエンジニア、テックリードなどを積極的に募集しています。動画広告サービス『VeleT』の開発を一緒に推進してくれる方、是非応募をお待ちしています!