如果感觉逻辑跳跃,请先阅读机器学习笔记--线性回归
1、先假设一个要解决的问题
有一组数据集,包含肿瘤的大小和肿瘤类型(恶性/良性),要求根据这组数据集,输入肿瘤大小,输出肿瘤类型和概率。
分析
将数据集可视化如上图,小肿瘤基本上为良性,大肿瘤为恶性,希望换一条线来根据tumor size来区分肿瘤类型,并且找到一个计算概率的方法。
2、寻找一个合适的假设函数
很明显在直线x + θ = 0(x = 肿瘤大小)左边,肿瘤类型为良性,右边为恶性。即x+ θ < 0 时,肿瘤为良性,x+ θ > 0时,肿瘤为恶性。(x+ θ = 0时良性或者恶性我们看心情定义)
剩下概率计算问题了,我们希望曲线左边的x越小恶性肿瘤概率越小,反之曲线右边x越大则肿瘤概率越大,并且直觉上肿瘤大小中肿瘤恶性概率并非线性关系(实际上自然界中的概率分布都不是线性的)。
肿瘤大小与恶性概率的函数曲线形状大致如下:
那么将x + θ 套入概率函数,寻找假设函数的问题就解决了,就是这个思路,其实问题不难。
像这样的分类问题就是逻辑回归,线性回归解决的是假设函数对于数据集的拟合问题,逻辑回归解决分类概率问题。
下面展开来说。
3、寻找更加通用的假设函数
实际上肿瘤是否为恶性还有和其他特性有关,譬如脏器部位、形状等,如果肿瘤有N个特征,分别是x1、x2、x3...xn,那么这条直线可以使用更加通用的方式:θ0 + x1·θ1 + x2·θ2 + x3·θ3 + .... + xn·θn = 0
此时问题就变成了寻找θ0·····θn的最优解,如果把θ0·····θn看做一个向量,x0····xn也看做一个向量(x0=1),则θ0 + x1·θ1 + x2·θ2 + x3·θ3 + .... + xn·θn可以表示为θ(转置)· x。
如果再把概率曲线定义为g(z),套入z得:
上面就是逻辑回归的假设函数。
再具体一些,一般g(z)可以定义为
这个函数曲线的形状符合我们的要求,并且输出变量范围始终在0和1之间:
并且它的导数很容易计算:g(z)的导数 = g(z)·( 1-g(z) )
实际上它也成为sigmoid函数,也叫[Logistic函数],优点是平滑以求导,使用很广泛。
此时假设函数可以更具体的表示为:
我们已经找到了逻辑回归通用假设函数,以终为始,目标是寻找θ0·····θn的最优解。和线性归回一样,先找到损失函数,在对损失函数使用梯度下降算法,老套路。
4、寻找逻辑回归的损失函数
线性回归的代价函数为:
对于线性回归模型,我们定义的损失函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将逻辑回归的假设函数带入到这样定义了的损失函数中时,我们得到的损失函数将是一个非凸函数(non-convexfunction)。
而我们希望损失函数是凸函数(convex),处处可导且只有一个极值点:
我们重新定义逻辑回归的损失函数为:
这里的y是二分类样本中某一组特征对应的具体结果,譬如特征是abcd的肿瘤是恶性。
当结果是1时,损失函数的形状为:
也就是说假设函数为1时损失函数的结果为0,这时假设函数完美拟合这一组数据;而假设函数为0时,损失函数非常大,这就意味着假设函数背离了这一组数据,将接受很大的惩罚,这个惩罚有可能导致此时带入计算的θ丧失竞争最优解的机会。
上面的分段函数我们换一种写法:
解释:当y(i)=1时,只有前半部分;当y(i)=0时,则只有后半部分。
最后我们需要将所有数据样本集合的损失函数结果相加:
最后的问题就简化为求最小损失函数,同线性回归套路一样:
5、使用梯度下降求θ0·····θn的最优解
这里的逻辑同线性回归一样,只不过损失函数不同:
对损失函数求θ偏导:
找到梯度下降最快的方向,迭代θ:
极值点即为θ的最优解。
6、总结
同线性回归一样,逻辑回归的假设函数为:
损失函数为:
使用梯度下降算法:
迭代θ找到样本数据集合的最小损失函数,得到θ最优解。
7、思考
Q:上面肿瘤的例子样本数据分布很容易使用一条直线来划定界限,如果样本数据这样怎么办:
A:把样本正确分类的一条边界,称为决策界限(decision boundaries),决策边界主要有线性决策边界(linear decision boundaries)和非线性决策边界(non-linear decision boundaries),即上面两个图。注意:决策边界是假设函数的属性,由参数决定,而不是由数据集的特征决定。
非线性决策边界的情况我们可以使用高阶多项式来表示,譬如上图决策边界可以表示为一个圆:θ0 + θ1·x1·x1 + θ2·x2·x2 = 0。
高阶多项式可以表达很奇怪的形状,N阶多项式只要N足够大就可以表示的足够精准,但是过大的N也会带来大计算量和过拟合的问题。
Q:上述肿瘤良性/恶性是二分类问题,如果多分类问题可以使用逻辑归回吗,有何差异?
A:利用上述二分类的思路,多分类可以简化为多个二分类。
如上图,使用一个训练集,将其分成 3 个二元分类问题。我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类
型 2 和类型 3 定为负类,类型 1 设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。