データの前処理・損失関数・正則化

正規化・標準化・バイアスとバリアンス・L1/L2正則化
🔰 初心者

機械学習ではデータをそのまま使っちゃダメなんですか?

🎓 上級者

特徴量のスケールが異なると、値の大きい特徴量にモデルが引っ張られてしまうんだ。だからスケールを揃える前処理が必要なんだよ。

📏 正規化(Normalization)
🔰 初心者

正規化ってどうやるんですか?

🎓 上級者

データを0〜1の範囲にスケーリングする手法だよ。計算式は (値 - 最小値) / (最大値 - 最小値) だ。

正規化(Normalization)

計算方法: (値 - 最小値) / (最大値 - 最小値)
例: 点数が30〜90点の場合 → 30点→0、90点→1、60点→0.5
必ず0〜1の範囲に収まる。ただし外れ値に弱い(極端な値があると他のデータが狭い範囲に押し込まれる)。
📐 標準化(Standardization)
🔰 初心者

標準化は正規化とどう違うんですか?

🎓 上級者

データを平均0・標準偏差1に変換する手法だよ。「平均からどれくらいの偏差分ずれているか」という統一的な物差しに変換するんだ。偏差値の考え方に近いね。

標準化(Standardization)

計算方法: (値 - 平均) / 標準偏差
例: 平均60点・標準偏差10のとき → 80点→+2.0、60点→0、45点→-1.5
範囲の制限がない(マイナスにもなる)。外れ値に比較的強い
⚖️ 正規化と標準化の比較

正規化

変換後の範囲:0〜1
計算:(値-最小)/(最大-最小)
外れ値に弱い
画像データ、距離ベースの手法向き

標準化

変換後の範囲:制限なし
計算:(値-平均)/標準偏差
外れ値に比較的強い
多くの機械学習アルゴリズム全般

正規化標準化
変換後の範囲0〜1制限なし(平均0、標準偏差1)
計算方法(値-最小)/(最大-最小)(値-平均)/標準偏差
外れ値への強さ弱い比較的強い
使いどころ画像データ、距離ベースの手法多くの機械学習アルゴリズム全般
正規化と標準化の変換イメージ 元データ 30 45 60 75 90 正規化 (0〜1) 0 0.25 0.5 0.75 1.0 (値-30)/(90-30) 標準化 (平均0,分散1) -1.41 -0.71 0 +0.71 +1.41 (値-60)/標準偏差 平均=0 正規化は範囲を揃える、標準化は分布を揃える ── 目的に応じて使い分ける
図1: 同じデータに正規化・標準化を適用した変換結果の比較
🔢 分散と標準偏差
用語意味求め方
分散ばらつきの大きさ(2乗の単位)各データと平均の差を2乗 → その平均
標準偏差ばらつきの大きさ(元の単位)分散の平方根(√分散)
求め方の手順

1. 平均を求める
2. 各データと平均の差を求める
3. 差を2乗する(マイナスを消すため)
4. 2乗の平均を求める → 分散
5. 分散の平方根を取る → 標準偏差

🔬 白色化(Whitening)
🔰 初心者

標準化だけでは不十分なケースもあるんですか?

🎓 上級者

標準化は各特徴量のスケールを揃えるだけで、特徴量同士の相関は残ったままなんだ。白色化は相関も除去して、学習をさらに効率化する手法だよ。

白色化(Whitening)

データを「平均0、分散1、特徴量間の相関なし」に変換する前処理。
標準化が各特徴量を個別にスケーリングするのに対し、白色化は特徴量間の相関(共分散)も除去する。変換後のデータの共分散行列が単位行列になる。

手順:① 平均を0にする → ② 主成分分析(PCA)等で相関を除去 → ③ 各成分の分散を1にする
標準化白色化
平均0にする0にする
分散1にする1にする
特徴量間の相関残る除去する
計算コスト低い高い(共分散行列の計算が必要)
使いどころ一般的な前処理特徴量間の相関が強い場合、画像データ
なぜ「白色化」と呼ぶのか?

信号処理で全ての周波数成分が均等に含まれるノイズを「ホワイトノイズ」と呼ぶ。白色化後のデータは全ての方向に均等に分散するため、この名前がついた。

🏷️ カテゴリカルデータの扱い
🔰 初心者

「赤」「青」のような文字データはどう扱うんですか?

