数値の正規化
列ごとの大きさの違いを揃えます。 金額(数万)と件数(数十)のように単位の違う列を、同じ土俵で比べられるようにします。機械学習の前処理として使います。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
Spark エンジンでも動きます。
行の数は変わりません。 対象列 1 つにつき 1 列増えます。
設定項目
- 処理対象列を選択
- 揃える列。数値の列だけ選べます。複数選べます。
- 処理対象列を結果から除外する
- on にすると、変換前の列を消します。既定は off です。
- 正規化手法を選択必須
- 標準化 / MinMax / L1正則化 / L2正則化 / 偏差値を計算。既定はありません。選ばないと処理できません。
- 最小値を入力
- MinMax のときだけ出ます。既定は
0。 - 最大値を入力
- MinMax のときだけ出ます。既定は
1。 - グループごとに正規化する
- 列を選ぶと、その列の値が同じ行どうしをひとまとまりにして、まとまりごとに計算します。複数選べます。
手法の違い
| 手法 | 結果 | 向いている場面 |
|---|---|---|
| 標準化 | 列の平均 0・標準偏差 1 | 多くのモデルの既定の選択 |
| MinMax | 列の最小値が最小値を入力、最大値が最大値を入力(既定 0〜1) | 範囲を決めたい |
| L1正則化 | 列の絶対値の合計が 1 | 列の中での構成比として扱う |
| L2正則化 | 列の二乗和が 1 | 列の中での向きだけを見る |
| 偏差値を計算 | 列の平均 50・標準偏差 10 | 人に説明するとき |
5 つとも、計算は列ごとに独立して行われます。 行の中で合計が 1 になるわけではありません。
増える列の名前
元の列は書き換わりません。 手法ごとに決まった接頭語が付いた新しい列が、表のいちばん右に増えます。
| 手法 | できる列 |
|---|---|
| 標準化 | 標準化_<元の列名> |
| MinMax | MinMax正規化_<元の列名> |
| L1正則化 | L1正規化_<元の列名> |
| L2正則化 | L2正規化_<元の列名> |
| 偏差値を計算 | 偏差値_<元の列名> |
欠損値は欠損値のまま残ります。 欠損の行は計算からも外れるので、平均や最小・最大がずれることはありません。
グループごとに正規化するとき、キーの列が空欄の行も 1 つのグループになります。 空欄どうしでまとまって計算されます。
学習と予測で基準を揃える
訓練データと検証データを別々に正規化すると、基準がずれます。 分割する前に正規化するか、同じ基準で変換してください。
エラーと対処
処理対象列に数値以外がある
数値に見えても文字列型になっている列を選んだときに出ます。
処理対象列に数値型以外のデータが含まれてます。型変換をするか、数値型以外の列を除去してください。
直し方 — 列の型変更で数値にするか、その列を外します。
処理対象列を選んでいない
処理対象列を選択を空のまま実行したときに出ます。
対象の列が選択されていません。
直し方 — 処理対象列を選択で列を選んでください。
選んだ列が入力データにない
前のノードで列名を変えたり列を削ったりして、選んである列がなくなったときに出ます。
対象の列が存在しません。
直し方 — 列を選び直してください。
よく使う例
1. 標準化する
金額と件数のように単位の違う列を、同じモデルに入れたいとき。
入力
| 店舗 | 売上 | 来店数 |
|---|---|---|
| 渋谷 | 120000 | 40 |
| 新宿 | 80000 | 30 |
| 池袋 | 40000 | 20 |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 売上、来店数 |
| 正規化手法を選択 | 標準化 |
出力 — 標準化_売上 と 標準化_来店数 が増えます。
| 店舗 | 標準化_売上 | 標準化_来店数 |
|---|---|---|
| 渋谷 | 1.2247 | 1.2247 |
| 新宿 | 0 | 0 |
| 池袋 | −1.2247 | −1.2247 |
単位が 3000 倍違う 2 列が同じ数値に揃うので、モデルの係数の大きさをそのまま比べられます。
標準偏差は母集団の式(偏差の二乗和を n で割る)で計算します。 3 行のこの例では ±1.2247 までしか伸びません。
2. 0〜1 に収める
すべての列を 0 から 1 の範囲に押し込みたいとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| 正規化手法を選択 | MinMax |
| 最小値を入力 | 0 |
| 最大値を入力 | 1 |
出力 — MinMax正規化_売上 は渋谷が 1、池袋が 0、新宿が 0.5 になります。
3. 偏差値を出す
点数を、見慣れた尺度に直して人に見せたいとき。
入力
| 氏名 | 点数 |
|---|---|
| A | 80 |
| B | 60 |
| C | 40 |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 点数 |
| 正規化手法を選択 | 偏差値を計算 |
出力 — 偏差値_点数 が増えます。
| 氏名 | 点数 | 偏差値_点数 |
|---|---|---|
| A | 80 | 62.247 |
| B | 60 | 50 |
| C | 40 | 37.753 |
20 点差が 12.2 しか動きません。 標準偏差を母集団の式(偏差の二乗和を n で割る)で求めるため、この 3 行では 16.33 になり、「平均 +20 点なら偏差値 70」のような感覚とは合いません。行数が少ないデータで偏差値を出すときは、この差を見てから人に見せてください。
4. 店舗ごとの基準で揃える
店舗の規模が違うので、「全店の中での大きさ」ではなく「その店の中での位置」を見たいとき。
入力
| 店舗 | 日付 | 売上 |
|---|---|---|
| 渋谷 | 2024-04-01 | 120000 |
| 渋谷 | 2024-04-02 | 80000 |
| 池袋 | 2024-04-01 | 30000 |
| 池袋 | 2024-04-02 | 10000 |
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を選択 | 売上 |
| 正規化手法を選択 | 標準化 |
| グループごとに正規化する | 店舗 |
出力 — 標準化_売上 が増えます。渋谷の中の平均と池袋の中の平均がそれぞれ 0 になるので、規模の違う店を同じ尺度で並べられます。
5. 元の値と並べて確かめる
変換がうまくいったかを、元の値と見比べたいとき。
入力 — 例 1 と同じ
設定
| 設定項目 | 値 |
|---|---|
| 処理対象列を結果から除外する | off(既定) |
出力 — 元の 売上 来店数 はそのまま残り、右端に 標準化_売上 標準化_来店数 が増えます。同じ行で変換前と変換後を読み比べられます。