- 回归是监督学习的另一个重要问题
回归用于预测输入变量(自变量)和输出变量(因变量)之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化;- 回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合:选择一条函数曲线,使其很好的拟合已知数据且很好的预测未知数据
- 回归问题分为学习和预测两个过程:
首先,给定一个训练数据集,根据其构建一个模型;
对于新的输入,预测系统根据学习的模型确定相应的输出线性回归是使用线性方程对数据进行拟合的算法
h θ ( x ) = θ 0 + θ 1 ∗ x h_\theta(x)=\theta_0+\theta_1*x hθ(x)=θ0+θ1∗x
关键:选择合适的模型参数 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1,也就是模型的求解过程。
J ( θ ) = J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 n ( h ( x i ) − y i ) 2 J(θ)=J(\theta_0, \theta_1)= \frac{1}{2m}\sum_{i=1}^n (h(x^i)-y^i)^2 J(θ)=J(θ0,θ1)=2m1i=1∑n(h(xi)−yi)2
求解 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1的值
原理:先随机选取一组 θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1,以及参数α(学习率)作为移动的步幅,计算
斜率 : ∂ J ∂ θ j θ j = θ j − α ∗ ∂ J ∂ θ j 斜率:\frac{\partial J}{\partial\theta_j}\\\theta_j=\theta_j-\alpha*\frac{\partial J}{\partial\theta_j} 斜率:∂θj∂Jθj=θj−α∗∂θj∂J
就可以让 θ j 往 J ( θ ) 变小的方向迈了一小步 \theta_j往J(\theta)变小的方向迈了一小步 θj往J(θ)变小的方向迈了一小步
注意:若 α \alpha α太小,需要更多次数才能到达最终目的;而太大可能会导致直接跨过,导致无法收敛
故不难推导出梯度下降算法公式:
{ θ 0 = θ 0 − α m ∑ i = 1 m ( h ( x i ) − y i ) θ 1 = θ 1 − α m ∑ i = 1 m ( ( h ( x i ) − y i ) x i ) \begin{cases} \theta_0= \theta_0-\frac{\alpha}{m}\sum_{i=1}^m (h(x^i)-y^i)\\ \\ \theta_1= \theta_1-\frac{\alpha}{m}\sum_{i=1}^m ((h(x^i)-y^i)x^i)\\ \end{cases} ⎩ ⎨ ⎧θ0=θ0−mα∑i=1m(h(xi)−yi)θ1=θ1−mα∑i=1m((h(xi)−yi)xi)
其中:
α是学习率
m是训练样本个数
h ( x ( i ) ) − y ( i ) h(x^{(i)})-y(i) h(x(i))−y(i)是模型预测值和真实值之间的误差
需要注意的是:
针对 θ 0 和 θ 1 \theta_0和\theta_1 θ0和θ1分别求出了其迭代公式,在 θ 1 \theta_1 θ1的迭代公式里,累加器中还需要乘以 x i x_i xi。
h θ ( x ) = θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + . . . . . . + + θ n ∗ x n = ∑ j = 0 n ( θ j ∗ x j ) h_\theta(x)=\theta_0+\theta_1*x_1+\theta_2*x_2+......++\theta_n*x_n =\sum_{j=0}^n (\theta_j*x_j) hθ(x)=θ0+θ1∗x1+θ2∗x2+......++θn∗xn=j=0∑n(θj∗xj)注:此处假设 x 0 = 1 x_0=1 x0=1成为模型偏置(bias)
理论上,预测函数有无穷多个,我们求解的目标就是找出一个最优的θ值。
还可将其重写为向量形式,以简化表达:
h ( x ) = [ θ 0 , . . . θ n ] [ x 0 . . . x n ] = θ T x h(x)=\begin{bmatrix} \theta_0,...\theta_n\end{bmatrix} \begin{bmatrix} x_0\\...\\x_n\end{bmatrix}=\theta^Tx h(x)=[θ0,...θn] x0...xn =θTx
h 0 ( X ) = X ⋅ θ h_0(X)=X·\theta h0(X)=X⋅θ,其中向量形式预测样本:
X = [ x 0 ( 1 ) x 1 ( 1 ) . . . x n ( 1 ) . . . . . . . . . . . . x 0 ( m ) x 1 ( m ) . . . x n ( m ) ] X=\begin{bmatrix} x_0^{(1)}&x_1^{(1)}&...&x_n^{(1)} \\ ...&...&...&... \\ x_0^{(m)}&x_1^{(m)}&...&x_n^{(m)} \end{bmatrix} X= x0(1)...x0(m)x1(1)...x1(m).........xn(1)...xn(m) 表示m个样本,n个特征
J ( θ ) = 1 2 m ∑ i = 1 n ( h ( x i ) − y i ) 2 J(θ)= \frac{1}{2m}\sum_{i=1}^n (h(x^i)-y^i)^2 J(θ)=2m1i=1∑n(h(xi)−yi)2
其中,模型参数 θ ⃗ \vec{\theta} θ为n+1维的向量, h ( x i ) − y i h(x^i)-y^i h(xi)−yi是预测值与实际值的差,可看到该形式与单变量线性回归算法类似。
其矩阵形式表达为
J ( θ ) = 1 2 m ( X θ − y ⃗ ) T ( X θ − y ⃗ ) J(θ)= \frac{1}{2m}(X\theta-\vec{y})^T(X\theta-\vec{y}) J(θ)=2m1(Xθ−y)T(Xθ−y)
其中X表示m(n+1)矩阵大小的训练样本; y ⃗ \vec{y} y表示训练样本输出 y i y^i yi构成的向量
该公式的优势是:没有累加器,不需要循环,直接使用矩阵运算,就可以一次性计算出针对特定的参数θ下模型的拟合成本。
θ j − α m ∑ i = 1 n ( ( h ( x i ) − y i ) x j ( i ) \theta_j- \frac{\alpha}{m}\sum_{i=1}^n ((h(x^i)-y^i)x_j^{(i)} θj−mαi=1∑n((h(xi)−yi)xj(i)
下标j是参数的序号(0~n),α为学习率。
回归模型太简单时可能会导致欠拟合
以上就是关于线性回归的分享,若有不妥之处,欢迎各路大佬不吝赐教~
喜欢的伙伴记得点个赞关注一下吧~