深度学习系列笔记(六)
目录- 深度学习系列笔记(六)
- Logistic 回归模型
- 问题引入
- sigmoid函数
- 决策边界
- 多分类
- Logistic 回归模型
- 问题引入
- sigmoid函数
- 决策边界
- 多分类
Logistic 回归模型
问题引入
我们现在考虑这样一个问题:假设有这样一组数据并对其进行线性回归分析: :::hljs-center
横轴表示肿瘤大小,纵轴表示是否为恶性肿瘤,1表示是恶性,0表示不是恶性。那么根据线性回归分析的结果,我们可以得出这样一个结论:当肿瘤大小小于16的时候,可以认为是良性肿瘤;当肿瘤大小大于等于16的时候,可以认为是恶性肿瘤。假如此时有一个恶性肿瘤样本,其尺寸为200,我们再来看一下线性回归分析的结果:
图中紫色的线为回归分析后良性恶性分界线,可见有恶性肿瘤被分到了良性肿瘤中,这个结果显然是不好的。如果只根据0.5来判断,结果不准确。
sigmoid函数
我们对目标函数进行修改:h_theta(x)=g(Xtheta),其中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=1mid x;theta),那么不是恶性肿瘤的概率就是1-h_theta(x)。我们仍然认为h_theta(x)ge0.5时为恶性肿瘤,也就是当Xthetage0时为恶性肿瘤,相反,当Xthetale0时为良性肿瘤。
将损失函数改写为:J(theta)=tfrac{1}{m}sumlimits_{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时,损失函数Jtoinfty,表示此时y=1概率为0,也就是不可能是恶性肿瘤,符合我们的期望。同样地,我们画出y=0时的图像:
从图中可以看出,当y=0、 h_theta(x)=0时,损失函数的值为0,表示此时肿瘤是良性的概率为1,当y=0、h_theta(x) to 1时,损失函数Jtoinfty,表示此时y=0概率为0,也就是不可能是良性肿瘤,符合我们的期望。
我们将Cost函数整理一下,写成不分段的形式:Cost(h_theta(x),y)=-ylog(h_theta(x))-(1-y)log(1-h_theta(x)),写成矩阵形式为:Cost(h_theta(X),vec{y})=-vec{y}^Tlog(h_theta(X))-(1-vec{y})^Tlog(1-h_theta(X))
则损失函数为:J(theta)=tfrac{1}{m}sumlimits_{i=1}^mbig(-ylog(h_theta(x))-(1-y)log(1-h_theta(x)) big),我们仍然采用梯度下降法:
theta_j:=theta_j-alphatfrac{partial}{partialtheta}J(theta),其中tfrac{partial}{partialtheta}J(theta)=tfrac{1}{m} sumlimits_{i=1}^m(-y(1-h_theta(x)) (1-y)h_theta(x))x_j,向量化:tfrac{partial}{partialtheta}J(theta)=tfrac{1}{m}(-vec{y}^T(1-h_theta(X)) (1-vec{y})^Th_theta(X))X_j。
在使用科学计算工具的时候,会有一些函数能够帮助我们求解一个多变量函数的最小值,例如在Octave中使用fminunc函数。
对于前面所举的例子,使用Octave编程计算出来的参数如下:
代码语言:javascript复制%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_2ge0,在图中x_2为因变量,那么将式子整理后得到:x_2ge -tfrac{theta_1}{theta_2} x_1-tfrac{theta_0}{theta_2},那么只需要画出这条线就可以了,之前一直没明白,把simoid函数也带进去了,这是不对的,sigmoid函数可以用来计算概率值。
多分类
前面所讲内容均为二分类,也就是只有两个类别0或是1,多分类就是具有多个类别(大于2个)的分类问题。
假如现在有上面这样一组数据,我们不关注形状和大小,只关注颜色,那么可以分为三类,那如何建立模型?其实,多分类可以看做是多个伪二分类:
分别实施逻辑回归可以得到三条决策边界,即可进行分类。
参考文献: 《深度学习》、吴恩达《机器学习》