机器学习入门-分类问题的拟合

分类问题-逻辑回归

其实对于分类问题的本质还是选择合适的函数h(x),通过改变函数的系数Θ使其代价cost(i)之和J(Θ)最小.

得出合适的hθ(x)函数。

逻辑回归

分类问题不一定都是线性可分的,还有很多是非线性分类的。

回归函数选择

对于01分类问题,由于正常的线性回归方程的局限性,采用非线性模型
模 型 函 数 : h θ ( x ) = g ( θ T x ) θ T x 可 以 表 示 为 多 项 式 如 : θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 x 2 + . . . 其 中 g ( z ) = 1 1 + e − z 所 以 h θ ( x ) = 1 1 + e − θ T x 模型函数:h_{\theta}(x)=g(\theta ^T x)\\ \theta^T x可以表示为多项式如:\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2x_2+...\\ 其中g(z)=\frac{1}{1+e^{-z}}\\ 所以h_{\theta}(x)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=g(θTx)θTxθ0+θ1x1+θ2x2+θ3x12x2+...g(z)=1+ez1hθ(x)=1+eθTx1

代价函数选择

线性回归模型代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 使 用 C o s t ( h θ ( x ) , y ) = 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2\\ 使用Cost(h_\theta(x),y)=\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2\\ J(θ)=2m1i=1m(hθ(x(i))y(i))2使Cost(hθ(x),y)=21(hθ(x(i))y(i))2
这里的代价函数表示的是我们希望学习算法付出的代价

直接使用欧氏距离代价函数,会有两个问题。

  • 误差不合适的问题。
  • 非凸函数出现的多个局部最优点。

所以我们要使用交叉熵损失函数来优化。

合适的代价函数如下所示,可以使得代价函数为θ的凸函数,便于使用梯度下降算法
C o s t ( h θ ( x ) , y ) = − l o g ( h θ ( x ) )     i f   y = 1 C o s t ( h θ ( x ) , y ) = − l o g ( 1 − h θ ( x ) )     i f   y = 0 因 此 其 误 差 函 数 J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ) , y ) Cost(h_\theta(x),y)=-log(h_\theta(x))\ \ \ if\ y=1\\ Cost(h_\theta(x),y)=-log(1-h_\theta(x))\ \ \ if\ y=0\\ 因此其误差函数J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x),y) Cost(hθ(x),y)=log(hθ(x))   if y=1Cost(hθ(x),y)=log(1hθ(x))   if y=0J(θ)=m1i=1mCost(hθ(x),y)
其中,y只属于0或1.

这里使用了交叉熵损失函数来代替欧式距离函数。

具体区别和解析见博客:为什么不用平方误差(MSE)作为Logistic回归的损失函数

简化代价函数

因为分段函数,所以我们将其按y和(1-y)来组合即可将整个函数放在一个式子中。

使用极大似然估计法求得
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ) , y ) = − 1 m [ ∑ i = 1 m ( y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] 使 得 C o s t ( h θ ( x ) , y ) = y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x),y)\\ =-\frac{1}{m}[\sum_{i=1}^m(y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]\\ 使得Cost(h_\theta(x),y)=y^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)})) J(θ)=m1i=1mCost(hθ(x),y)=m1[i=1m(y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]使Cost(hθ(x),y)=y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))

求最小化J(θ)的θ组合-梯度下降

根 据 梯 度 下 降 算 法 , 更 新 每 一 项 θ , 使 其 延 代 价 函 数 对 θ 的 切 线 方 向 ( 偏 导 数 ) 下 降 θ j : = θ j − α ∂ ∂ θ j J ( θ ) 其 中 J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ) , y ) θ j : = θ j − α ∂ ( 1 m [ ∑ i = 1 m y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] ) ∂ θ j 根据梯度下降算法,更新每一项\theta,使其延代价函数对\theta的切线方向(偏导数)下降\\ \theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)\\ 其中J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x),y)\\ \theta_j:=\theta_j-\alpha\frac{\partial (\frac{1}{m}[\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))])}{\partial\theta_j}\\ ,θ使θ线θj:=θjαθjJ(θ)J(θ)=m1i=1mCost(hθ(x),y)θj:=θjαθj(m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))])

比较之前的欧式代价函数梯度下降
由 于 J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 θ j : = θ j − α ∂ ( 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 ) ∂ θ j 手 动 求 导 后 得 到 具 体 的 表 达 式 : θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) 由于J(\theta)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\\ \theta_j:=\theta_j-\alpha\frac{\partial(\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2)}{\partial\theta_j}\\ 手动求导后得到具体的表达式:\\ \theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} J(θ)=2m1i=1m(hθ(x(i))y(i))2θj:=θjαθj(m1i=1m21(hθ(x(i))y(i))2)θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)

之后执行梯度下降算法即可求出要求的θ

优化库函数实现

(这里用的octave语言。)

首先给出求导函数

这里使用下面公式表示代价函数
j ( θ ) = ( θ 1 − 5 ) 2 + ( θ 2 − 5 ) 2 j(\theta)=(\theta_1-5)^2+(\theta_2-5)^2 j(θ)=(θ15)2+(θ25)2

function [jVal,gradient] = costFunction(theta)
  
  jVal = (theta(1)-5)^2+(theta(2)-5)^2;
  
  gradient=zeros(2,1);
  gradient(1)=2*(theta(1)-5);
  gradient(2)=2*(theta(2)-5);

其次调用函数

options = optimset('GradObj','on','MaxIter','100');  %%优化算法的记号
initialTheta=zeros(2,1);  %初始的梯度值
[optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options);

可以运行得出,最后的θ为[5,5]

参考资料

B站课吴恩达机器学习:https://www.bilibili.com/video/BV164411b7

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值