ひとことで言うと
ノルムはベクトルの大きさ、相関係数は二つの変数が同じ向きにどれだけ線形に動くかを表します。前者は距離や類似度の土台、後者は変数間の関係を読む尺度です。
ノルムは「荷物を運ぶ距離の測り方」です。縦横に分けて運ぶか、直線で運ぶかで数値が変わります。相関は二つの温度計の針が一緒に動く度合いで、単位や原点が違っても動きの向きは比較できます。
なぜ必要か
特徴量から距離を計算するモデルでは、値の単位が揃っていないと大きい軸が距離を支配します。たとえば年齢と年収をそのままユークリッド距離に入れると、年収の差がほぼ全体を決めます。これはモデルが重要度を学習した結果ではなく、入力の尺度をそのまま足し合わせた結果です。
そこで、値を一定範囲へ収める正規化や、平均と標準偏差を基準にする標準化を検討します。ただし、ベクトルの長さを1に揃える正規化もあり、用語だけで判断すると混乱します。何を揃えたのかを、範囲・分布・ベクトルの長さで区別してください。
| そのまま距離を測ると | 起きること |
|---|---|
| 単位・桁が大きい特徴 | 距離への寄与が大きくなる |
| 軸ごとの尺度が近い特徴 | 各軸の差が比較されやすい |
仕組み
ベクトルを とします。 は成分数、 は第 成分です。代表的なノルムは次の通りです。
L1は成分の絶対値を合計し、L2は直線距離、無限大ノルムは最大の絶対値だけを見ます。したがって同じベクトルでも値は一致しません。NumPyでは ord=1、ord=2、ord=np.inf で次数を指定できます。ord が1未満の場合は数学的なノルムの性質を満たさない点にも注意が要ります。
相関係数は共分散を各変数の標準偏差で割った量です。変数を 、共分散を 、標準偏差を とすると、
は相関係数です。 は完全な正の線形関係、 は完全な負の線形関係、 は線形な連動がないことを示しますが、非線形な関係まで否定しません。つまり無相関だから独立とは限らず、相関があっても因果関係を意味しません。np.corrcoef は行を変数、列を観測値として扱うのが既定です。
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| ノルムの式の対応 | L1は絶対値和、L2は二乗和平方根、無限大は最大絶対値 | L2を絶対値和とする |
| 距離計算の前処理 | 単位や尺度を確認し、必要なら特徴量を揃える | 大きい数値の軸を重要な特徴と解釈する |
| 相関係数の解釈 | 値は-1から1で、線形関係の強さと向きを表す | 0なら独立、相関があれば因果とする |
corrcoef の入力 | 変数と観測の向き、rowvar を確認する | 行列の行列積を相関係数と呼ぶ |
実装で確かめる
三つのノルムと相関を同じデータで確認します。x と y は観測値の列で、相関は列同士に対して計算します。
import numpy as np
x = np.array([3.0, -4.0])
y = np.array([1.0, 2.0, 3.0, 4.0])
z = np.array([10.0, 20.0, 30.0, 40.0])
print(np.linalg.norm(x, ord=1))
print(np.linalg.norm(x, ord=2))
print(np.linalg.norm(x, ord=np.inf))
print(np.corrcoef(y, z)[0, 1])
出力は順に 7.0、5.0、4.0、1.0 です。最後の1.0は、z が y の正の線形変換だからです。値の大きさを比べる処理と、変数の動きを比べる処理では、見る量が違います。
取り違えやすいもの
| 用語 | 揃えるもの・測るもの | 判断の軸 |
|---|---|---|
| L1ノルム | 絶対値の合計 | 全成分の寄与を足す |
| L2ノルム | 二乗和の平方根 | 幾何学的な直線距離 |
| 無限大ノルム | 最大絶対値 | 最悪の一成分 |
| 正規化 | 範囲やベクトル長など、定めた基準 | 何を基準に揃えたか |
| 標準化 | 平均と標準偏差 | 分布の中心とばらつき |
| 相関係数 | 二変数の線形な連動 | 独立性や因果性とは別 |
想起チェック
L1、L2、無限大ノルムは、それぞれ何を見るか
絶対値の合計、二乗和の平方根、最大絶対値です。
相関係数が0なら、二つの変数は独立か
限りません。相関係数が直接測るのは線形関係なので、非線形な依存が残ることがあります。
距離計算の前に特徴量の尺度を確認する理由は何か
尺度の大きい軸が、ノルムや距離の値を支配するためです。単位や分布を確認してから前処理を選びます。