原创博客,转载请注明出处!
第七章 Logistic回归
y取值个数有限的分类,我们用y=1或0表示其两种分类
如果用线性回归方法直线拟合数据,有时是幸运的,得到了比较好的拟合
但,在X轴一个比较大的位置添加个训练样本,假设函数反而变差,
另外,如果输出值大于1或者小于0,又将如何处理?
因此,不得不引入新的假设函数来处理logistic回归
3、决策界限
找到一个界限来分类
4、代价函数
由于假设函数的改变,如果仍然用线性回归的代价函数,将会出现非凸函数,非凸函数有很多局部最优值
于是有新的代价函数
logistic回归算法的Cost(h(x),y)={-log(h(x)) ,y=1
-log(1-h(x)) ,y=0 }
简化:Cost(h(x),y)=-y log(h(x)) - (1-y)log(1-h(x))
梯度下降法求代价函数最小
6、高级优化
共轭梯度法BFGS和L-BFGS算法:
有一个智能内循环()线搜索算法,它可以自动尝试不同的学习速率α并自动选择一个好的学习率α
Octave里的fminunc函数(无约束最小化函数)
Octave里的调用方法,(这就是加强版的梯度下降方法)
options = optimset('GradObj', 'on', 'MaxIter', '100');
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
fminunc()是Octave里无约束最小化函数,调用这个函数时,需要传入一个存有配置信息的变量options。上面的代码中,我们的设置项中’GradObj’, ‘on’,表示设置梯度目标参数为打开状态(on),这也意味着你现在确实要给这个算法提供一个梯度。’MaxIter’, ‘100’代表设置最大迭代次数为100次。
initialTheta是我们给出的一个θ的猜测初始值。
然后我们调用fminunc这个函数,传入三个参数,其中第一个参数@costFunction这里的@符号代表指向之前我们定义的costFunction函数的指针。后面两个参数分别是我们定义的thetatheta初始值和配置信息options。
当我们调用这个fminunc函数时,它会自动的从众多高级优化算法中挑选一个来使用(可以把它当做一个可以自动选择合适的学习速率α的梯度下降算法)。
最终函数会有三个返回值,分别是满足最小化代价函数J(θ)的θ值optTheta,costFunction中定义的jVal的值functionVal,以及标记是否已经收敛的状态值exitFlag,如果已收敛,标记为1,否则为0
costFunction函数代码如下
7、一对多
当逻辑结果有多个时,即一对多
可以采用一对余法
三个分类器输入x,概率最高的那个即使预测值