🎓 上級者

機械学習のモデルは数値しか扱えないため、カテゴリカルデータ(種類・ラベルで表されるデータ)は数値に変換する必要があるんだ。

種類特徴
名義尺度(順序なし)カテゴリ間に順番がない血液型、性別、都道府県、色
順序尺度(順序あり)カテゴリ間に順番がある満足度(高/中/低)、ランク(S/A/B/C)

ラベルエンコーディング

カテゴリに数値を割り当て
例:赤→0、青→1、緑→2

One-Hotエンコーディング

カテゴリごとに0/1の列を作る
例:赤→[1,0,0]、青→[0,1,0]、緑→[0,0,1]

注意

ラベルエンコーディングだと「緑(2)>青(1)>赤(0)」という大小関係をモデルが学習してしまう可能性がある。順序がないカテゴリにはOne-Hotエンコーディングが安全。

🕳️ 欠損値の処理
🔰 初心者

データに抜けがあるときはどうするんですか?

🎓 上級者

欠損値の処理方法は大きく3つあるよ。削除するか、統計量で埋めるか、予測して埋めるかだね。

手法やり方メリットデメリット
リストワイズ法欠損がある行をまるごと削除シンプルで簡単データが大幅に減る可能性
統計量で補完平均・中央値・最頻値で埋めるデータ数が減らないばらつきが小さくなる
回帰補完他の特徴量から予測して埋める精度が高いモデルを作る手間がかかる
統計量使いどころ
平均値数値データで外れ値が少ないとき
中央値数値データで外れ値があるとき(平均が引っ張られないので安全)
最頻値カテゴリカルデータ(一番多い値で埋める)
🎯 バイアスとバリアンス
🔰 初心者

バイアスとバリアンスって何ですか?

🎓 上級者

モデルの予測がどのようにズレるかを表す2つの指標だよ。的当てで例えると、バイアスは的の中心からのズレ、バリアンスは弾の散らばり具合だね。

状態バイアスバリアンスイメージ
理想低い低い中心にまとまっている
未学習高い低い中心からズレた場所にまとまっている
過学習低い高い中心付近だがバラバラに散らばっている
バイアスとバリアンスの的当てイメージ 低バイアス・低バリアンス (理想)✓ 低バイアス・高バリアンス (過学習) 高バイアス・低バリアンス (未学習) 高バイアス・高バリアンス (最悪) 低バリアンス(まとまっている) 高バリアンス(散らばっている) 低バイアス(中心に近い) 高バイアス(中心から遠い) = 的の中心(正解) / = 予測
図2: バイアスとバリアンスの的当てイメージ ── 的の中心が正解、点が予測
バイアス・バリアンスのトレードオフ

モデルを単純にする → バイアス上昇、バリアンス低下
モデルを複雑にする → バイアス低下、バリアンス上昇
両方を同時に下げることは難しい(トレードオフの関係)

📈 過学習・未学習との関係

未学習(Underfitting)

原因:モデルが単純すぎる
学習データの精度:低い
テストデータの精度:低い
バイアス:高い / バリアンス:低い
対策:モデルを複雑にする、特徴量を増やす

過学習(Overfitting)

原因:モデルが複雑すぎる
学習データの精度:高い
テストデータの精度:低い
バイアス:低い / バリアンス:高い
対策:正則化、データを増やす、モデルを簡素化

📉 二重降下現象(Double Descent)
🔰 初心者

モデルを複雑にしすぎると過学習するんですよね?でもディープラーニングはパラメータが何億もあるのに、なぜうまくいくんですか?

🎓 上級者

いい質問だね。実は従来の「複雑にしすぎると過学習する」という常識に反する現象が発見されたんだ。それが二重降下現象(Double Descent)だよ。

二重降下現象(Double Descent)

モデルの複雑さを上げ続けると、テスト誤差が「下降→上昇→再び下降」とU字の先にもう一度下がる現象。
従来の理解(バイアス・バリアンスのトレードオフ)では、モデルの複雑さを上げるとテスト誤差はU字型(最初は下がり、過学習で上がる)になるとされていた。

しかし二重降下現象では、パラメータ数が学習データ数を超える「補間閾値」を越えたあたりでテスト誤差が一度ピークに達し、さらに複雑にすると再び下がり始める

