コンテンツにスキップ

数値の正規化

列ごとの大きさの違いを揃えます。 金額(数万)と件数(数十)のように単位の違う列を、同じ土俵で比べられるようにします。機械学習の前処理として使います。

入出力

ポート内容
入力データデータ
出力データデータ

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 になるわけではありません。

増える列の名前

元の列は書き換わりません。 手法ごとに決まった接頭語が付いた新しい列が、表のいちばん右に増えます。

手法できる列
標準化標準化_<元の列名>
MinMaxMinMax正規化_<元の列名>
L1正則化L1正規化_<元の列名>
L2正則化L2正規化_<元の列名>
偏差値を計算偏差値_<元の列名>

欠損値は欠損値のまま残ります。 欠損の行は計算からも外れるので、平均や最小・最大がずれることはありません。

グループごとに正規化するとき、キーの列が空欄の行も 1 つのグループになります。 空欄どうしでまとまって計算されます。

学習と予測で基準を揃える

訓練データと検証データを別々に正規化すると、基準がずれます。 分割する前に正規化するか、同じ基準で変換してください。

エラーと対処

処理対象列に数値以外がある

数値に見えても文字列型になっている列を選んだときに出ます。

処理対象列に数値型以外のデータが含まれてます。型変換をするか、数値型以外の列を除去してください。

直し方 — 列の型変更で数値にするか、その列を外します。

処理対象列を選んでいない

処理対象列を選択を空のまま実行したときに出ます。

対象の列が選択されていません。

直し方 — 処理対象列を選択で列を選んでください。

選んだ列が入力データにない

前のノードで列名を変えたり列を削ったりして、選んである列がなくなったときに出ます。

対象の列が存在しません。

直し方 — 列を選び直してください。

よく使う例

1. 標準化する

金額と件数のように単位の違う列を、同じモデルに入れたいとき。

入力

店舗売上来店数
渋谷12000040
新宿8000030
池袋4000020

設定

設定項目値
処理対象列を選択売上、来店数
正規化手法を選択標準化

出力 — 標準化_売上 と 標準化_来店数 が増えます。

店舗標準化_売上標準化_来店数
渋谷1.22471.2247
新宿00
池袋−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. 偏差値を出す

点数を、見慣れた尺度に直して人に見せたいとき。

入力

氏名点数
A80
B60
C40

設定

設定項目値
処理対象列を選択点数
正規化手法を選択偏差値を計算

出力 — 偏差値_点数 が増えます。

氏名点数偏差値_点数
A8062.247
B6050
C4037.753

20 点差が 12.2 しか動きません。 標準偏差を母集団の式(偏差の二乗和を n で割る)で求めるため、この 3 行では 16.33 になり、「平均 +20 点なら偏差値 70」のような感覚とは合いません。行数が少ないデータで偏差値を出すときは、この差を見てから人に見せてください。

4. 店舗ごとの基準で揃える

店舗の規模が違うので、「全店の中での大きさ」ではなく「その店の中での位置」を見たいとき。

入力

店舗日付売上
渋谷2024-04-01120000
渋谷2024-04-0280000
池袋2024-04-0130000
池袋2024-04-0210000

設定

設定項目値
処理対象列を選択売上
正規化手法を選択標準化
グループごとに正規化する店舗

出力 — 標準化_売上 が増えます。渋谷の中の平均と池袋の中の平均がそれぞれ 0 になるので、規模の違う店を同じ尺度で並べられます。

5. 元の値と並べて確かめる

変換がうまくいったかを、元の値と見比べたいとき。

入力 — 例 1 と同じ

設定

設定項目値
処理対象列を結果から除外するoff(既定)

出力 — 元の 売上 来店数 はそのまま残り、右端に 標準化_売上 標準化_来店数 が増えます。同じ行で変換前と変換後を読み比べられます。

関連