几个常见的分类问题:
对于一个常见的二类分类问题,肿瘤问题中,如果我们使用线性回归来拟合肿瘤的分类,
假设此时的直线能够较好的区分肿瘤是否良性。
这个时候,我们增加一个恶性样本,那么这个时候重新拟合数据,将会得到一个新的直线,
我们可以发现重新拟合数据之后的区分线将会偏移,导致一部分数据的判别就会出错,因此,线性回归对于分类问题不是一个好的方法。
逻辑回归
约束输出值在0到1之间,我们使用一个名叫sigmoid的函数,也可叫做logistic 函数,
决策边界
-
线性决策边界
在如下图中的例子中,我们预设一个决策函数,其中,根据分类规则,在这个坐标中我们可以获得一条直线来划分两个类别,因此,我们可以称呼这个直线为决策边界
-
非线性决策边界
在下图中,之前我们知道可以使用高阶多项式添加额外的特征来拟合非线性数据,同样有一个预设决策函数,对于theta的取值后面在讨论,
二、logistic regression model
1.cost function
如何选择theta
对于下列训练集,
我们可以线性规划代价函数为:
但是,在逻辑回归中,我们知道
此逻辑函数是非线性的,因此,如果我们在逻辑回归中如果还是使用线性回归的代价函数形式,那么我们得到新的代价函数如下图左侧坐标,他是一个非凸函数,有很多局部最优解,那么我们就不能使用梯度下降算法得到全局最优解。
因此,我们必须改变代价函数的形式,从而得到一个凸函数,使得梯度下降算法能够很好的起作用。因此,我们使用下图中的逻辑回归代价函数形式,
对于第一种情况,当 y = 1时,
当 y =0时,
总结一下,
这个公式可以用最大似然估计推导
【相关文档】
一下两个文档对于两个函数区别和推导讲的不错,引用一下。
1.公式推导
2.逻辑回归和线性回归代价函数
然后我们使用梯度下降法来寻找全局最优解,那么迭代公式如下;
化简后,如下:
向量化的实现为:
线性回归和逻辑回归梯度下降公式相同,但是不同的是,h(x)是不同的。
2.高级优化算法
在之前,我们只学习了梯度下降算法,这里还有一些其他的优化算法。
对于这些复杂的算法,建议使用现成的运算库,,,太复杂了!
举个例子使用算法,
编写代价函数
% costFunction.m matlab 函数
function [jVal, gradient]= costFunction(theta)
% 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);
end
配置参数选项和运行:
% 设置GradObj梯度目标函数参数为打开on,最大迭代次数为100,
% coursera公开课中100有引号,但是我在matlab中运行出错,因为这是一个值,不能加引号
options = optimset('GradObj','on','MaxIter',100);
% 初始化一个theta
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options)
【相关文档】
三、多类别分类
对于多类区分问题,
多类我们使用一对多或者一对余的方法:
To summarize:
Train a logistic regression classifier hθ(x) for each class to predict the probability that y = i .
To make a prediction on a new x, pick the class that maximizes hθ(x)
【相关文档】
讲的都比我说的详细,参考
- 1.一对多问题