• 机器学习吴恩达课程学习笔记 Part2——从logistics regression到正则化


    机器学习笔记Part2

    一、分类问题简介

    在所有的二分类问题中,期待输出的 y y y都有两个值:0或者1

    但是也有多分类问题的存在: y ∈ { 1 , 2 , 3 } y\in\{1,2,3\} y{1,2,3}

    image-20221106213830391

    Example:肿瘤预测

    假设使用线性函数进行拟合,设置阈值为0.5,超过0.5认为肿瘤为阳性,低于0.5认为肿瘤为阴性。当数据呈现下面的分布时,得到的函数分类结果将会是糟糕的:

    image-20221106214530034

    把线性回归直接应用于分类问题通常不是一个好主意。

    对于二分类问题来说,分类的结果 y = 0 y=0 y=0或者 1 1 1,但是如果采用线性回归的话,那么 h θ ( x ) h_\theta(x) hθ(x)可能是大于1或者小于0。接下来将开发一个名为logistics的回归算法,算法的输出值将一直处于0到1之间,并且不会超过1。

    二、logistics回归算法

    假设函数

    希望 0 ≤ h θ ( x ) ≤ 1 0\leq h_\theta(x)\leq 1 0hθ(x)1,假设:
    h θ ( x ) = g ( θ T x ) g ( z ) = 1 1 + e − z h_\theta(x)=g(\theta^Tx)\\ g(z)=\frac{1}{1+e^{-z}} hθ(x)=g(θTx)g(z)=1+ez1
    我们将 g ( z ) g(z) g(z)称为sigmod function,与logistics function同意。这两个术语是可以互换的,都指的是函数 g ( z ) g(z) g(z)。将上述两个函数结合在一起,那么可以得到新的假设函数:
    h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-{\theta^T}x}} hθ(x)=1+eθTx1
    image-20221106220759211

    因为 g ( z ) g(z) g(z)在0到1之间,所以新的假设函数的值也在0到1之间。下面要做的就是给 θ \theta θ选定一个值,假设会帮助我们做出预测。

    模型的解释

    输入x:输出为y=1的概率

    image-20221106221348757

    在病人的特征为x的情况下,肿瘤是阳性的概率为70%。

    同时,我们也可以得到y=0的概率,因为二者概率和为1.

    决策边界

    决策边界的概念帮助我们理解假设函数到底在计算什么。

    image-20221106221924030

    在下图中,假设我们已经确定好了参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2。此处,假设 θ 0 = − 3 , θ 1 = 1 , θ 2 = 1 \theta_0=-3,\theta_1=1,\theta_2=1 θ0=3,θ1=1,θ2=1。一旦三个参数得到了确定,决策边界(decision boundary)就得到了确定。

    image-20221106223133598

    随着多项式变得复杂,特征变多,决策边界也会变得复杂,不再是直接使用一条线就能够分割,如下例子:

    image-20221106223350924

    训练集是帮助我们来拟合参数 θ \theta θ的,并不是来确定决策边界的。但是一旦有了参数 θ \theta θ,决策边界就是确定的。

    logistics回归的实现

    代价函数的确定
    image-20221106223814612

    假如我们的代价函数和之前线性回归一样,定义为: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{m}\sum_{i=1}^{m}\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 J(θ)=m1i=1m21(hθ(x(i))y(i))2,我们令 c o s t ( h θ ( x ( i ) ) − y ( i ) ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 cost(h_\theta(x^{(i)})-y^{(i)})=\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2 cost(hθ(x(i))y(i))=21(hθ(x(i))y(i))2。由于假设函数为 h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-{\theta^T}x}} hθ(x)=1+eθTx1,最后代价函数会是“非凸函数”(non-convex),如果对于这样的函数使用梯度下降,将不能保证它收敛到全局最优解。

    image-20221106224710007

    假如我们使用一个不是平方的函数定义这个代价函数,可能就能避免结果是非凸函数。下面我们就要寻找一个代价函数,使其为凸函数,能保证梯度下降最终收敛到最优解。

    image-20221106225458107 image-20221106225615372
    简化代价函数

    logistics回归代价函数:
    J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) C o s t ( h θ ( x ( i ) ) , y ( i ) ) = { − l o g ( h θ ( x ) ) i f   y = 1 − l o g ( 1 − h θ ( x ) ) i f   y = 0 Note:y=1 or 0 always J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_{\theta}(x^{(i)}),y^{(i)})\\ Cost(h_{\theta}(x^{(i)}),y^{(i)})=\begin{cases}-log(h_\theta(x))\quad if\ y=1\\ -log(1-h_{\theta}(x))\quad if\ y=0\end{cases}\\ \text{Note:y=1 or 0 always} J(θ)=m1i=1mCost(hθ(x(i)),y(i))Cost(hθ(x(i)),y(i))={log(hθ(x))if y=1log(1hθ(x))if y=0Note:y=1 or 0 always
    由于y总是不等于0就等于1,那么我们可以把上面的函数的形式进行改写,写成一个式子的形式:
     Cost  ( h θ ( x ) , y ) = − y log ⁡ ( h θ ( x ) ) − ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) \text { Cost }\left(h_\theta(x), y\right)=-y \log \left(h_\theta(x)\right)-(1-y) \log \left(1-h_\theta(x)\right)  Cost (hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))
    综上,我们可以整理得到logistics回归的代价函数:
    J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( 1 − h θ ( x ( i ) ) ) ) ] J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_{\theta}(x^{(i)}),y^{(i)})\\ =-\frac{1}{m}[\sum_{i=1}^my^{(i)}\log h_{\theta}(x^{(i)})+(1-y^{(i)})\log (1-h_\theta (1-h_\theta(x^{(i)})))] J(θ)=m1i=1mCost(hθ(x(i)),y(i))=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(1hθ(x(i))))]
    该代价函数是从极大似然法中得出的,该代价函数有个很好的属性就是该函数为convex function。

    image-20221107154102209
    logistics回归的参数确定

    logistics回归梯度下降公式:

    image-20221107171215737

    公式的形式和线性回归相同,但是假设函数的形式被修改了。

    • Debugging

      对于梯度下降是否正确的检测,我们仍可以采用绘制 J ( θ ) J(\theta) J(θ)与迭代次数的图像来进行debugging。

    • 特征缩放feature scaling

      线性回归找那个的特征缩放仍然适用于logistics回归

    高级优化算法

    使用这些高级优化算法,能够加快logistics回归的速度,并且更加适合解决大型机器学习问题。比如有大量的特征的模型。

    对于梯度下降来说,我们只需要编写出代价函数 J ( θ ) J(\theta) J(θ)和相应的偏导数 ∂ ∂ θ j J ( θ ) \frac{\partial}{\partial \theta_j}J(\theta) θjJ(θ)就可以得到梯度下降的算法。但是梯度下降并不是可以使用的唯一算法。

    image-20221107172841316
    其他的优化算法

    其他的优化方法:

    • Gradient descent
    • Conjugate gradient
    • BFGS
    • L-BFGS

    优点:

    • 不需要去选择学习率 α \alpha α
    • 通常比梯度下降收敛更快

    缺点:

    • 更加复杂
    其他算法的应用例子
    image-20221107192736942

    应用在logistics回归中:

    image-20221107192921857

    下面是自行编写的python梯度下降、BFGS和L-BFGS的程序:

    • 梯度下降
    
    
    • 1
    • BFGS

    • L-BFGS

    logistics在多分类中的应用

    多分类问题的例子:

    image-20221107204107388

    利用一对多的分类思想,我们可以将其应用在多分类问题上。

    image-20221107204127931
    一对多分类原理

    一对多分类原理有时也称作“一对余”方法。以下面的图为例子,我们将其转换为三个独立的二元分类问题:分别进行logistics回归,拟合出对应的分类器。

    image-20221107204745647

    综上,我们通过logistics回归拟合得到了3个分类器:$h_\theta^{(1)}(x), h_\theta^{(2)}(x), h_\theta^{(3)}(x) $:
    h θ ( i ) ( x ) = P ( y = i ∣ x ; θ ) (i=1,2,3) h_\theta^{(i)}(x)=P(y=i|x;\theta)\tag{i=1,2,3} hθ(i)(x)=P(y=ix;θ)(i=1,2,3)
    最后我们给出一个新的输入值 x x x,期望得到预测结果。我们需要做的就是将输入三个分类器中分别运行,最后从三个分类器中选择输出最大的那个,作为最后的预测结果,即:
    max ⁡ i h θ ( i ) ( x ) \max_ih_\theta^{(i)}(x) imaxhθ(i)(x)

    三、过拟合与正则化

    过拟合现象

    过拟合:曲线可能过所有的样本点,但是面临函数变量太多,太过于庞大的问题。同时代价函数的代价值可能很低,但是也导致了它无法泛化到新的样本中,无法预测新的样本。这里的“泛化”指的是一个假设模型应用到新的样本的能力。

    • 欠拟合,高偏差

    • 过拟合,高方差

      image-20221107223227021

    过拟合在logistics回归中的例子:

    image-20221107224536419

    过拟合和欠拟合的识别

    过拟合的处理

    解决过拟合的处理方式:

    • 尝试减少变量的数量
      • 人工检查变量
      • Model Selection Algorithm(later)
    • 正则化 regularization
      • 保持所有的特征,但是减少梯度/ θ j \theta_j θj的值
      • 当我们有很多变量时,每个变量都可能对最终的y值有些影响,此时正则化的方式就会变得很有效

    正则化

    正则化的思想

    Intution:

    image-20221108111947996

    将原来的代价函数中加入惩罚项: 1000 θ 3 2 + 1000 θ 4 2 1000\theta_3^2+1000\theta_4^2 1000θ32+1000θ42,其中1000只是一个随机举例的比较大的数,加上惩罚项后,为满足代价函数最小化,最终求得的 θ 3 \theta_3 θ3 θ 4 \theta_4 θ4都会约等于0,相当于拟合的函数为 θ 0 + θ 1 x + θ 2 x 2 \theta_0+\theta_1x+\theta_2x^2 θ0+θ1x+θ2x2,实际上是一个二次函数。这是一种更好的假设模型。

    通过这个例子,我们知道了加入惩罚项带来的效果。从某种意义上来说,这就是正则化背后的思想:较小的参数值,意味着得到一个更简单的假设模型,更不容易出现过拟合的问题。

    image-20221108141646853

    Example:房价预测

    特征: x 1 , x 2 , x 3 , . . . , x 100 x_1,x_2,x_3,...,x_{100} x1,x2,x3,...,x100

    参数: θ 0 , θ 1 , . . . , θ 100 \theta_0,\theta_1,...,\theta_{100} θ0,θ1,...,θ100
    J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) + λ ∑ j = 1 m θ j 2 ] J(\theta)=\frac{1}{2m}[\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})+\lambda \sum_{j=1}^m\theta_j^2] J(θ)=2m1[i=1m(hθ(x(i))y(i))+λj=1mθj2]
    image-20221108144140506

    其中 λ ∑ j = 1 m θ j 2 \lambda\sum_{j=1}^m\theta_j^2 λj=1mθj2正则项 λ \lambda λ正则化参数

    λ \lambda λ控制两个不同的目标之间的取舍。第一个目标,即前一项与训练的目标有关:最小化代价;第二个目标,即后一项则是使所有的参数尽可能的小,避免过拟合。

    image-20221108144535434

    对于正则化参数 λ \lambda λ来说,如果:

    • 设置得太大:对 θ i \theta_i θi这些参数的惩罚力度太大,所有的参数都会接近于0,相当于把假设函数的所有参数都忽略了,最后假设模型只剩下一个 θ 0 \theta_0 θ0,相当于用一条平行于x轴的直线去拟合。

      image-20221108144820765

      这样的模型偏差太大,是欠拟合的。

    • 设置得太小:惩罚不够,可能会造成过拟合(overfitting)

    线性回归中的正则化

    线性回归中提到了两种方法:
    线性回归 { 基于梯度下降 基于正规方程 线性回归\begin{cases}基于梯度下降\\ 基于正规方程\end{cases} 线性回归{基于梯度下降基于正规方程
    本节将这两种方法推广到正则化线性回归中

    梯度下降的正则化

    线性回归代价函数:
    J ( θ ) = 1 2 m [ ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) + λ ∑ j = 1 n θ j 2 ] min ⁡ J ( θ ) J(\theta)=\frac{1}{2m}[\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})+\lambda\sum_{j=1}^n\theta_j^2]\\ \min J(\theta) J(θ)=2m1[i=1m(hθ(x(i))y(i))+λj=1nθj2]minJ(θ)
    梯度下降:
    r e p e a t : { θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) − y ( i ) ) x j ( i ) ( j = 0 , 1 , 2 , 3 , . . . , n ) } repeat:\{ \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)-y^{(i)}})x_j^{(i)}\qquad (j=0,1,2,3,...,n)\} repeat:{θj:=θjαm1i=1m(hθ(x(i)y(i))xj(i)(j=0,1,2,3,...,n)}
    现将梯度下降写成下面所示形式(形式修改,内涵没变):

    image-20221108145921954

    考虑到加入正则化后,正则项未对 θ 0 \theta_0 θ0进行处理,所以加入正则化后的梯度下降可以表示为下面的算法形式:
    Gradient descent  Repeat  { θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) ] θ j : = θ j − α [ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] } \begin{aligned} &\text {Gradient descent } \\ &\text {Repeat }\{ \\ &\left.\theta_0:=\theta_0-\alpha \frac{1}{m} \sum_{i=1}^m\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right) x_0^{(i)}\right] \\ & \theta_j:=\theta_j-\alpha\left[\frac{1}{m} \sum_{i=1}^m\left(h_\theta\left(x^{(i)}\right)-y^{(i)}\right) x_j^{(i)}+\frac{\lambda}{m} \theta_j\right] \\\}\end{aligned} }Gradient descent Repeat {θ0:=θ0αm1i=1m(hθ(x(i))y(i))x0(i)]θj:=θjα[m1i=1m(hθ(x(i))y(i))xj(i)+mλθj]
    整理关于 θ j \theta_j θj的项,得到下面的结果:
    θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} θj:=θj(1αmλ)αm1i=1m(hθ(x(i))y(i))xj(i)
    其中 ( 1 − α λ m ) (1-\alpha\frac{\lambda}{m}) (1αmλ)是一个比1略小的项,所以梯度下降的结果在原来梯度下降的基础上使 θ j \theta_j θj又变小了一点。

    image-20221108152155007
    正规方程的正则化
    image-20221108155123009

    矩阵不可逆:

    假设 m ≤ n m\leq n mn θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)1XTy —— 矩阵 X T X X^TX XTX不可逆,如果使用pinv()函数,那么最后得到的解不会是最优的假设模型。但是在正则化中考虑到了这个问题:

    如果 λ > 0 \lambda >0 λ>0
    θ = ( X T X + λ [ 0 1 1 ⋱ 1 ] ) − 1 X T y \theta=\left(X^T X+\lambda\left[\begin{array}{lllll} 0 & & & & \\ & 1 & & & \\ & & 1 & & \\ & & & \ddots & \\ & & & & 1 \end{array}\right]\right)^{-1} X^T y θ= XTX+λ 0111 1XTy
    那么矩阵: ( X T X + λ [ 0 1 1 ⋱ 1 ] ) \left(X^T X+\lambda\left[\begin{array}{lllll} 0 & & & & \\ & 1 & & & \\ & & 1 & & \\ & & & \ddots & \\ & & & & 1 \end{array}\right]\right) XTX+λ 0111 一定是可逆的,不是奇异矩阵。故,使用正则化也会解决一些出现不可逆的问题。

    上述则是使用正则化解决线性回归的过程。

    logistics回归中的正则化
    梯度下降的正则化
    image-20221108162517916

    将梯度下降进行修改后可以得到:(注意,假设函数与线性回归相比发生了改变)

    image-20221108162705775
    高级优化算法的正则化
    • 定义costFunction():参数是向量 θ \theta θ
    • costFunction()作为参数,传入fminunc()
    image-20221108164920052
  • 相关阅读:
    第5章:程序控制结构
    将二维整型数组以二进制输出到文件与二进制文件读入到数组
    【深入理解Kotlin协程】协程作用域、启动模式、调度器、异常和取消【使用篇】
    挂耳式蓝牙耳机性价比推荐,盘点五款性能高的耳机分享
    javascript复习之旅 2.2 typeof
    K8S Pod Sidecar 应用场景之一-加入 NGINX Sidecar 做反代和 web 服务器
    程序员新手村常见问题
    阿里开源SpringBoot全栈小册 (建议学习)
    Hive 表 DML 操作——第2关:Select 操作
    利用idea基于java springboot框架开发环境搭建
  • 原文地址:https://blog.csdn.net/weixin_45745854/article/details/127754653