(
a
1
,
b
1
)
,
(
a
2
,
b
2
)
,
⋯
,
(
a
n
,
b
n
)
(a_1,b_1),(a_2,b_2),\cdots,(a_n,b_n)
(a1,b1),(a2,b2),⋯,(an,bn)
例子
a
i
a_i
ai表示某地区警察的密度,
b
i
b_i
bi 表示该地区犯罪率。
现在分析二者的相对关系
大致均匀的分散在直线的两边,如何找出能代表它们趋势的直线呢?
最小二乘法的思想,最能代表趋势的直线,是
总体上来讲,这些点到这条直线最近
y
=
k
x
+
c
y=kx+c
y=kx+c
由于实际数据是
(
a
i
,
b
i
)
(a_i,b_i)
(ai,bi),而拟合数据是
(
a
i
,
k
a
i
+
c
)
(a_i,ka_i+c)
(ai,kai+c),最小二乘法
则令差的和的平方
S
S
S为:
S
=
∑
i
=
1
n
(
k
a
i
+
c
−
b
i
)
2
S=\sum_{i=1}^{n}(ka_i+c-b_i)^2
S=i=1∑n(kai+c−bi)2
如何对k和c取值,从而让 S 的值最小。
- 关于
k
展开,形成一个一元二次函数
S = ∑ i = 1 n ( k a i + c − b i ) 2 S=\sum_{i=1}^{n}(ka_i+c-b_i)^2 S=∑i=1n(kai+c−bi)2
= ( ∑ a i 2 ) k 2 + 2 ( ∑ ( a i ( c − b i ) ) ) k + ∑ ( c − b i ) 2 =(\sum a_i^2)k^2+2(\sum(a_i(c-b_i)))k+\sum(c-b_i)^2 =(∑ai2)k2+2(∑(ai(c−bi)))k+∑(c−bi)2 - 关于
c
展开
= n c 2 + ( 2 ∑ ( k a i − b i ) ) c + ∑ ( k a i − b i ) 2 =nc^2+(2\sum(ka_i-b_i))c+\sum(ka_i-b_i)^2 =nc2+(2∑(kai−bi))c+∑(kai−bi)2
为了让 S 达到最小值,则要对上面两个一元二次方程取最小值。
c
=
−
b
2
a
=
−
2
∑
(
k
a
i
−
b
i
)
2
n
=
1
n
(
∑
(
b
i
−
k
a
i
)
)
c=-\frac{b}{2a}=-\frac{2\sum(ka_i-b_i)}{2n}=\frac{1}{n}(\sum(b_i-ka_i))
c=−2ab=−2n2∑(kai−bi)=n1(∑(bi−kai))
即为 c 和 k 之间满足的第一个方程:
c
=
1
n
(
∑
(
b
i
−
k
a
i
)
)
(
1
)
c=\frac{1}{n}(\sum(b_i-ka_i))(1)
c=n1(∑(bi−kai))(1)
把 k 的一元二次方程展开得
k = − b 2 a = − 2 ( ∑ ( a i ( c − b i ) ) ) 2 ∑ a i 2 = ∑ ( a i b i ) − c ∑ b i ∑ a i 2 k=-\frac{b}{2a}=-\frac{2(\sum(a_i(c-b_i)))}{2\sum a_i^2}=\frac{\sum(a_ib_i)-c\sum b_i}{\sum a_i^2} k=−2ab=−2∑ai22(∑(ai(c−bi)))=∑ai2∑(aibi)−c∑bi
k = ∑ ( a i b i ) − c ∑ b i ∑ a i 2 ( 2 ) k=\frac{\sum(a_ib_i)-c\sum b_i}{\sum a_i^2}(2) k=∑ai2∑(aibi)−c∑bi(2)
由(1)(2)得
k = n ∑ a i b i − ( ∑ a i ) ( ∑ b i ) n ∑ a i 2 − ( ∑ a i ) 2 k=\frac{n\sum a_ib_i-(\sum a_i)(\sum b_i)}{n\sum a_i^2-(\sum a_i)^2} k=n∑ai2−(∑ai)2n∑aibi−(∑ai)(∑bi)
c = ( ∑ a i 2 ) ( ∑ b i ) − ( ∑ a i ) ( ∑ a i b i ) ) n ∑ a i 2 − ( ∑ a i ) 2 c=\frac{(\sum a_i^2)(\sum b_i)-(\sum a_i)(\sum a_ib_i))}{n\sum a_i^2-(\sum a_i)^2} c=n∑ai2−(∑ai)2(∑ai2)(∑bi)−(∑ai)(∑aibi))
参考资料:
[1] python机器学习-线性回归(LinearRegression)算法;