これがディープラーニングのような超大規模モデルでも汎化性能が高い理由の一つと考えられている。
二重降下現象 — テスト誤差の変化 モデルの複雑さ(パラメータ数)→ テスト誤差 従来の理解(U字) 未学習領域 過学習領域 補間閾値 過剰パラメータ領域 誤差のピーク 再び下降! 二重降下
図: 二重降下現象 — 補間閾値を超えてモデルを複雑にすると、テスト誤差が再び下がる
なぜ再び下がるのか?

パラメータ数がデータ数を大幅に超えると、モデルは学習データを完全に記憶しつつも、より「滑らかな」解を見つけられるようになる。たくさんの解の候補の中から、汎化性能の高いシンプルな解に収束しやすくなるためと考えられている。

従来の常識 vs 二重降下

従来:パラメータ数 > データ数 → 必ず過学習する → モデルは適度な複雑さに抑えるべき
二重降下:パラメータ数 ≫ データ数 → 一周回って汎化性能が回復する → 超大規模モデルでも性能が出る理由

📊 損失関数(誤差関数)
🔰 初心者

損失関数って何ですか?

🎓 上級者

モデルの予測がどれくらい間違っているかを数値化する関数だよ。学習の目標はこの値を最小化することなんだ。

損失関数使うタスク計算方法
平均二乗誤差(MSE)回帰(予測 - 実際)² の平均
交差エントロピー分類正解の確率をどれだけ外したか
🛡️ 正則化(Regularization)
🔰 初心者

正則化って何をするんですか?

🎓 上級者

過学習を防ぐために、損失関数にペナルティ項を追加する手法だよ。重みを大きくしすぎないよう制約をかけることで、モデルが複雑になりすぎるのを防ぐんだ。

正則化の式のイメージ

最小化するもの = 損失関数 + ペナルティ項

ペナルティ項なし → 損失だけ下げようとして過学習しやすい
ペナルティ項あり → 重みを抑えつつ損失も下げるバランスを取る

💎 L1正則化とL2正則化

L1正則化(Lasso)

ペナルティ:重みの絶対値の合計
効果:不要な重みを0にする(特徴量選択)
イメージ:いらない変数を切り捨てる
使いどころ:特徴量が多く不要なものを除きたい時

L2正則化(Ridge)

ペナルティ:重みの2乗の合計
効果:重みを全体的に小さくする
イメージ:すべての変数を少しずつ抑える
使いどころ:全特徴量を活かしつつ過学習を防ぎたい時

L1正則化(Lasso)L2正則化(Ridge)
ペナルティ重みの絶対値の合計重みの2乗の合計
効果不要な重みを0にする(特徴量選択)重みを全体的に小さくする
イメージいらない変数を切り捨てるすべての変数を少しずつ抑える
使いどころ特徴量が多く不要なものを除きたい時全特徴量を活かしつつ過学習を防ぎたい時
L1正則化 vs L2正則化の制約領域と最適解 L1正則化(Lasso) w1 w2 最適解 角に当たる → 一部の重み(w2)が0 等高線 (損失関数) vs L2正則化(Ridge) w1 w2 最適解 辺に当たる → 全体の重みが縮小 等高線 (損失関数) 緑の領域 = 制約(ペナルティ)の範囲  青の楕円 = 損失関数の等高線 黄色の点 = 制約下での最適解(等高線が制約領域に接する点)
図3: L1は菱形(角で重みが0に)、L2は円(辺で重みが全体的に縮小)
🔗 エラスティックネット(Elastic Net)
🔰 初心者

L1とL2の両方を使うこともできるんですか?

🎓 上級者

L1(Lasso)とL2(Ridge)を組み合わせた正則化手法がエラスティックネットだよ。Lassoの弱点(相関の高い変数で不安定)とRidgeの弱点(不要な変数を0にできない)を補い、両方のいいとこ取りができるんだ。

L1(Lasso)L2(Ridge)エラスティックネット
特徴量選択(不要→0)するしないする
重みを全体的に小さくしないするする
⚠️ 正規化と正則化の違い(注意)
日本語で音が似ているが全く別のもの

混同に注意!

正規化(Normalization)

対象:データ
タイミング:学習の(前処理)
目的:スケールを揃える

正則化(Regularization)

対象:モデルの重み
タイミング:学習の最中
目的:過学習を防ぐ

🎯 G検定ポイント