多変量適応回帰スプラインの概要
一連の予測変数と応答変数の間の関係が線形である場合、多くの場合、特定の予測変数と応答変数の間の関係が次の形式を取ると仮定する線形回帰を使用できます。
Y = β 0 + β 1 X + ε
しかし実際には、変数間の関係は実際には非線形である可能性があり、線形回帰を使用しようとするとモデルの適合性が不十分になる可能性があります。
予測変数と応答変数の間の非線形関係を考慮する 1 つの方法は、次の形式をとる多項式回帰を使用することです。
Y = β 0 + β 1 X + β 2 X 2 + … + β h
この式において、 hは多項式の「次数」と呼ばれます。 hの値を増やすと、モデルはより柔軟になり、非線形データに適応できるようになります。
ただし、多項式回帰にはいくつかの欠点があります。
1.多項式回帰では、次数h が大きすぎると、データセットが簡単に過学習される可能性があります。実際には、 h が3 または 4 より大きくなることはほとんどありません。これを超えると、単にトレーニング セットのノイズに対応し、目に見えないデータに対して十分に一般化できないからです。
2.多項式回帰では、データセット全体にグローバル関数が適用されますが、必ずしも正確であるとは限りません。
多項式回帰の代替手段は、多変量適応回帰スプラインです。
基本的な考え方
多変量適応回帰スプラインは次のように機能します。
1. データセットをk個の部分に分割します。
まず、データセットをk個の異なる要素に分割します。データセットを分割する点はノードと呼ばれます。
各予測子の各点を潜在的なノードとして評価し、候補特徴を使用して線形回帰モデルを作成することにより、ノードを特定します。モデル内で最も多くのエラーを削減できる点はノードです。
最初のノードを特定したら、このプロセスを繰り返して追加のノードを見つけます。最初に適切と思われる数のノードを見つけることができます。
2. 回帰関数を各部分に当てはめて、ヒンジ関数を形成します。
ノードを選択し、データセット内の各要素に回帰モデルを適合させると、 h(xa)で示される、いわゆるヒンジ関数が得られます。ここで、 a は値のしきい値です。
たとえば、1 ノード モデルのヒンジ関数は次のようになります。
- x < 4.3 の場合、y = β 0 + β 1 (4.3 – x)
- x > 4.3 の場合、y = β 0 + β 1 (x – 4.3)
この場合、しきい値として4.3を選択すると、すべての可能なしきい値の中で最大のエラー削減が可能になると判断されました。次に、4.3 未満の値と 4.3 を超える値に異なる回帰モデルを当てはめます。
2 つのノードを持つヒンジ関数は次のようになります。
- x < 4.3 の場合、y = β 0 + β 1 (4.3 – x)
- x > 4.3 & x < 6.7 の場合、y = β 0 + β 1 (x – 4.3)
- x > 6.7 の場合、y = β 0 + β 1 (6.7 – x)
この場合、しきい値として4.3と6.7を選択すると、すべての可能なしきい値の中で最大のエラー削減が可能であると判断されました。次に、1 つの回帰モデルを 4.3 未満の値に当てはめ、別の回帰モデルを 4.3 ~ 6.7 の値に当てはめ、別の回帰モデルを 4.3 を超える値に当てはめます。
3. k 分割相互検証に基づいてk を選択します。
最後に、モデルごとに異なるノード数を使用していくつかの異なるモデルを適合させたら、k 分割相互検証を実行して、最小の検定平均二乗誤差 (MSE) を生成するモデルを特定できます。
MSE テストが最も低いモデルが、新しいデータに最もよく一般化するモデルとして選択されます。
長所と短所
多変量適応回帰スプラインには、次のような利点と欠点があります。
利点:
- 回帰問題と分類問題の両方に使用できます。
- これは大規模なデータセットでうまく機能します。
- 高速な計算を提供します。
- これには、予測変数を標準化する必要はありません。
短所:
- ランダム フォレストや勾配ブースティング マシンなどの非線形手法ほどパフォーマンスが良くない傾向があります。
R と Python で MARS モデルを当てはめる方法
次のチュートリアルでは、R と Python で多変量適応回帰スプライン (MARS) を近似する方法の段階的な例を示します。
R の多変量適応回帰スプライン
Python の多変量適応回帰スプライン