在分类问题中,我们尝试预测新出现的物体是否属于某个类,从二元分类开始,我们将两个种类分为负向类和正向类,则因变量 y∈(0,1)
回顾乳腺癌问题,我们用线性回归方法求出合适的方法求出适合数据的一条直线,如果对于 hθ ,我们可以预测 - 当 hθ 大于或等于0.5的时候,y=1 - 当 hθ 小于0.5的时候,y=0
对于上面这个例子,似乎这条直线可以很好的解决这个问题,但是,如果我们这时候又观测到一个非常大的恶性肿瘤,加入数据,得到一个新的直线,此时,0.5的标准就不那么合适了。
我们这里引入一个新的模型,称为逻辑回归模型,该模型的输出范围始终处于0到1之间: hθ(x)=g(θTX) 其中: - X代表特征向量 - g代表逻辑函数,是一个非常常用的s形函数 Sigmoid function,
g(z)=11+e−z 图像如下:合起来,有:
hθ(x)=11+e−θTX 如果用此模型,则对于给定的输入变量,根据选择的参数计算输出变量=1的可能性 hθ(x)=P(y=1|x;0) 例如,对于给定的x,通过已经确定的参数计算出 hθ(x) =0.7,那么表示有70%的几率为正向类,相应的有30%几率负向在逻辑回归中,我们预测: - 当 hθ≥0 时,预测y=1; - 当 hθ<0 时,预测y=0; 既 - 当 θTX≥0时 ,预测y=1; - 当 θTX<0时 ,预测y=0;
现在假设我们有一个模型 hθ(x)=g(θ0+θ1x1+θ2x2),θ 是[-3 1 1] 当 −3+x1+x2≥0 ,预测y=1,可以用 x1+x2=3 这条线分开数据点。
也有可能我们的分割线不是直线,二是曲线,例如下面这个,分割线我们可以设为
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x21+θ4x22)对于线性回归模型,我们定义的代价函数是所有模型误差的平方和,但对于逻辑回归来说,此时 hθ(x)=11+e−θTX ,这样,代价函数J将是一个非凸函数,它有着许多局部最小值,将影响算法寻找最小值
所以,我们将对逻辑回归的例子重新定义代价函数,
J(θ)={1m∑mi=1(−log(hθ(x)))1m∑mi=1(−log(1−hθ(x)))y=1y=0 hθ(x)与Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))y=1y=0之间的关系如下图:从上图可以看出,当实际y=1时, hθ 等于1则代价为0,越偏离1,代价越高,实际y=0时, hθ 等于0则代价为0,越偏离0,代价越高。
将构造的新 Cost(hθ(x),y) 函数简化如下:
Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(xi)) 带入代价函数中,得到新的代价函数为: J(θ)=−1m[∑i=1myilog(hθ(xi))+(1−yi)log(1−hθ(xi))]得到新的代价函数以后,我们可以继续用梯度下降算法来求得能使代价函数最小的参数: 循环,直到收敛:
θj=θj−α∂∂θjJ(θ)=θj−α∑i=1m(hθ(xi)−yi)xij 看起来与线性回归的结果是一致的,但这里的 hθ(x)=g(θTX) 与前面的不同,所以答案是不一样的。 fminunc是matlab中自带的最小值优化函数,具体使用如下: function[jval,gradient]=costfunction(theta) jval=[求出J(theta)的代码] gradient=[求出J(theta)倒数的代码] end options=optimset('GradOBJ','on','MaxIter','100'); inittheta=zeros(2,1); [opttheta,functionval,exitflag]=fminunc(@costfunction,inittheta,options)
多类分类中,我们有多个最后的类别,无法使用二元变量(0 or 1)来分类,解决这种问题通常采用一对多的方法来做,我们将多类分类问题转化为二元分类问题,将多个类的其中一个类标记为正向类(y=1),此外其他的标记为负向类,当训练完成后,我们将另外一个类标记为正向类(y=2), 其他都为负向类,以此类推。 最后当我们需要预测时,每个分类机都运行一遍,得到每种正向类的概率,得到概率最高的那个。
下面三个分别是低度拟合,正常拟合,过度拟合:
在分类问题中也有这种情况发生:
在低度拟合中,我们不能很好的利用训练集来得到准确的结果,而如果是过度你和,虽然我们拟合的结果非常适应训练集,但往往用它进行预测的时候效果不好,或者所花时间过长。 我们可以采取的措施有: - 丢弃一些无关特征 - 保留特征,但是减小参数的大小
如果是上一节中第一种预测的过拟合,此时我们的模型是:
hθ(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44 我们要做的就是减少 θ3和θ4 的作用,主要目标就是最后选择较小的 θ3和θ4 , 我们可以做的是在代价函数中加重 θ3和θ4 的比重,这样在整个学习过程的时候最后得到的 θ3和θ4 就比较小。 J(θ)=12m⎡⎣⎢⎢∑i=1m(hθ(xi)−yi)2+λ∑j=1nθ2j⎤⎦⎥⎥ λ 又称归一化参数,经过归一化处理的模型与原模型的可能对比如下: 如果 λ 选择过大,则所有参数都变小了,就像上图的中线一样,低度拟合归一化线性回归的代价函数为:
J(θ)=12m⎡⎣⎢⎢∑i=1m(hθ(xi)−yi)2+λ∑j=1nθ2j⎤⎦⎥⎥ 如果我们要进行梯度算法,因为我们未对 θ0 进行归一化,所以将变为: θ0=θ0−α1m∑i=1m((hθ(xi)−yi)·xi0) θj=θj−α1m∑i=1m((hθ(xi)−yi)·xij+λmθj) 其中第二式子可以写为: θj=θj(1−αλm)−α1m∑i=1m((hθ(xi)−yi)·xij) 可以看出,归一化线性回归的算法在于每一次递减的基础上再额外令 θ 减少了一个值 同样我们可以用正规解方程的方法来解决归一化的问题。