メモを確認したところ、SG フィルターを使用するときに最小二乗法について以前に言及されていたことがわかりました。参考までに、記事へのリンクを示します: [UWB] Savitzky Golay フィルター SG フィルターの原理の説明。
記事ディレクトリ
最小二乗法は、予測値と真の値の差(通常は残差の二乗和として表されます)を最小限に抑えるために使用される数学的最適化手法です。
最小二乗法の中心となる考え方は、予測値と真の値の差の二乗和を最小化することで、モデルの最適なパラメーター値を見つけることです。
最小二乗法は最適化手法であるため、単純に最小二乗法について議論するだけでは退屈です。したがって、回帰分析の線形回帰に最小二乗法を適用すると、回帰モデルの最適なパラメータを解決するのに役立ち、最小二乗法の考え方をより深く理解することができます。
回帰分析の本来の目的は、データへの最適な適合を達成するためにモデルのパラメーターを推定することです。多くの場合、特に線形回帰では、最小二乗法により、最適なパラメーターを見つけるための閉じた分析ソリューションが提供されます。したがって、変数の動作を予測または説明するために、直線や多項式を一連のデータ点に適合させるために最小二乗法がよく使用されます。
次に、最初に線形回帰について説明し、次に 2 つの単純な線形回帰モデルについて説明します。次に、最小二乗法の考え方を通じて最適なモデル パラメーターを解決するための具体例を示し、それによってモデル パラメーターを解決するための最小二乗法の使用について理解します。
1. 線形回帰
線形回帰について議論するときは、回帰分析と一緒に議論しましょう。
線形回帰と回帰分析はどちらも統計で一般的に使用される手法ですが、それらの間にはいくつかの重要な違いがあります。
定義により、
- 線形回帰: 線形回帰は、2 つ (またはそれ以上) の変数間の関係を最もよく表す 1 つの線形関数 (単純な線形回帰の場合) または複数の線形関数 (多重線形回帰の場合) を見つけようとする予測方法です。
- 回帰分析: 回帰分析は、1 つまたは複数の変数と 1 つ以上の他の変数の間の関係を記述する統計的手法を表すために使用される広義の用語です。線形回帰は回帰分析の 1 つの形式にすぎません。
種類的に言えば、
- 線形回帰: 主に線形関係に焦点を当てます。
- 回帰分析: 線形回帰、多項式回帰、ロジスティック回帰、リッジ回帰およびその他のタイプを含めることができます。
目的という点では、
- 線形回帰: 応答変数と 1 つ以上の予測変数の間の関係を予測または説明します。
- 回帰分析: 変数間の関係 (線形、非線形、またはその他の関係) を調査およびモデル化します。
応用面では、
- 線形回帰: 線形回帰は通常、変数間に線形関係があると考えられる場合に使用されます。
- 回帰分析: 線形関係を含むがそれに限定されないさまざまな関係に適用できます。
簡単に言えば、線形回帰は回帰分析のサブセットです。回帰分析には、変数間の関係をモデル化および説明するためのさまざまな方法が含まれますが、線形回帰では特に線形関係に焦点を当てます。
ランダムなサンプルを与えます ( y, x 1, x 2, ⋯ y, x_1, x_2, \cdotsよ、バツ1、バツ2、⋯ )、線形回帰モデルは、
応答変数 (従属変数またはターゲットと呼ばれることが多い)yyyと
説明変数 (独立変数または特徴と呼ばれることが多い)x 1 、 x 2 、⋯ x_1、x_2、 \cdotsバツ1、バツ2、⋯
間の関係は、説明変数の影響を受けるだけでなく、誤差項ϵ \epsilonϵ (これも確率変数)x 1 、 x 2 、⋯ x_1、x_2、\cdots をバツ1、バツ2、⋯を除くyyの任意のペア影響力がある。
ただし、この記事の分析では主に回帰モデルを学習したいため、誤差項ϵ \epsilonを単純化します。ϵの影響。
同時に、説明変数の数に応じて、線形回帰モデルも単純線形回帰と多重線形回帰に分けられます。
1. 単純な線形回帰モデル
応答変数yyを説明しますyと説明変数xxx間の関係
この関係は線形、つまり一次関数であると仮定します。
y = β 0 + β 1 x \begin{aligned} y &= \beta _0 + \beta_1 x \end{aligned}はい=b0+b1×
その中には、yyyは応答変数、xxxは説明変数β 0 \beta_0b0とβ 1 \beta_1b1は回帰係数です。
2. 重回帰モデル
応答変数yyを説明しますyと 2 つ以上の説明変数x 1 、 x 2 、⋯ x_1、x_2、 \cdotsバツ1、バツ2、⋯の関係
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β pxp \begin{aligned} y &= \beta _0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p \end{aligned}はい=b0+b1バツ1+b2バツ2+⋯+bpバツp
2. 線形回帰から最小二乗法へ。数値例を示し、回帰モデルを解くために最小二乗法を使用します。
最小二乗法の中心的な考え方は、予測誤差の二乗和を最小化するモデル パラメーターを見つけることです。
具体的には、単純な線形モデルを考えてみましょう。
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β pxp \begin{aligned} y &= \beta _0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p \end{aligned}はい=b0+b1バツ1+b2バツ2+⋯+bpバツp
私たちの目標は、 β \betaのセットを見つけることです。予測値y^ = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β pxp \hat{y} = \beta _0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p となるような β値x_py^=b0+b1バツ1+b2バツ2+⋯+bpバツpそして実際の値yyyの差はこの差は、残差二乗和 (RSS) によって測定できます。
RSS = ∑ i = 1 n ( y − y ^ i ) 2 \text{RSS} = \sum_{i=1}^{n} (y - \hat{y}_i)^2RSS=i = 1∑ん( y−y^私は)2
最小二乗法の目標は、RSS を最小限に抑えることです。具体的には、 RSS を最小化するβ \betaを見つけることで達成するβ値。
最小二乗法の背後にある直感的な考え方は、予測値を観測値にできるだけ近づけるモデルを見つけようとすることです。このアプローチは二乗誤差損失に基づいています。
次に、具体的な数値例を挙げて最小二乗法の役割を見ていきます。
1. 単一の説明変数、単一の応答変数
単一の説明変数と単一の応答変数を持つこの種の回帰モデルは、次の式で表すことができます。
y = β 0 + β 1 xy = \beta_0 + \beta_1 xy=b0+b1バツ
単純な線形回帰モデルy = β 0 + β 1 xy = \beta_0 + \beta_1 x を仮定します。y=b0+b1x、4 つのデータ点 (x、yx、y× 、y):(1 , 6 1,61 、6)(2 、 5 2、52 、5)(3 、 7 3、73 、7)(4 、 10 4、104 、10 )、最もよく一致するパラメーターβ 0 、 β 1 \beta_0、\beta_1b0、b1。
データ点をこの線形回帰モデルにそれぞれ代入すると、
β 0 + β 1 1 = 6 β 0 + β 1 2 = 5 β 0 + β 1 3 = 7 β 0 + β 1 4 = 10 \begin{aligned} \ beta_0 + \beta_1 1 &= 6 \\ \beta_0 + \beta_1 2 &= 5 \\ \beta_0 + \beta_1 3 &= 7 \\ \beta_0 + \beta_1 4 &= 10 \end{aligned}b0+b11b0+b12b0+b13b0+b14=6=5=7=10
最小二乗法で使用される方法は、等号の両側の差の二乗を最小化すること、つまり次の関数の最小値を見つけることです:
S ( β 0 , β 1 ) = [ 6 − ( β 0 + β 1 1 ) ] 2 + [ 5 − ( β 0 + β 1 2 ) ] 2 + [ 7 − ( β 0 + β 1 3 ) ] 2 + [ 10 − ( β 0 + β 1 4 ) ] 2 \begin{aligned} S(\beta_0 , \beta_1) &= [6 - (\beta_0 + \beta_1 1)]^2 \\ &+ [5 - (\beta_0 + \beta_1 2)]^2 \\ &+ [7 - (\beta_0 + \ beta_1 3)]^2 \\ &+ [10 - (\beta_0 + \beta_1 4)]^2 \end{aligned}S ( b0、b1)=[ 6−( b0+b11 ) ]2+[ 5−( b0+b12 ) ]2+[ 7−( b0+b13 ) ]2+[ 10−( b0+b14 ) ]2
% 初始化符号变量
syms beta_0 beta_1 real
% 定义你的公式
f = (6 - (beta_0 + beta_1 * 1))^2 ...
+ (5 - (beta_0 + beta_1 * 2))^2 ...
+ (7 - (beta_0 + beta_1 * 3))^2 ...
+ (10 - (beta_0 + beta_1 * 4))^2;
% 展开公式
f_expanded = expand(f);
% 你可以尝试进一步简化它,但是否能简化到所需的形式是不确定的
f_simplified = simplify(f_expanded);
% 输出结果
disp(f_expanded);
disp(f_simplified);
>>
4*beta_0^2 + 20*beta_0*beta_1 - 56*beta_0 + 30*beta_1^2 - 154*beta_1 + 210
4*beta_0^2 + 20*beta_0*beta_1 - 56*beta_0 + 30*beta_1^2 - 154*beta_1 + 210
最小値はS ( β 0 , β 1 ) S(\beta_0, \beta_1) をペアにすることで取得できます。S ( b0、b1)それぞれβ 0 \beta_0b0とβ 1 \beta_1b1の偏導関数を求め、これをゼロに設定します。
∂ S ( β 0 , β 1 ) ∂ β 0 = 8 β 0 + 20 β 1 − 56 = 0 ∂ S ( β 0 , β 1 ) ∂ β 1 = 20 β 0 + 60 β 1 − 154 = 0 {整列} \frac{\partial S(\beta_0, \beta_1)}{\partial \beta_0} &= 8 \beta_0 + 20 \beta_1 - 56 = 0 \\ \frac{\partial S(\beta_0, \beta_1 )}{\partial \beta_1} &= 20 \beta_0 + 60 \beta_1 - 154 = 0 \end{aligned}∂ β0∂ S ( b0、b1)∂ β1∂ S ( b0、b1)=8b _0+20b _1−56=0=20b _0+60b _1−154=0
% 对 b0 求偏导数
df_dbeta_0 = diff(f, beta_0);
% 对 b1 求偏导数
df_dbeta_1 = diff(f, beta_1);
disp(df_dbeta_0)
disp(df_dbeta_1)
>>
8*beta_0 + 20*beta_1 - 56
20*beta_0 + 60*beta_1 - 154
上記の 2 変数の線形方程式を解くと、次のようになります。
β 0 = 3.5 β 1 = 1.4 \begin{aligned} \beta_0 &= 3.5 \\ \beta_1 &= 1.4 \end{aligned}b0b1=3.5=1.4
% 设置偏导数等于零并求解
solutions = solve([df_dbeta_0 == 0, df_dbeta_1 == 0], [beta_0, beta_1]);
% 输出解
disp(solutions.beta_0);
disp(solutions.beta_1);
>>
7/2
7/5
したがって、最適な回帰モデルはy = 3.5 + 1.4 x y = 3.5 + 1.4 x となります。y=3.5+1.4倍。_
x = [1 2 3 4]';
y = [6 5 7 10]';
plot_x = linspace(1,4,50);
plot_y = 3.5 + 1.4 * plot_x;
scatter(x(1), y(1)); hold on;
scatter(x(2), y(2));
scatter(x(3), y(3));
scatter(x(4), y(4));
plot(plot_x, plot_y);
xlabel("$x$", "Interpreter","latex", "FontSize",16);
ylabel("$y$", "Interpreter","latex", "FontSize",16);
grid on;
2. 複数の説明変数、単一の応答変数
複数の説明変数と単一の応答変数を含むこの種の回帰モデルは、次の式で表すことができます。
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β pxpy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_py=b0+b1バツ1+b2バツ2+⋯+bpバツp
また、上記の回帰モデルに基づいて、ここでは説明変数の数をp = 2 p = 2とします。p=2,那么有 y = β 0 + β 1 x 1 + β 2 x 2 y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 y=b0+b1バツ1+b2バツ2、実験では 4 つのデータ ポイントが取得されました ( x 1、x 2、y x_1、x_2、yバツ1、バツ2、y):(1 、 3 、 6 1、3、61 、3 、6)(2 、 4 、 5 2、4、52 、4 、5)(3 、 5 、 7 3、5、73 、5 、7)(4 、 8 、 10 4、8、104 、8 、10 )、最もよく一致するパラメーターβ 0 、 β 1 、 β 2 \beta_0、\beta_1、\beta_2 をb0、b1、b2。
データ点をこの線形回帰モデルにそれぞれ代入すると、
β 0 + β 1 1 + β 2 3 = 6 β 0 + β 1 2 + β 2 4 = 5 β 0 + β 1 3 + β 2 5 = 7 β 0 + β 1 4 + β 2 8 = 10 \begin{aligned} \beta_0 + \beta_1 1 + \beta_2 3 &= 6 \\ \beta_0 + \beta_1 2 + \beta_2 4&= 5 \\ \beta_0 + \beta_1 3 + \beta_2 5&= 7 \\ \beta_0 + \beta_1 4 + \beta_2 8&= 10 \end{整列}b0+b11+b23b0+b12+b24b0+b13+b25b0+b14+b28=6=5=7=10
差分を求める関数は
S ( β 0 , β 1 , β 2 ) = [ 6 − ( β 0 + β 1 1 + β 2 3 ) ] 2 + [ 5 − ( β 0 + β 1 2 + β 2 4 ) ] 2 + [ 7 − ( β 0 + β 1 3 + β 2 5 ) ] 2 + [ 10 − ( β 0 + β 1 4 + β 2 8 ) ] 2 \begin{aligned} S(\beta_0, \beta_1, \beta_2) & = [6 - (\beta_0 + \beta_1 1 + \beta_2 3)]^2 \\ &+ [5 - (\beta_0 + \beta_1 2 + \beta_2 4)]^2 \\ &+ [7 - (\ beta_0 + \beta_1 3 + \beta_2 5)]^2 \\ &+ [10 - (\beta_0 + \beta_1 4 + \beta_2 8)]^2 \end{aligned}S ( b0、b1、b2)=[ 6−( b0+b11+b23 ) ]2+[ 5−( b0+b12+b24 ) ]2+[ 7−( b0+b13+b25 ) ]2+[ 10−( b0+b14+b28 ) ]2
syms beta_0 beta_1 beta_2 real
f = (6 - (beta_0 + beta_1 * 1 + beta_2 * 3))^2 ...
+ (5 - (beta_0 + beta_1 * 2 + beta_2 * 4))^2 ...
+ (7 - (beta_0 + beta_1 * 3 + beta_2 * 5))^2 ...
+ (10 - (beta_0 + beta_1 * 4 + beta_2 * 8))^2;
f_expanded = expand(f);
disp(f_expanded);
>>
4*beta_0^2 + 20*beta_0*beta_1 + 40*beta_0*beta_2 - 56*beta_0 + 30*beta_1^2 + 116*beta_1*beta_2 - 154*beta_1 + 114*beta_2^2 - 306*beta_2 + 210
生成求偏密数,今令それは 0∂
S ( β 0 , β 1 , β 2 ) ∂ β 0 = 8 β 0 + 20 β 1 + 40 β 2 − 56 = 0 ∂ S ( β 0 , β 1 , β 2 ) 2 ) ∂ β 1 = 20 β 0 + 60 β 1 + 116 β 2 − 154 = 0 ∂ S ( β 0 , β 1 , β 2 ) ∂ β 2 = 40 β 0 + 116 β 1 + 228 β 2 − 306 = 0 \begin{aligned} \frac{\partial S(\beta_0, \beta_1, \beta_2)}{\partial \beta_0} &= 8 \beta_0 + 20 \beta_1 + 40 \beta_2 - 56 = 0 \\ \ frac{\partial S(\beta_0, \beta_1, \beta_2)}{\partial \beta_1} &= 20 \beta_0 + 60 \beta_1 + 116 \beta_2 - 154 = 0 \\ \frac{ \partial S(\beta_0 , \beta_1, \beta_2)}{\partial \beta_2} &= 40 \beta_0 + 116 \beta_1 + 228 \beta_2 - 306 = 0 \end{aligned}∂ β0∂ S ( b0、b1、b2)∂ β1∂ S ( b0、b1、b2)∂ β2∂ S ( b0、b1、b2)=8b _0+20b _1+40b _2−56=0=20b _0+60b _1+116b _2−154=0=40b _0+116b _1+228b _2−306=0
df_dbeta_0 = diff(f, beta_0);
df_dbeta_1 = diff(f, beta_1);
df_dbeta_2 = diff(f, beta_2);
disp(df_dbeta_0)
disp(df_dbeta_1)
disp(df_dbeta_2)
>>
8*beta_0 + 20*beta_1 + 40*beta_2 - 56
20*beta_0 + 60*beta_1 + 116*beta_2 - 154
40*beta_0 + 116*beta_1 + 228*beta_2 - 306
上記の 3 次元線形方程式を解くと、次のことが得られます。
β 0 = 2 β 1 = − 1 β 2 = 1.5 \begin{aligned} \beta_0 &= 2 \\ \beta_1 &= -1 \\ \beta_2 &= 1.5 \end{aligned}b0b1b2=2=− 1=1.5
solutions = solve([df_dbeta_0 == 0, df_dbeta_1 == 0, df_dbeta_2 == 0], [beta_0, beta_1, beta_2]);
disp(solutions.beta_0);
disp(solutions.beta_1);
disp(solutions.beta_2);
>>
2
-1
3/2
したがって、最適な回帰モデルはy = 2 − x 1 + 1.5 x 2 y = 2 - x_1 + 1.5 x_2 となります。y=2−バツ1+1.5倍_2。
x_1 = [1 2 3 4]';
x_2 = [3 4 5 8]';
y = [6 5 7 10]';
plot_x_1 = linspace(1,4,50);
plot_x_2 = linspace(3,8,50);
plot_y = 2 - 1 * plot_x_1 + 1.5 * plot_x_2;
figure()
subplot(2,2,1)
scatter3(x_1(1), x_2(1), y(1)); hold on;
scatter3(x_1(2), x_2(2), y(2));
scatter3(x_1(3), x_2(3), y(3));
scatter3(x_1(4), x_2(4), y(4));
plot3(plot_x_1, plot_x_2, plot_y);
xlabel("$x_1$", "Interpreter","latex", "FontSize",16);
ylabel("$x_2$", "Interpreter","latex", "FontSize",16);
zlabel("$y$", "Interpreter","latex", "FontSize",16);
grid on;
subplot(2,2,2)
scatter(x_1(1), y(1)); hold on;
scatter(x_1(2), y(2));
scatter(x_1(3), y(3));
scatter(x_1(4), y(4));
plot(plot_x_1, plot_y);
xlabel("$x_1$", "Interpreter","latex", "FontSize",16);
ylabel("$y$", "Interpreter","latex", "FontSize",16);
grid on;
subplot(2,2,3)
scatter(x_2(1), y(1)); hold on;
scatter(x_2(2), y(2));
scatter(x_2(3), y(3));
scatter(x_2(4), y(4));
plot(plot_x_2, plot_y);
xlabel("$x_2$", "Interpreter","latex", "FontSize",16);
ylabel("$y$", "Interpreter","latex", "FontSize",16);
grid on;
subplot(2,2,4)
scatter(x_1(1), x_2(1)); hold on;
scatter(x_1(2), x_2(2));
scatter(x_1(3), x_2(3));
scatter(x_1(4), x_2(4));
plot(plot_x_1, plot_x_2);
xlabel("$x_1$", "Interpreter","latex", "FontSize",16);
ylabel("$x_2$", "Interpreter","latex", "FontSize",16);
grid on;