一个或多个自变量和因变量之间的关系进行建模(其中 θ i \theta_i θi为权重, θ 0 \theta_0 θ0为bias偏置值):
一维特征: h θ ( x ) = θ 0 + θ 1 x 1 h_\theta(x)=\theta_0+\theta_1x_1 hθ(x)=θ0+θ1x1
二维特征: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2 hθ(x)=θ0+θ1x1+θ2x2
N维特征: ∑ i = 0 N θ i x i = θ T X \sum_{i=0}^N\theta_ix_i=\theta^TX ∑i=0Nθixi=θTX
梯度下降算法
构建损失函数
未得到目标线性方程,得到上述公式中的 θ T \theta^T θT参数
为确定所选的 θ T \theta_T θT效果好坏使用损失函数(loss function)来评估 h ( x ) h(x) h(x)函数的好坏
损失函数如下(MSE误差平方和): J ( θ ) = 1 2 m ∑ i = 1 m ( h ( θ T x i ) − y i ) 2 (1) J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h(\theta^Tx_i)-y_i)^2 \tag{1} J(θ)=2m1i=1∑m(h(θTxi)−yi)2(1)
梯度下降法
使用了导数的概念,对点 x 0 x_0 x0的导数反映了函数在该点处的瞬时变化速率 f ′ ( x 0 ) = lim △ x → ∞ = △ y △ x = lim △ x → ∞ = f ( x 0 + △ x ) − f ( x 0 ) △ x (2) f^\prime(x_0)=\lim_{\vartriangle x \to \infty} =\frac{\vartriangle y}{\vartriangle x}=\lim_{\vartriangle x \to \infty} =\frac{f(x_0+\vartriangle x)-f(x_0)}{\vartriangle x} \tag{2} f′(x0)=△x→∞lim=△x△y=△x→∞lim=△xf(x0+△x)−f(x0)(2)
StochasticGradientDescent(SGD)随机梯度下降 Repeat { ⋯ θ j = θ j − α ( ( h ( θ T x i ) − y i ) x i ) ⋯ } \text{Repeat} \{ \\ \dotsb\\ \theta_j = \theta_j -\alpha((h(\theta^Tx_i)-y_i)x_i)\\ \dotsb\\ \} Repeat{
⋯θj=θj−α((h(θTxi)−yi)xi)⋯} 其中: x i x_i xi为随机的样本点
BatchGradientDescent(BGD)批量随机梯度下降 Repeat { ⋯ θ j = θ j − α ( 1 m ∑ i = 0 m ( h ( θ T x i ) − y i ) x i ) ⋯ } \text{Repeat} \{ \\ \dotsb\\ \theta_j = \theta_j -\alpha(\frac{1}{m}\sum_{i=0}^m(h(\theta^Tx_i)-y_i)x_i)\\ \dotsb\\ \} Repeat{
⋯θj=θj−α(m1i=0∑m(h(θTxi)−yi)xi)⋯}
代码实现
import matplotlib.pyplot as plt
#Training data set#each element in x represents (x0,x1,x2)
x =[(0.,3),(1.,3),(2.,3),(3.,2),(4.,4),(0.,3),(1.,3.1),(2.,3.5),(3.,2.1),