> 文章列表 > 机器学习算法系列(二)

机器学习算法系列(二)

机器学习算法系列(二)

机器学习算法之–线性回归算法

  1. 回归是监督学习的另一个重要问题
    回归用于预测输入变量(自变量)和输出变量(因变量)之间的关系,特别是当输入变量的值发生变化时,输出变量的值随之发生的变化;
  2. 回归模型正是表示从输入变量到输出变量之间映射的函数,回归问题的学习等价于函数拟合:选择一条函数曲线,使其很好的拟合已知数据且很好的预测未知数据
  3. 回归问题分为学习和预测两个过程:
    首先,给定一个训练数据集,根据其构建一个模型;
    对于新的输入,预测系统根据学习的模型确定相应的输出

线性回归是使用线性方程对数据进行拟合的算法

一、算法原理

1.1、一个输入特征(单变量,x:输入,y:输出)

预测函数

hθ(x)=θ0+θ1∗xh_\\theta(x)=\\theta_0+\\theta_1*xhθ(x)=θ0+θ1x
关键:选择合适的模型参数θ0,θ1\\theta_0,\\theta_1θ0,θ1,也就是模型的求解过程。

成本函数

J(θ)=J(θ0,θ1)=12m∑i=1n(h(xi)−yi)2J(θ)=J(\\theta_0, \\theta_1)= \\frac{1}{2m}\\sum_{i=1}^n (h(x^i)-y^i)^2J(θ)=Jθ0,θ1=2m1i=1n(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}斜率:θjJθj=θjαθjJ
就可以让θj往J(θ)变小的方向迈了一小步\\theta_j往J(\\theta)变小的方向迈了一小步θjJ(θ)变小的方向迈了一小步

注意:若α\\alphaα太小,需要更多次数才能到达最终目的;而太大可能会导致直接跨过,导致无法收敛

故不难推导出梯度下降算法公式:
{θ0=θ0−αm∑i=1m(h(xi)−yi)θ1=θ1−αm∑i=1m((h(xi)−yi)xi)\\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=θ0mαi=1m(h(xi)yi)θ1=θ1mα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的迭代公式里,累加器中还需要乘以xix_ixi

1.2、多变量线性回归(不止一个输入特征)

预测函数

hθ(x)=θ0+θ1∗x1+θ2∗x2+......++θn∗xn=∑j=0n(θj∗xj)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+θ1x1+θ2x2+......++θnxn=j=0n(θjxj)注:此处假设x0=1x_0=1x0=1成为模型偏置(bias)
理论上,预测函数有无穷多个,我们求解的目标就是找出一个最优的θ值。

还可将其重写为向量形式,以简化表达:
h(x)=[θ0,...θn][x0...xn]=θTxh(x)=\\begin{bmatrix} \\theta_0,...\\theta_n\\end{bmatrix} \\begin{bmatrix} x_0\\\\...\\\\x_n\\end{bmatrix}=\\theta^Txh(x)=[θ0,...θn]x0...xn=θTx

h0(X)=X⋅θh_0(X)=X·\\thetah0(X)=Xθ,其中向量形式预测样本:
X=[x0(1)x1(1)...xn(1)............x0(m)x1(m)...xn(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(θ)=12m∑i=1n(h(xi)−yi)2J(θ)= \\frac{1}{2m}\\sum_{i=1}^n (h(x^i)-y^i)^2J(θ)=2m1i=1n(h(xi)yi)2
其中,模型参数θ⃗\\vec{\\theta}θ为n+1维的向量,h(xi)−yih(x^i)-y^ih(xi)yi是预测值与实际值的差,可看到该形式与单变量线性回归算法类似。

矩阵形式表达为
J(θ)=12m(Xθ−y⃗)T(Xθ−y⃗)J(θ)= \\frac{1}{2m}(X\\theta-\\vec{y})^T(X\\theta-\\vec{y})J(θ)=2m1(y)T(y)
其中X表示m(n+1)矩阵大小的训练样本;y⃗\\vec{y}y表示训练样本输出yiy^iyi构成的向量
该公式的优势是:没有累加器,不需要循环,直接使用矩阵运算,就可以一次性计算出针对特定的参数θ下模型的拟合成本。

梯度下降算法

θj−αm∑i=1n((h(xi)−yi)xj(i)\\theta_j- \\frac{\\alpha}{m}\\sum_{i=1}^n ((h(x^i)-y^i)x_j^{(i)}θjmαi=1n((h(xi)yi)xj(i)
下标j是参数的序号(0~n),α为学习率。

伪代码

  • 确定学习率α:太大会导致成本函数无法收敛,太小计算太多,效率变低
  • 定参数起始位置:比如选取比较靠近极点的位置
  • 计算下一组值:迭代计算公式,根据新的预测函数,带入成本函数就可以算出新的成本。
  • 确认成本函数是否收敛:拿新的成本和旧的成本进行比较,看成本是不是变得越来越小。如果两次成本之间的差异小于误差范围,就说明已经非常接近最小成本了,就可以近似地认为找到了最小成本。
  • 若在误差之外,则重复计算下一组值,直到找到最优解为止

二、模型优化(增加多项式特征)

回归模型太简单时可能会导致欠拟合

  • 可增加特征多项式(例如加入x1*x2,x1平方…)
  • 数据归一化:该过程成为特征缩放,为了让算法收敛得更快;
    归一化所得预测值再乘以归一化系数,便能得到真实值

以上就是关于线性回归的分享,若有不妥之处,欢迎各路大佬不吝赐教~

喜欢的伙伴记得点个赞关注一下吧~

漂亮的LOGO