吴恩达机器学习笔记

分类问题和fminunc简介

1 逻辑回归算法

在二元分类中,y只能在{0,1}中取值,0表示negative class,期待的事物不存在的分类,比如表示良性肿瘤(恶性肿瘤不存在);反之,1表示positive class,期待的事物存在的分类。

决策边界是划分y = 0 和y = 1的线,由假设函数确定,它可以是任意形状,因为z = theta’ * x 不一定是线性的,或许含有高阶多项式。

逻辑回归算法虽然叫做回归,但用于分类问题,和线性回归相比,要改变假设函数的形式为S型函数(亦称逻辑函数),

g(z), S型函数

​(x)  给出了该特征值 x 和 参数theta 下 y = 1的概率,且

当h>=0.5时,判断y=1;当h<0.5时,判断y=0。所以,从函数图形可以看出,当y=1时,theta’(theta的转置向量)*x >= 0;y = 0时,theta’ * x< 0。

除了​(x)的形式与线性回归不同,代价函数的形式也不同,如果使用与线性回归相同的代价函数,会使得J的曲线Non-convex(有很多极小值点)。

进一步地,可以把cost函数整合为:

向量化表示J:

然后,同样需要应用梯度下降法

这里计算初J的导数表达式,代入得到:

可以发现实际上它和线性回归梯度下降中的参数迭代表达式相似,但并不完全相同,这里h函数是逻辑函数。迭代表达式可以向量化表示为

检验学习率是否能让迭代的参数逐渐靠近J的极小值点,可以作出J的值关于迭代次数的图像,观察其是否逐渐下降趋近于下界。

特征缩放仍然适用于逻辑回归的梯度下降法。

2 更高级的参数优化算法

“Conjugate gradient”, “BFGS”, and “L-BFGS”是相较于梯度下降法更复杂、也更高校的参数优化算法,不需要设定学习率,它们甚至会在每一次迭代中选择不同的学习率。这些算法很难自己code出它们的实现代码,幸运的是,octave和matlab都已经内置了这些算法。这些算法和内置函数不仅适用于逻辑回归,同样也适用于线性回归

使用构造一个函数,用于计算J(jVal)和J的偏导(gradient):

function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end

然后调用内置函数:

options = optimset('GradObj', 'on', 'MaxIter', 100); % 用于保存fminunc()的
% 设置,这里是设置梯度目标参数为打开(意味着现在确实要给这个算法
% 提供一个梯度),设置最大迭代次数为100次
initialTheta = zeros(2,1); % 初始参数向量
   [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options); % 返回exitFlag = 1 表示已经收敛

3 多类别分类

假设有n个类别,那么将这个n类别分类问题分解称n个二元分类问题,每个子问题中设一个类别为positive class,除此以外都是negative class,如下图

这样就得到了n个二元分类器,

对于待预测的X,用所有二元分类器分别对他求h,判断h最大分类器对应的类别为该X所属的类别。

一条评论

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据