10.5-10.9 損失関数の選択とブースティング木
AdaBoostが使う「指数損失」はなぜ選ばれたのか?ノイズの多い実データには本当に向いているのか? そして、決定木をブースティングすると何が起きるのか? 損失関数の深層から「ブースティング木」の仕組みまでを一気に解き明かします。
なぜ指数損失なのか?
AdaBoostは「指数損失」を使うアルゴリズムとして定式化できることを前のページで学びました。でも、なぜ指数損失なのでしょうか?ほかの損失関数じゃダメなのですか?

答えは「計算の美しさのため」と「統計的な保証があるため」の両方にあります。
指数損失の理論上の最適解(無限のデータがあったとき収束する解)を求めると、こんな式が現れます:
これは「対数オッズの半分」です。つまり、AdaBoostが最終的に推定しようとしているのは、クラス確率の対数オッズだったのです。
クラス確率への変換は:
この式はロジスティック回帰(Chapter 4で学んだ分類手法)の確率と同じ形です。実は指数損失とロジスティック損失(二項逸脱度)は、理論上の最適解が一致します。異なる損失関数でありながら、同じゴールを違うルートで目指しているのです。
指数損失の真の魅力は計算効率にあります。AdaBoostのシンプルな重み更新ルール($w_i \leftarrow w_i \cdot e^{-y_i f(x_i)}$)は、指数損失を前向き段階的加法でフィットしたときの自然な帰結なのです。
上のアニメーションをよく見てください。指数損失(青い曲線)は、マージンが0を下回ると急激に上昇します。 ロジスティック損失(黄色い曲線)と比べると、負のマージン領域(誤分類された点)での損失の「爆発」が際立ちます。 この性質が、次のセクションで問題となってきます。
損失関数の頑健性 — ノイズに強いアルゴリズムはどれか
「指数損失とロジスティック損失は理論上同じゴールを持つ」と言いました。では実際のデータではどう違うのでしょうか?
ここで重要な概念が「マージン(margin)」です。分類問題において、$yf(x)$ という積がマージンです。
- マージン > 0 → 正しく分類されている
- マージン < 0 → 誤分類されている
- マージンが大きい → 自信を持って正しく分類されている

問題は、各損失関数がこのマージンに対してどう反応するかです。
指数損失 $e^{-yf}$ は、マージンが大きく負(強く誤分類)になると損失が指数関数的に爆発します。これが意味するのは、AdaBoostは「強く間違えたサンプル」に対して途方もなく大きな重みを与えるということです。
では、そのサンプルがノイズや誤ラベルだったら?AdaBoostは誤ラベルデータを「どうしても正解させなければならない難問」として扱い、モデル全体をそこに引きずられます。これがAdaBoostの弱点です。
アニメーションをご覧ください。左側(指数損失)では、外れ値が誤分類されると点がどんどん巨大化していきます。右側(二項逸脱度)では、同じ外れ値でも反応がずっと穏やかです。
一方、二項逸脱度(ロジスティック損失)は、マージンが大きく負になっても損失の増加が線形にとどまります。誤分類されたサンプルは確かに重視されますが、過剰な影響力は持ちません。
回帰問題でも同様のことが起きます:
- 二乗誤差損失 $(y-f)^2$ は外れ値に弱い(外れ値の影響が二乗される)
- 絶対値誤差損失 $|y-f|$ は外れ値に強い
- Huber損失はその中間で、外れ値には線形、通常のデータには二乗誤差を使う
各損失関数の特性をまとめると:
実データのデータマイニングでは、指数損失は危険です。ノイズが多く、誤ラベルが存在する現実では、頑健な損失関数(ロジスティック損失や二項逸脱度)の使用が推奨されます。
データマイニングの即戦力 — 決定木の強みとブースティング
「理想的な損失関数を選んだとして、次はどんな基学習器を使えばいいのか?」
現実のデータマイニングでは、こんな状況が普通です:
- 量的変数、二値変数、カテゴリ変数が混在する
- 欠損値がある
- 外れ値が多い
- 変数のスケールがバラバラ
こんな「生のデータ」に、前処理なしで使える手法はあるか?
決定木(Decision Tree)は、これらすべての問題を自然に扱えます。理由は単純で、決定木の分岐ルールは「閾値の比較」だけなので:
- スケールに依存しない(標準化不要)
- 欠損値を代理分岐で扱える
- カテゴリ変数を直接使える
- 一変量変換に対して不変
しかし決定木には致命的な弱点があります:予測精度が低いのです。

