本文参考链接:https://blog.csdn.net/jiaoyangwm/article/details/81139362
线性回归和逻辑回归
线性回归
利用大量的样本D=(xi,yi)Ni=1D={(x_i,y_i)}_{i=1}^ND=(xi,yi)i=1N,通过有监督的学习,学习到由x到y的映射fff,利用该映射关系对未知的数据进行预估,因为y为连续值,所以是回归问题。
-
单变量情况:
-
多变量情况:
二维空间的直线,转化为高维空间的平面
机器学习是数据驱动的算法,数据驱动=数据+模型,模型就是输入到输出的映射关系。
模型=假设函数(不同的学习方式)+优化
1. 假设函数
线性回归的假设函数(θ0\theta_0θ0表示截距项,x0=1x_0=1x0=1,方便矩阵表达):f(x)=θ0x0+θ1x1+θ2x2...+θnxnf(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2...+\theta_nx_nf(x)=θ0x0+θ1x1+θ2x2...+θnxn
向量形式(θ,x\theta,xθ,x都是列向量):f(x)=θTxf(x)=\theta^Txf(x)=θTx
2. 优化方法
监督学习的优化方法=损失函数+对损失函数的优化
3. 损失函数
如何衡量已有的参数θ\thetaθ的好坏?
利用损失函数来衡量,损失函数度量预测值和标准答案的偏差,不同的参数有不同的偏差,所以要通过最小化损失函数,也就是最小化偏差来得到最好的参数。
映射函数:hθ(x)h_{\theta}(x)hθ(x)
损失函数:J(θ0,θ1,...,θn)=12m∑mi=1(hθ(x(i))−y(i))2J(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2J(θ0,θ1,...,θn)=2m1i=1∑m(hθ(x(i))−y(i))2
解释:因为有m个样本,所以要平均,分母的2是为了求导方便
损失函数:凸函数
4. 损失函数的优化
损失函数如右图所示,是一个凸函数,我们的目标是达到最低点,也就是使得损失函数最小。
多元情况下容易出现局部极值
求极值的数学思想,对公式求导=0即可得到极值,但是工业上计算量很大,公式很复杂,所以从计算机的角度来讲,求极值是利用梯度下降法。
① 初始位置选取很重要
② 复梯度方向更新,二维情况下,函数变换最快的方向是斜率方向,多维情况下就成为梯度,梯度表示函数值增大的最快的方向,所以要在负梯度方向上进行迭代。
③ θ\thetaθ的更新公式如上图,每个参数θ1,θ2...\theta_1,\theta_2...θ1,θ2...都是分别更新的
高维情况:梯度方向就是垂直于登高线的方向
参数更新示例:
对每个theta都进行更新:
学习率:
① 学习率太大,会跳过最低点,可能不收敛
② 学习率太小收敛速度过慢
5. 过拟合和欠拟合
过拟合的原因:
① 如果我们有很多的特征或模型很复杂,则假设函数曲线可以对训练样本拟合的非常好,学习能力太强了,但是丧失了一般性。
② 眼见不一定为实,训练样本中肯定存在噪声点,如果全都学习的话肯定会将噪声也学习进去。
过拟合造成什么结果:
过拟合是给参数的自由空间太大了,可以通过简单的方式让参数变化太快,并未学习到底层的规律,模型抖动太大,很不稳定,variance变大,对新数据没有泛化能力。
6. 利用正则化解决过拟合问题
正则化的作用:
① 控制参数变化幅度,对变化大的参数惩罚
② 限制参数搜索空间
添加正则化的损失函数:
J(θ0,θ1,...,θn)=12m∑mi=1(hθ(x(i))−y(i))2+λ2m∑nj=1θ2jJ(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2+ \frac{\lambda}{2m}\sum_{j=1}^n \theta_j^2J(θ0,θ1,...,θn)=2m1i=1∑m(hθ(x(i))−y(i))2+2mλj=1∑nθj2
m:样本有m个
n:n个参数,对n个参数进行惩罚
λ\lambdaλ:对误差的惩罚程度,λ\lambdaλ越大对误差的惩罚越大,容易出现过拟合,λ\lambdaλ越小,对误差的惩罚越小,对误差的容忍度越大,泛化能力好。
逻辑回归
监督学习,解决二分类问题。
分类的本质:在空间中找到一个决策边界来完成分类的决策
逻辑回归:线性回归可以预测连续值,但是不能解决分类问题,我们需要根据预测的结果判定其属于正类还是负类。所以逻辑回归就是将线性回归的(−∞,+∞)(-\infty,+\infty)(−∞,+∞)结果,通过sigmoid函数映射到(0,1)(0,1)(0,1)之间。
线性回归决策函数:hθ(x)=θTxh_{\theta}(x)=\theta^Txhθ(x)=θTx
将其通过sigmoid函数,获得逻辑回归的决策函数:hθ(x)=11+e−θTxh_{\theta}(x)=\frac{1}{1+e^{-\theta^Tx}}hθ(x)=1+e−θTx1
为什么使用sigmoid函数:
① 可以对(−∞,+∞)(-\infty,+\infty)(−∞,+∞)结果,映射到(0,1)(0,1)(0,1)之间,作为概率。
② x<0,sigmoid(x)<12;x>0,sigmoid(x)>12x<0,sigmoid(x)<\frac{1}{2};x>0,sigmoid(x)>\frac{1}{2}x<0,sigmoid(x)<21;x>0,sigmoid(x)>21,可以将12\frac{1}{2}21作为决策边界。
③ 数学特性好,求导容易:g′(z)=g(z)⋅(1−g(z))g'(z)=g(z)\cdot(1-g(z))g′(z)=g(z)⋅(1−g(z))
线性回归的损失函数为平方损失函数,如果将其用于逻辑回归的损失函数,则其数学特性不好,有很多局部极小值,难以用梯度下降法求最优。
逻辑回归损失函数:对数损失函数
解释:如果一个样本为正样本,那么我们希望将其预测为正样本的概率p越大越好,也就是决策函数的值越大越好,则logp越大越好,逻辑回归的决策函数值就是样本为正的概率;
如果一个样本为负样本,那么我们希望将其预测为负样本的概率越大越好,也就是(1-p)越大越好,即log(1-p)越大越好。
为什么要用log:
样本集中有很多样本,要求其概率连乘,概率为(0,1)间的数,连乘越来越小,利用log变换将其变为连加,不会溢出,不会超出计算精度。
逻辑回归损失函数:
∂J(θ)∂θj=1m[∑mi=1(hθ(x(i))−y(i))x(i)j]\frac{\partial J(\theta)}{\partial \theta_j}=\frac{1}{m}[\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}]∂θj∂J(θ)=m1[∑i=1m(hθ(x(i))−y(i))xj(i)]
- 一对一(one vs one)
一对一分类,每两个类之间构建一个分类器,共需要N(N−1)2\frac{N(N-1)}{2}2N(N−1)个分类器
- 一对多(one vs rest)
一对多分类器,每个分类器判断是三角形还是不是三角形,共需要N个分类器。