我们现在考虑这样一个问题:假设有这样一组数据并对其进行线性回归分析: :::hljs-center
横轴表示肿瘤大小,纵轴表示是否为恶性肿瘤,1表示是恶性,0表示不是恶性。那么根据线性回归分析的结果,我们可以得出这样一个结论:当肿瘤大小小于16的时候,可以认为是良性肿瘤;当肿瘤大小大于等于16的时候,可以认为是恶性肿瘤。假如此时有一个恶性肿瘤样本,其尺寸为200,我们再来看一下线性回归分析的结果:
图中紫色的线为回归分析后良性恶性分界线,可见有恶性肿瘤被分到了良性肿瘤中,这个结果显然是不好的。如果只根据0.5来判断,结果不准确。
我们对目标函数进行修改:h_\theta(x)=g(X\theta),其中g(z)=\tfrac{1}{1+e^{-z}}。g(z) 叫做sigmoid函数,也叫Logistic函数,取值范围为(0,1),它可以将一个实数映射到(0,1)的区间,可以用来做二分类。其函数图像为:
sigmoid函数的导数可以用自身来表示:g(z)'=\tfrac{e^{-z}}{(1+e^{-z})^2}=g(z)(1-g(z))。
我们用h_\theta(x)来表示是恶性肿瘤的概率P(y=1\mid x;\theta),那么不是恶性肿瘤的概率就是1-h_\theta(x)。我们仍然认为h_\theta(x)\ge0.5时为恶性肿瘤,也就是当X\theta\ge0时为恶性肿瘤,相反,当X\theta\le0时为良性肿瘤。
将损失函数改写为:J(\theta)=\tfrac{1}{m}\sum\limits_{i=1}^mCost(h_\theta(x^{(i)}),y^{(i)}),其中Cost(h_\theta(x),y)=\tfrac{1}{2}(h_\theta(x)-y)^2,在线性回归中,因为h_\theta(x)是线性函数,所以该函数是凸函数,很方便使用递归下降,而在logistic回归中,该函数是一个非凸函数,存在很多局部最小值点,使得递归下降时,很难收敛到全局最优值的地方。因此我们定义:
对于y=1,其函数图像如下:
从图中可以看出,当y=1、 h_\theta(x)=1时,损失函数的值为0,表示此时肿瘤是恶性的概率为1,当y=1、h_\theta(x) \to 0时,损失函数J\to\infty,表示此时y=1概率为0,也就是不可能是恶性肿瘤,符合我们的期望。同样地,我们画出y=0时的图像:
从图中可以看出,当y=0、 h_\theta(x)=0时,损失函数的值为0,表示此时肿瘤是良性的概率为1,当y=0、h_\theta(x) \to 1时,损失函数J\to\infty,表示此时y=0概率为0,也就是不可能是良性肿瘤,符合我们的期望。
我们将Cost函数整理一下,写成不分段的形式:Cost(h_\theta(x),y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x)),写成矩阵形式为:Cost(h_\theta(X),\vec{y})=-\vec{y}^T\log(h_\theta(X))-(1-\vec{y})^T\log(1-h_\theta(X))
则损失函数为:J(\theta)=\tfrac{1}{m}\sum\limits_{i=1}^m\big(-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x)) \big),我们仍然采用梯度下降法:
\theta_j:=\theta_j-\alpha\tfrac{\partial}{\partial\theta}J(\theta),其中\tfrac{\partial}{\partial\theta}J(\theta)=\tfrac{1}{m} \sum\limits_{i=1}^m(-y(1-h_\theta(x))+(1-y)h_\theta(x))x_j,向量化:\tfrac{\partial}{\partial\theta}J(\theta)=\tfrac{1}{m}(-\vec{y}^T(1-h_\theta(X))+(1-\vec{y})^Th_\theta(X))X_j。
在使用科学计算工具的时候,会有一些函数能够帮助我们求解一个多变量函数的最小值,例如在Octave中使用fminunc函数。
对于前面所举的例子,使用Octave编程计算出来的参数如下:
%costFunction函数
function [jVal] = costFunction(theta)
x=[1 3;1 4;1 6;1 7;1 12;1 13;1 16;1 17;1 200];
y=[0;0;0;0;1;1;1;1;1];
h=sigmoid(x*theta);
jVal=(-y'*log(h)-(1-y)'*log(1-h))/length(y);
%sigmoid函数
function val=sigmoid(x)
val=1./(1+exp(-x));
我们使用该模型对大小为14的肿瘤进行预测,得到结果如下:
这表明:在该模型下,该肿瘤为恶性肿瘤的概率为0.78。之前线性回归模型下,大小为12对应的肿瘤为良性,而在该模型下是恶性肿瘤概率为0.7078,表现很好。
这是单一特征,我们再来看两个特征的分类效果:
虽然数据比较有规律,但是也是很明显看到被分为了两类,中间蓝色的线叫做决策边界。绘制这个决策边界确实难倒我了,但是仔细理了一下发现我是**。
通俗来说,决策边界就是能把数据按照特征分成不同类别的一条分界线,在上图中就是蓝色这条线。我们计算出参数\theta_0、\theta_1、\theta_2之后,根据前面的分析,如果分为1这一类,那么sigmoid函数的自变量的值就要非负,也就是h_\theta(x)\ge0,代入\theta得到:\theta_0+\theta_1 x_1+\theta_2x_2\ge0,在图中x_2为因变量,那么将式子整理后得到:x_2\ge -\tfrac{\theta_1}{\theta_2} x_1-\tfrac{\theta_0}{\theta_2},那么只需要画出这条线就可以了,之前一直没明白,把simoid函数也带进去了,这是不对的,sigmoid函数可以用来计算概率值。
前面所讲内容均为二分类,也就是只有两个类别0或是1,多分类就是具有多个类别(大于2个)的分类问题。
假如现在有上面这样一组数据,我们不关注形状和大小,只关注颜色,那么可以分为三类,那如何建立模型?其实,多分类可以看做是多个伪二分类:
分别实施逻辑回归可以得到三条决策边界,即可进行分类。
参考文献: 《深度学习》、吴恩达《机器学习》