これがブースティングの出番です。「弱い学習器をブーストする」という発想が、決定木のすべての利点を保ったまま、精度を劇的に改善します。
アニメーションを見ると、最初のシンプルな境界線(直線的な分割)が、繰り返しのたびにどんどん精密になっていく様子がわかります。誤分類された点が強調され、次の木がそこを重点的に学ぶ——これがブースティングの本質です。
スパムデータの実験(電子メールの迷惑メール判定、57変数)での比較です:
| 手法 | テスト誤り率 |
|---|---|
| 勾配ブースティング木 | 4.5% |
| 加法ロジスティック回帰 | 5.5% |
| CART決定木(単体) | 8.7% |
| MARS(多変量適応回帰スプライン) | 5.5% |
勾配ブースティング木は、同じ変数を使いながらも決定木単体の2倍近い精度を達成しています。そして、最も重要な変数(「!」「$」「hp」「remove」)を自動的に特定する能力も持っています。
ブースティング木の数学 — 木はどう積み重なるのか
「決定木をブーストする」とは、数学的には何をしているのでしょうか?
決定木を数式で表すと、こう書けます:
ここで $I(x \in R_j)$ は「$x$ が領域 $R_j$ に含まれていれば1、そうでなければ0を返す関数」です(指示関数と呼ばれます)。つまり、入力 $x$ が落ちた「箱」の中の定数 $\gamma_j$ を返すだけの式です。
- $R_j$:$j$番目の領域(木の葉)
- $\gamma_j$:その領域での予測値(定数)
- $\Theta = \{R_j, \gamma_j\}$:木全体のパラメータ
これは「特徴空間を $J$ 個の箱に分割し、各箱で一定の予測をする」という構造です。

アニメーションがまさにその様子を示しています。最初はグレー1色だった2次元特徴空間が、木を1本追加するたびに細かく色分けされていきます。各色は「その領域での予測値」を表しています。
ブースティング木は、この木をM本足し合わせたモデルです:
各ステップで最適な木を見つける手順は「前向き段階的加法モデル」です:
直感的に言えば「今あるモデルが犯している誤りを、新しい木で補正する」ということです。
損失関数ごとの違い:
- 二乗誤差損失の場合(回帰):新しい木は「現在の残差」(正解との差)にフィットするだけ。シンプルで直感的です。
- 指数損失の場合(分類):重み付き誤り率を最小化する木を探す。AdaBoostの重み更新がここから導かれます。
- 頑健な損失関数の場合:直接の解がないため、勾配ブースティングという近似手法を使います(次のページで詳しく解説)。
各領域の最適定数 $\gamma_{jm}$ は、その領域内のサンプルで損失を最小化することで求められます:
二乗誤差なら葉の平均値、指数損失なら加重対数オッズ、絶対値誤差なら葉の中央値になります。
重みの更新は、損失関数が指数損失の場合:
これにより、前のステップで誤分類されたサンプルほど大きな重みを持ち、次の木はその苦手なサンプルを重点的に学習します。
まとめ — 損失関数が決める「ブースティングの性格」
今回学んだことを整理しましょう。
ブースティング木の強さは「損失関数の選択」と「弱い学習器の積み重ね」から生まれます。

アニメーションが示しているのは、木の大きさ(葉の数 J)の違いです。左は少ない分割(浅い木)、右は多くの分割(深い木)。同じデータでも、Jの大きさによって境界がどれほど違ってくるかがよくわかります。
| 損失関数 | 向いている問題 | 頑健性 | 計算のしやすさ |
|---|---|---|---|
| 指数損失 | クリーンな分類データ | × ノイズに弱い | ○ シンプルな重み更新 |
| 二項逸脱度 | 現実の分類問題 | ○ | △ |
| 二乗誤差 | 回帰(外れ値少ない) | × 外れ値に弱い | ○ 残差フィット |
| Huber損失 | 回帰(外れ値あり) | ○ | △ |
実務的な教訓:
- ノイズが多いデータには、指数損失ではなく二項逸脱度を使う
- 決定木は単体では弱くても、ブーストすると強力になる
- 木の大きさ(葉の数 J)は重要なハイパーパラメータ: 小さい木(J=2)はより保守的で加法モデルに近く、大きい木(J=5〜10)は変数間の交互作用を捉えられる
次のページ(10.10〜)では、任意の損失関数に対して使える「勾配ブースティング」の汎用アルゴリズムを学びます。これが現代のXGBoostやLightGBMの理論的基盤となっています。