前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习系列笔记(六)

深度学习系列笔记(六)

作者头像
Marigold
发布2022-06-17 14:25:29
5010
发布2022-06-17 14:25:29
举报
文章被收录于专栏:MarigoldMarigold

深度学习系列笔记(六)

目录

Logistic 回归模型
问题引入

我们现在考虑这样一个问题:假设有这样一组数据并对其进行线性回归分析: :::hljs-center

横轴表示肿瘤大小,纵轴表示是否为恶性肿瘤,1表示是恶性,0表示不是恶性。那么根据线性回归分析的结果,我们可以得出这样一个结论:当肿瘤大小小于16的时候,可以认为是良性肿瘤;当肿瘤大小大于等于16的时候,可以认为是恶性肿瘤。假如此时有一个恶性肿瘤样本,其尺寸为200,我们再来看一下线性回归分析的结果:

图中紫色的线为回归分析后良性恶性分界线,可见有恶性肿瘤被分到了良性肿瘤中,这个结果显然是不好的。如果只根据0.5来判断,结果不准确。

sigmoid函数

我们对目标函数进行修改: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=1h_\theta(x)=1时,损失函数的值为0,表示此时肿瘤是恶性的概率为1,当y=1h_\theta(x) \to 0时,损失函数J\to\infty,表示此时y=1概率为0,也就是不可能是恶性肿瘤,符合我们的期望。同样地,我们画出y=0时的图像:

从图中可以看出,当y=0h_\theta(x)=0时,损失函数的值为0,表示此时肿瘤是良性的概率为1,当y=0h_\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编程计算出来的参数如下:

代码语言: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_2\ge0,在图中x_2为因变量,那么将式子整理后得到:x_2\ge -\tfrac{\theta_1}{\theta_2} x_1-\tfrac{\theta_0}{\theta_2},那么只需要画出这条线就可以了,之前一直没明白,把simoid函数也带进去了,这是不对的,sigmoid函数可以用来计算概率值。

多分类

前面所讲内容均为二分类,也就是只有两个类别0或是1,多分类就是具有多个类别(大于2个)的分类问题。

假如现在有上面这样一组数据,我们不关注形状和大小,只关注颜色,那么可以分为三类,那如何建立模型?其实,多分类可以看做是多个伪二分类:

分别实施逻辑回归可以得到三条决策边界,即可进行分类。

参考文献: 《深度学习》、吴恩达《机器学习》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 深度学习系列笔记(六)
  • 目录
    • Logistic 回归模型
      • 问题引入
      • sigmoid函数
      • 决策边界
      • 多分类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档