【HowTo ML】分类问题->逻辑回归

来源:互联网 发布:被网络攻击的公司 编辑:程序博客网 时间:2024/05/03 00:23

分类问题(Classification Problem)

样本因变量Y被标记为种类,也就是说分类是要预测一个离散值的输出。对应的问题就是分为 Y 类的概率。
支持向量机支持无数多的属性

逻辑回归(Logistic Regression)

逻辑回归:根据自变量确定因变量的种类,hθ(x)[0,1] 但是在分类问题中hθ(x)可以>1或者<0.
逻辑回归通常使用的是二元,这类问题中 y{0,1}.
其中:

0: Negative Class1: Positive Class

常见问题:垃圾邮件过滤,欺诈检测,肿瘤识别.

通常我们不会使用线性回归来解决分类问题.
原因
对于两种分类来说,我们通常会引入阀值(Threshold),但当我们加入一个X较大的数据通常会对阀值造成很大影响.
但现实中影响却不大.

假设函数(Hypothesis Representation)

为了使hθ(x)[0,1],我们需要更改回归问题时用到的函数,变成形式hθ(x)=g(θTX).
其中g称为S型函数(Sigmoid function)或者(Logistic Function),定义为g(z)=11+ez,函数图像如下:
g(z)
带入可得

hθ(x)=11+eθTx

我们也能将hθ(x)解释为如下形式:
hθ(x)=P(y=1|x;θ)

解释为:当给定x,概率参数为θ时,y=1的概率.
对于二元分类问题来说y=0y=1是对立事件,所以y=0的概率就是1P(y=1|x;θ).

决策边界(Decision boundary)

决策边界是决策函数的一个属性,由参数决定,能根据参数将样本分为不同类别的边界.
决策边界
为了更好的理解决策边界,现在我们考虑逻辑函数g(z)的对称性.通常,我们会将阀值设定在0.5,也就是说当hθ(x)0.5y=1.
其实,也就是当hθ(x)0y=1.

代价函数(Cost Function)

对于线性回归来说:

J(θ)=1mi=1m12(hθ(x(i))y(i))2=1mi=1mCost(hθ(x(i)),y(i))

代价函数可以方便的表示为:
Cost(hθ(x),y)=12(hθ(x),y)

我们为什么不能直接套用线性回归的代价函数?因为我们期望代价函数能得到一个最小的值,但线性回归的代价函数是非凸函数(Non-convex),如左图,有多个局部最小值.我们期望能得到右图.
函数图像

那么逻辑回归的代价函数应该设计成什么样呢?

Cost(hθ(x),y)={log(hθ(x)log(1hθ(x))(if y=1)(if y=0)}

-log(x)的函数图像
-log(1-x)的函数图像
假设有个目标的x0,我们预测为1,但事实上却相反,那这个算法就会收到较大的惩罚.反之亦然.
但是有处于中部的预测错误,我们就不会受到较大惩罚.

为了方便编写,我们可将Cost函数转换成:

Cost(hθ(x),y)=y log(hθ)(1y)log(1hθ(x))

所以
J(θ)=1mi=1mCost(hθ(x(i)),y(i))=1mi=1my log(hθ)+(1y)log(1hθ(x))

逻辑回归的梯度下降

梯度下降算法:

repeatuntilconvergence{θj:=θjαθjJ(θ0,θ1)(for j:n,n=2)}

带入待解函数后可化简为
repeatuntilconvergence{θj:=θjα1mi=1m(hθ(x(i))y(i))x(i)j(for j:n)}

惊奇(?)的发现,里面的公式其实没有变!
其实改变的只有hθ(x)函数.

特征缩放

线性回归的特征缩放是有效的!

其他参数求取方法

  • Conjugate gradient
  • 共轭梯度法BFGS(变尺度法)
  • L-BFGS(限制变尺度法)

优点:

  • 不需要手动选择学习率α(通过线性搜索选择)
  • 比梯度下降快

Octave中使用函数:
fminunc(无约束最小化函数):

 -- Function File: fminunc (FCN, X0) -- Function File: fminunc (FCN, X0, OPTIONS) -- Function File: [X, FVAL, INFO, OUTPUT, GRAD, HESS] = fminunc (FCN,          ...)Octave:

具体用法

##定义代价函数function [jVal, gradient] = costFunction(theta)    #...options = optimset( 'GradObj', 'on', 'MaxIter', '100');initialTheta=zeros(2,1);[optTheta, functionVal, exitFlag] ...    = fminunc(@costFunction, initalTheta, option;

options 解释:

  1. 梯度下降
  2. 打开
  3. 最大迭代次数
  4. 100次

exitFlag:
如果为1就是收敛了,具体查阅手册.

解决多类别分类问题(Multi-class classification)

思想: 把多类别分类转化为多次逻辑回归,也就是每次分为两类,一类为本次所选取的类,另一类为剩下的(One-vs-Rest).
转化
最后我们能得到K(种类个数)个逻辑分类器.也就可以得到每一种可能性的概率了,通常我们取最大的那个作为结果.

0 0
原创粉丝点击