機械学習ではデータをそのまま使っちゃダメなんですか?
特徴量のスケールが異なると、値の大きい特徴量にモデルが引っ張られてしまうんだ。だからスケールを揃える前処理が必要なんだよ。
正規化ってどうやるんですか?
データを0〜1の範囲にスケーリングする手法だよ。計算式は (値 - 最小値) / (最大値 - 最小値) だ。
標準化は正規化とどう違うんですか?
データを平均0・標準偏差1に変換する手法だよ。「平均からどれくらいの偏差分ずれているか」という統一的な物差しに変換するんだ。偏差値の考え方に近いね。
変換後の範囲:0〜1
計算:(値-最小)/(最大-最小)
外れ値に弱い
画像データ、距離ベースの手法向き
変換後の範囲:制限なし
計算:(値-平均)/標準偏差
外れ値に比較的強い
多くの機械学習アルゴリズム全般
| 正規化 | 標準化 | |
|---|---|---|
| 変換後の範囲 | 0〜1 | 制限なし(平均0、標準偏差1) |
| 計算方法 | (値-最小)/(最大-最小) | (値-平均)/標準偏差 |
| 外れ値への強さ | 弱い | 比較的強い |
| 使いどころ | 画像データ、距離ベースの手法 | 多くの機械学習アルゴリズム全般 |
| 用語 | 意味 | 求め方 |
|---|---|---|
| 分散 | ばらつきの大きさ(2乗の単位) | 各データと平均の差を2乗 → その平均 |
| 標準偏差 | ばらつきの大きさ(元の単位) | 分散の平方根(√分散) |
1. 平均を求める
2. 各データと平均の差を求める
3. 差を2乗する(マイナスを消すため)
4. 2乗の平均を求める → 分散
5. 分散の平方根を取る → 標準偏差
標準化だけでは不十分なケースもあるんですか?
標準化は各特徴量のスケールを揃えるだけで、特徴量同士の相関は残ったままなんだ。白色化は相関も除去して、学習をさらに効率化する手法だよ。
| 標準化 | 白色化 | |
|---|---|---|
| 平均 | 0にする | 0にする |
| 分散 | 1にする | 1にする |
| 特徴量間の相関 | 残る | 除去する |
| 計算コスト | 低い | 高い(共分散行列の計算が必要) |
| 使いどころ | 一般的な前処理 | 特徴量間の相関が強い場合、画像データ |
信号処理で全ての周波数成分が均等に含まれるノイズを「ホワイトノイズ」と呼ぶ。白色化後のデータは全ての方向に均等に分散するため、この名前がついた。
「赤」「青」のような文字データはどう扱うんですか?
機械学習のモデルは数値しか扱えないため、カテゴリカルデータ(種類・ラベルで表されるデータ)は数値に変換する必要があるんだ。
| 種類 | 特徴 | 例 |
|---|---|---|
| 名義尺度(順序なし) | カテゴリ間に順番がない | 血液型、性別、都道府県、色 |
| 順序尺度(順序あり) | カテゴリ間に順番がある | 満足度(高/中/低)、ランク(S/A/B/C) |
カテゴリに数値を割り当て
例:赤→0、青→1、緑→2
カテゴリごとに0/1の列を作る
例:赤→[1,0,0]、青→[0,1,0]、緑→[0,0,1]
ラベルエンコーディングだと「緑(2)>青(1)>赤(0)」という大小関係をモデルが学習してしまう可能性がある。順序がないカテゴリにはOne-Hotエンコーディングが安全。
データに抜けがあるときはどうするんですか?
欠損値の処理方法は大きく3つあるよ。削除するか、統計量で埋めるか、予測して埋めるかだね。
| 手法 | やり方 | メリット | デメリット |
|---|---|---|---|
| リストワイズ法 | 欠損がある行をまるごと削除 | シンプルで簡単 | データが大幅に減る可能性 |
| 統計量で補完 | 平均・中央値・最頻値で埋める | データ数が減らない | ばらつきが小さくなる |
| 回帰補完 | 他の特徴量から予測して埋める | 精度が高い | モデルを作る手間がかかる |
| 統計量 | 使いどころ |
|---|---|
| 平均値 | 数値データで外れ値が少ないとき |
| 中央値 | 数値データで外れ値があるとき(平均が引っ張られないので安全) |
| 最頻値 | カテゴリカルデータ(一番多い値で埋める) |
バイアスとバリアンスって何ですか?
モデルの予測がどのようにズレるかを表す2つの指標だよ。的当てで例えると、バイアスは的の中心からのズレ、バリアンスは弾の散らばり具合だね。
| 状態 | バイアス | バリアンス | イメージ |
|---|---|---|---|
| 理想 | 低い | 低い | 中心にまとまっている |
| 未学習 | 高い | 低い | 中心からズレた場所にまとまっている |
| 過学習 | 低い | 高い | 中心付近だがバラバラに散らばっている |
モデルを単純にする → バイアス上昇、バリアンス低下
モデルを複雑にする → バイアス低下、バリアンス上昇
両方を同時に下げることは難しい(トレードオフの関係)
原因:モデルが単純すぎる
学習データの精度:低い
テストデータの精度:低い
バイアス:高い / バリアンス:低い
対策:モデルを複雑にする、特徴量を増やす
原因:モデルが複雑すぎる
学習データの精度:高い
テストデータの精度:低い
バイアス:低い / バリアンス:高い
対策:正則化、データを増やす、モデルを簡素化
モデルを複雑にしすぎると過学習するんですよね?でもディープラーニングはパラメータが何億もあるのに、なぜうまくいくんですか?
いい質問だね。実は従来の「複雑にしすぎると過学習する」という常識に反する現象が発見されたんだ。それが二重降下現象(Double Descent)だよ。
パラメータ数がデータ数を大幅に超えると、モデルは学習データを完全に記憶しつつも、より「滑らかな」解を見つけられるようになる。たくさんの解の候補の中から、汎化性能の高いシンプルな解に収束しやすくなるためと考えられている。
従来:パラメータ数 > データ数 → 必ず過学習する → モデルは適度な複雑さに抑えるべき
二重降下:パラメータ数 ≫ データ数 → 一周回って汎化性能が回復する → 超大規模モデルでも性能が出る理由
損失関数って何ですか?
モデルの予測がどれくらい間違っているかを数値化する関数だよ。学習の目標はこの値を最小化することなんだ。
| 損失関数 | 使うタスク | 計算方法 |
|---|---|---|
| 平均二乗誤差(MSE) | 回帰 | (予測 - 実際)² の平均 |
| 交差エントロピー | 分類 | 正解の確率をどれだけ外したか |
正則化って何をするんですか?
過学習を防ぐために、損失関数にペナルティ項を追加する手法だよ。重みを大きくしすぎないよう制約をかけることで、モデルが複雑になりすぎるのを防ぐんだ。
最小化するもの = 損失関数 + ペナルティ項
ペナルティ項なし → 損失だけ下げようとして過学習しやすい
ペナルティ項あり → 重みを抑えつつ損失も下げるバランスを取る
ペナルティ:重みの絶対値の合計
効果:不要な重みを0にする(特徴量選択)
イメージ:いらない変数を切り捨てる
使いどころ:特徴量が多く不要なものを除きたい時
ペナルティ:重みの2乗の合計
効果:重みを全体的に小さくする
イメージ:すべての変数を少しずつ抑える
使いどころ:全特徴量を活かしつつ過学習を防ぎたい時
| L1正則化(Lasso) | L2正則化(Ridge) | |
|---|---|---|
| ペナルティ | 重みの絶対値の合計 | 重みの2乗の合計 |
| 効果 | 不要な重みを0にする(特徴量選択) | 重みを全体的に小さくする |
| イメージ | いらない変数を切り捨てる | すべての変数を少しずつ抑える |
| 使いどころ | 特徴量が多く不要なものを除きたい時 | 全特徴量を活かしつつ過学習を防ぎたい時 |
L1とL2の両方を使うこともできるんですか?
L1(Lasso)とL2(Ridge)を組み合わせた正則化手法がエラスティックネットだよ。Lassoの弱点(相関の高い変数で不安定)とRidgeの弱点(不要な変数を0にできない)を補い、両方のいいとこ取りができるんだ。
| L1(Lasso) | L2(Ridge) | エラスティックネット | |
|---|---|---|---|
| 特徴量選択(不要→0) | する | しない | する |
| 重みを全体的に小さく | しない | する | する |
混同に注意!
対象:データ
タイミング:学習の前(前処理)
目的:スケールを揃える
対象:モデルの重み
タイミング:学習の最中
目的:過学習を防ぐ