よく使われるアルゴリズムの基本的な考え方
線形回帰。 便利なツールではありますが、大きな限界があります。 その名が示すように、非線形のデータセットには簡単に対応できません。 線形回帰は、学習データセットの範囲内に収まる予測を行うためにのみ使用できます。
ここで重回帰の出番です。
重回帰の一般的な形式とは何ですか?
線形回帰の方程式の一般的な形式は次のとおりです。
y = B * x + A
yは従属変数、xは独立変数、AとBは方程式を決定する係数です。 線形回帰の式と重回帰の式の違いは、重回帰の式が、線形回帰の1つの入力だけでなく、複数の入力を処理できなければならないことです。
y = B_1 * x_1 + B_2 * x_2 + … + B_n * x_n + A
この式では、添え字が異なる独立変数を表しています。x_1は第1の独立変数の値、x_2は第2の独立変数の値、…といった具合です。 さらに独立変数を追加していくと、最後の独立変数x_nが方程式に追加されるまで続きます。 このモデルでは、任意の数、n個の独立変数を持つことができ、必要に応じて項が追加されることに注意してください。 Bの係数には同じ添え字が使われており、各独立変数に結びついた係数であることを示しています。
例として、あなたが都市の交通計画担当者で、都市の東側から西側に向かうドライバーの平均通勤時間を推定する必要があるとします。 平均的な所要時間はわかりませんが、いくつかの要素に左右されることはわかっています。 おそらく、走行距離、ルート上の信号の数、道路上の他の車の数などに依存するでしょう。
y = B_1 * Distance + B_2 * Stoplights + B_3 * Cars + A
yは平均通勤時間、Distanceは出発地と目的地の間の距離、Stoplightsはルート上のストップライトの数、Aは他の時間消費者を表す定数です(例:シートベルトの着用、車の発進、コーヒーショップへの立ち寄りなど)。
これで通勤時間予測モデルができたので、誤差を最小化するためにモデルをトレーニング データ セットに適合させる必要があります。
重回帰モデルを適合させるには
線形回帰の例で B を見つけるために二乗誤差の合計を最小化したのと同様に、重回帰ではすべての B 項を見つけるために二乗誤差の合計を最小化します。ここでの違いは、複数の項があり、モデルを作成するまで不特定多数の項があるため、A項とB項を求める単純な代数的解法がないことです。 つまり、確率的勾配降下法を使う必要があります。 確率的勾配降下法は、別の記事が必要なほど大きなトピックなので、ここでは詳細には触れません。 しかし、Joel Gros氏のData Science from Scratchには、この手法に関する良い説明があります。
最初のステップは、各ポイントの二乗誤差の合計です。
Error_Point = (Actual – Prediction)²
ここで、Error は人の通勤時間を予測する際のモデルのエラー、Actual は実際の値 (またはその人の実際の通勤時間)、Prediction はモデルによって予測された値 (またはその人の通勤時間がモデルによって予測された場合)です。 Actual – Predictionではポイントの誤差が得られ、それを2乗するとポイントの2乗誤差が得られます。 誤差の二乗が重要であることを覚えておいてください。なぜなら、一部の誤差は正であり、他の誤差は負であり、二乗されない場合、これらの誤差は互いに相殺され、モデルの合計誤差は実際よりもはるかに小さく見えるからです。 これは基本的に、モデルを使用して各データ ポイントの通勤時間を予測し、その値をデータ ポイントの実際の通勤時間から差し引いて誤差を求め、その誤差を二乗して、二乗された誤差をすべて合計することを意味します。
Error_Model = sum(Actual_i – Prediction_i)²
ここで i はデータ セット内のすべてのポイントを反復するインデックスです。
エラー関数が決定したら、モデルとエラー関数を確率的勾配降下法アルゴリズムにかけ、エラーを最小化する必要があります。 これは、方程式のB項を最小化することで行われます。
学習データにモデルをフィットさせたら、次のステップはモデルがうまくフィットしているかどうかを確認します。 線形回帰に使用したのと同じr²値を使用します。 r²値は、決定係数とも呼ばれ、モデルによって予測されるデータセットの変化の部分を示します。 これは0から1の範囲の値で、0はモデルが結果を予測する能力がないことを示し、1はモデルが結果を完全に予測することを示します。 作成したモデルのr²値は、この2つの値の間にあることを期待すべきです(そうでない場合は、どこかでミスを犯していることになります)。
モデルの決定係数は、以下の式で計算できます。
r² = 1 – (二乗誤差の総和) / (二乗の総和)
(二乗の総和) = Sum(y_i – mean(y))²
(二乗誤差の総和) = sum((Actual_i – Prediction_i)²)
新しい項がモデルに有意な価値を与えるかどうかに関わらず、項の追加は常にモデルを改善します。
ここで、重回帰モデルの適合性のテストが複雑になります。 重回帰に項を追加すると、本質的にフィット感が向上します。 データをフィットさせるためにモデルが使用する新しい項と、より良いフィット感を得るためにモデルが変化させることができる新しい係数を与えます。 新しい項がモデルに大きな価値を与えるかどうかに関わらず、項の追加は常にモデルを改善します。 実際のところ、新しい変数を追加することは、実際にモデルを悪化させる可能性があります。 変数をどんどん追加していくと、学習データに対してモデルがオーバーフィットしてしまう可能性が高くなります。
この事実は、重回帰モデルを開発する際に重要な意味を持ちます。 確かに、完全に一致するか、追加する変数がなくなるまで、式にどんどん項を追加することはできます。 しかし、そうすると、予測しているケースに実際には関係のない項がたくさん入った、非常に大きく、非常に複雑なモデルになってしまいます。 例えば、通勤時間の予測の例では、夜空に浮かぶ木星の見かけの大きさを表す項を追加することで、モデルを改善することができます。
どのパラメータが最も重要かを特定するにはどうすればよいのでしょうか
1つの方法は、各係数の標準誤差を計算することです。 標準誤差は、モデルが各係数に対してどれだけ確信を持っているかを示しており、値が大きいほど、モデルがそのパラメータに対して確信を持っていないことを示しています。 これは、基礎となる方程式を見なくても直感的に理解できます。ある項に関連する誤差が一般的に高い場合、その項はモデルをデータセットにマッチングさせる際にあまり強い影響を与えていないことを意味します。 幸いなことに、Pythonのパッケージがあるので、それを使って計算することができます。 この質問はStackOverflowで少なくとも一度は質問され、回答されています。
各係数の標準誤差を計算した後、その結果を使用して、どの係数が最も高く、どの係数が最も低いかを識別することができます。 高い値は、それらの用語がモデルに加える予測価値が低いことを示しているので、それらの用語は維持することが最も重要でないことがわかります。
もう1つの方法は、正則化と呼ばれる技術を使用することです。 正則化は、重回帰式の項数に基づいた新しい項を誤差計算に加えることで機能します。 式の項数が多いと正則化誤差が大きくなり、逆に項数が少ないと正則化誤差が小さくなります。 さらに、正則化方程式に項を追加する際のペナルティは、必要に応じて増加または減少させることができる。
誤差式に正則化項を追加することで、誤差を最小化することは、モデルの誤差を最小化するだけでなく、式の項数を最小化することでもあります。 これは本来、トレーニングデータへの適合性が悪いモデルにつながりますが、同時に方程式の項数が少ないモデルにもつながります。
Joel Gros氏は、著書「Data Science from Scratch」の中で、正則化にリッジ回帰を使用する良い例を紹介しています。
How can I make sense of this model?
作成したモデルは、たくさんの数字が入った単なる方程式ではありません。 先ほど導出した各係数は、他のすべての変数が等しいと仮定した場合に、独立変数が従属変数に与える影響を表しています。 例えば、通勤時間の例では、人の通勤経路にある信号機1つにつき、平均通勤時間がB_2分長くなるとします。 モデル開発プロセスで B_2 が 2.32 となった場合、通勤経路の各信号待ちで 2.32 分の時間がかかることになります。 用語が増えれば増えるほど、各用語の物理的な意味を把握することが難しくなります。 また、各項の存在を正当化することも難しくなります。
このモデルはどのように拡張できるか
このモデルは、パラメータが相互にどのように影響するかについては何も述べていないことに注意してください。 式を見ても、そんなことはあり得ません。 さまざまな係数はすべて、たった1つの物理的パラメータにつながっています。 もし、2つの項が関連していると考えられるなら、その2つの組み合わせに基づいて新しい項を作ることができます。 例えば、通勤時の信号機の数は、通勤距離の関数である可能性があります。
信号機 = C_1 * 距離 + D
ここで、C_1 と D は、通勤距離の回帰式における B と A と同様の回帰係数です。
もう1つの可能な修正点は、非線形入力の追加です。 重回帰モデル自体は線形でしかありませんが、これには限界があります。 しかし、モデルの中に非線形の項を作ることができます。 例えば、1つの信号機が後退すると、その前の信号機を通過することができなくなるとします。 これにより、ストップライトが通勤時間に与える影響は指数関数的なものになる可能性があります。 これを捕捉するために新しい用語を作成し、それに応じて通勤距離アルゴリズムを変更することができます。
Stoplights_Squared = Stoplights²
y = B_1 * Distance + B_2 * Stoplights + B_3 * Cars + B_4 * Stoplights_Squared + C
これらの 2 つの方程式を組み合わせることで、非線形の Stoplights_Squared 入力に対する線形回帰項を作成します。
Wrapping it up
重回帰は、複数の独立変数を持つシステムの予測を可能にする線形回帰モデルの拡張です。
これはまだ線形モデルであり、モデルに含まれる項は、お互いの関係を示したり、非線形の傾向を表したりすることができません。 このような欠点は、方程式に修正された項を追加することで克服できます。 新しいパラメータは、変数間の関係を追跡したり、変数に非線形トレンドを適用したりする別の方程式で駆動することができます。 このようにして、重回帰モデルの独立した線形トレンドは、2つの間の関係および/または非線形の影響を捕捉するように強制することができます。
単純な線形回帰に比べてモデル内のパラメータが多いため、方程式を作成する際にはより多くの注意が必要です。 より多くの項を追加することで、データへの適合性は本質的に向上しますが、新しい項は物理的な意味を持たない可能性があります。 これは、データには合っていても、実際には何の意味もないモデルになってしまうので危険です。
これらのモデルには、パラメータの数とそれに伴うマイナス面を制限するための多くのテクニックがあります。 各係数の標準誤差を計算する方法と正則化の方法があります。 標準誤差を計算することで、どの項がモデルにとって最も価値がないかを確認し、それに応じて不要な項を削除することができます。 正則化では、さらに一歩進んで、モデル内の項を増やすために誤差項を追加し、項が増えると実際に適合度を下げることができます。 この方法は、余分な用語の欠点を減らすために用語を削除する一方で、適合度を高めるために最も重要なものを十分に含めるというバランスを見つけるのに役立ちます。