01 Logistic回归


Logistic回归通常用于处理二类分类问题。本质上它是单层神经网络模型。

1.问题

给出对象的特征向量:x={x1,x2,⋯,xn}x = \left\{ {x_1 ,x_2 , \cdots ,x_n } \right\}x={x1​,x2​,⋯,xn​}
得到一个预测结果:y^=P{y=1∣x}\hat y = P\left\{ {y = 1|x} \right\}y^​=P{y=1∣x}

▲ Logistic回归模型

2. Logistic回归

首先进行线性回归:
z=WT⋅xˉ+bz = W^T \cdot \bar x + bz=WT⋅xˉ+b
然后在使用一个Sigmoid函数得到预测结果:y^=sigmoid(z)=11+e−z\hat y = sigmoid\left( z \right) = {1 \over {1 + e^{ - z} }}y^​=sigmoid(z)=1+e−z1​

▲ Sigmoid函数以及它对应的导数

def sigmoid(x):return 1/(1+exp(-x))def dsigmoid(x):x = sigmoid(x)return x*(1-x)x = linspace(-5, 5, 100)
z = sigmoid(x)
dz = dsigmoid(x)plt.plot(x, z, label='sigmoid')
plt.plot(x, dz, label='derivative')
plt.xlabel("x")
plt.ylabel("sigmoid(x)")
plt.grid(True)
plt.legend(loc='upper right')
plt.tight_layout()
plt.show()

02 简单举例


1.逻辑与

使用Logistic回归来实现逻辑与逻辑:

(1) 与逻辑

x1 x2 y
0 0 0
0 1 0
1 0 0
1 1 1

▲ AND逻辑示意图

(2) Logistic回归

z=w1⋅x1+w2⋅x2+bz = w_1 \cdot x_1 + w_2 \cdot x_2 + bz=w1​⋅x1​+w2​⋅x2​+by^=11+e−z\hat y = {1 \over {1 + e^{ - z} }}y^​=1+e−z1​

定义损失函数:

L(y^,y)=12(y^−y)2L\left( {\hat y,y} \right) = {1 \over 2}\left( {\hat y - y} \right)^2L(y^​,y)=21​(y^​−y)2

那么总的损失函数为:
L(y^,y)=∑i=1412(y^i−yi)2L\left( {\hat y,y} \right) = \sum\limits_{i = 1}^4 {{1 \over 2}\left( {\hat y_i - y_i } \right)^2 }L(y^​,y)=i=1∑4​21​(y^​i​−yi​)2

▲ W1,W2相对的误差曲线

可以看到这个误差相对于W1,W2是一个非凸的误差曲线。

▲ W2,b参数误差平面

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# LOGTEST.PY                   -- by Dr. ZhuoQing 2020-11-17
#
# Note:
#============================================================from headm import *
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cmb=-1
#------------------------------------------------------------
def sigmoid(x):return 1/(1+exp(-x))def error(w1,w2):z00 = bz01 = w1+bz10 = w2+bz11 = w1+w2+by00 = sigmoid(z00)y01 = sigmoid(z01)y10 = sigmoid(z10)y11 = sigmoid(z11)_y00 = 0_y01 = 0_y10 = 0_y11 = 1res = (y00-_y00)**2 +\(y10-_y10)**2 +\(y01-_y01)**2 +\(y11-_y11)**2return res/2.0#------------------------------------------------------------
w1 = arange(-5, 5, 0.1)
w2 = arange(-5, 5, 0.1)
W1,W2 = meshgrid(w1, w2)E = error(W1, W2)ax = plt.axes(projection='3d')
ax.plot_surface(W1, W2, E, cmap='coolwarm')ax.set_xlabel('W1 Axes')
ax.set_ylabel('W2 Axes')
ax.set_zlabel('Error Axes')plt.show()#------------------------------------------------------------
#        END OF FILE : LOGTEST.PY
#============================================================

如果取对数似然损失函数:
L(y^,y)=−[y⋅log⁡(y^)+(1−y)⋅log⁡(1−y^)]L\left( {\hat y,y} \right) = - \left[ {y \cdot \log \left( {\hat y} \right) + \left( {1 - y} \right) \cdot \log \left( {1 - \hat y} \right)} \right]L(y^​,y)=−[y⋅log(y^​)+(1−y)⋅log(1−y^​)]
根据前面定义,总损失函数为:
L(y^,y)=log⁡(1−y^11)L\left( {\hat y,y} \right) = \log \left( {1 - \hat y_{11} } \right)L(y^​,y)=log(1−y^​11​)
L(y^,y)=log⁡(1−11+e−w1−w2−b)L\left( {\hat y,y} \right) = \log \left( {1 - {1 \over {1 + e^{ - w_1 - w_2 - b} }}} \right)L(y^​,y)=log(1−1+e−w1​−w2​−b1​)

对数似然损失函数相对于w1,w2的变化曲面:

▲ 对数似然损失函数

w2,b参数对应的损失误差曲面:

03 线性可分与不可分


使用Logistic回归来进行分类,它只能个解决线性可分的问题。下面对于逻辑和逻辑异或所组成的Logistic回归所对应的参数的误差平面的特点。

1.逻辑与w1,w2的误差曲面

从下面的曲线可以看到,误差曲线的最低值小于0.5,也就是说,如果恢复到逻辑值,这样的误差是可以回归到0的。因此,使用Logistic回归的时候是可以正确的区分逻辑与分类的。

▲ 逻辑与的参数误差曲线

2.逻辑异或的参数误差曲线

下面的曲线则显示的是逻辑异或的关系。可以看到它的最低值仍然是大于0.5的。这也说明该网络无法区分逻辑异或(这是一个非线性可分的问题)的种类的。

▲ 异或逻辑的参数误差曲线

➤※ 结论


为什么在Logistic回归中,对于损失函数不再使用均方差L(y^,y)=12(y^−y)2L\left( {\hat y,y} \right) = {1 \over 2}\left( {\hat y - y} \right)^2L(y^​,y)=21​(y^​−y)2,而使用对数似然函数L(y^,y)=−[y⋅log⁡y^+(1−y)⋅log⁡(1−y^)]L\left( {\hat y,y} \right) = - \left[ {y \cdot \log \hat y + \left( {1 - y} \right) \cdot \log \left( {1 - \hat y} \right)} \right]L(y^​,y)=−[y⋅logy^​+(1−y)⋅log(1−y^​)]

通过逻辑与函数对比了这两种误差相对于参数的变化曲线,可以看到:
使用均方差进行Logistic回归的时候,误差曲线往往是非凸的,而使用对数似然损失函数,参数优化问题往往变成了凸优化。

通过Logistic参数误差曲线也可以分别出该网络是否可以解决相关的分类问题。对于线性可分的问题,使用Logitisc回归是可以区分的。但对于非线性可分的问题,使用Logistic无法解决。

■ 相关文献链接:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# LOGTEST.PY                   -- by Dr. ZhuoQing 2020-11-17
#
# Note:
#============================================================from headm import *
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm#------------------------------------------------------------
def sigmoid(x):return 1/(1+exp(-x))def error(w1,w2,b):z00 = bz01 = w1+bz10 = w2+bz11 = w1+w2+by00 = sigmoid(z00)y01 = sigmoid(z01)y10 = sigmoid(z10)y11 = sigmoid(z11)_y00 = 1_y01 = 0_y10 = 0_y11 = 1#    return log(1-y11)res = (y00-_y00)**2 +\(y10-_y10)**2 +\(y01-_y01)**2 +\(y11-_y11)**2return res/2.0#------------------------------------------------------------
w1 = arange(-10, 10, 0.1)
w2 = arange(-10, 10, 0.1)
W1,W2 = meshgrid(w1, w2)E = error(W1, W2, -5)ax = plt.axes(projection='3d')
ax.plot_surface(W1, W2, E, cmap='coolwarm')ax.set_xlabel('W1 Axes')
ax.set_ylabel('W2 Axes')
ax.set_zlabel('Error Axes')plt.show()#------------------------------------------------------------
#        END OF FILE : LOGTEST.PY
#============================================================

单层神经网络-Logistics回归中误差曲线相关推荐

  1. 深度学习基础--SOFTMAX回归(单层神经网络)

    深度学习基础–SOFTMAX回归(单层神经网络) 最近在阅读一本书籍–Dive-into-DL-Pytorch(动手学深度学习),链接:https://github.com/newmonkey/Div ...

  2. 华南理工深度学习与神经网络期末考试_深度学习基础:单层神经网络之线性回归...

    3.1 线性回归 线性回归输出是一个连续值,因此适用于回归问题.回归问题在实际中很常见,如预测房屋价格.气温.销售额等连续值的问题.与回归问题不同,分类问题中模型的最终输出是一个离散值.我们所说的图像 ...

  3. 译文 | 与TensorFlow的第一次接触 第四章:单层神经网络

    北京 | 深度学习与人工智能研修 12月23-24日 再设经典课程 重温深度学习阅读全文> 正文共7865个字,27张图,预计阅读时间:20分钟. 在前言中,已经提到经常使用深度学习的领域就是模 ...

  4. Logistics回归模型

    二分类资料logistics回归: 因变量为二分类变量的资料(一般为0,1分类),可用非条件logistics回归和条件logistics回归进行分析.非条件logistics回归多用于非配比研究资料 ...

  5. 深度学习PyTorch笔记(12):线性神经网络——softmax回归

    深度学习PyTorch笔记(12):线性神经网络--softmax回归 6 线性神经网络--softmax回归 6.1 softmax回归 6.1.1 概念 6.1.2 softmax运算 6.2 图 ...

  6. 实验五 Logistics回归

    目录 概念 Logistics回归 Sigmoid函数 优缺点 基于最优化方法的最佳回归系数确定 梯度上升法 主要思想 Logistic回归梯度上升优化算法 绘制决策边界 随机梯度上升 改进的随机梯度 ...

  7. 神经网络logistic回归模型,logistic回归的基本理论

    神经网络挖掘模型与logistic回归挖掘模型的不同点有哪些? 逻辑回归有点像线性回归,但是它是当因变量不是数字时使用.比如说因变量是布尔变量(如是/否响应),这时候就需要逻辑回归.它称为回归,但实际 ...

  8. TensorFlow基础8-实现单层神经网络

    记录TensorFlow听课笔记 文章目录 记录TensorFlow听课笔记 一,神经网络的设计 二,实现单层神经网络 一,神经网络的设计 二,实现单层神经网络 导入库 加载数据 数据预处理 设置超参 ...

  9. Logistics回归数据集(testSet.txt)《机器学习实战》【美】Peter Harrington python3.6+pycharm完美实现代码

    若你需要 这个数据集,直接新建一个.txt文件,将这里的数据全部拷贝过去即可,下面为 这本书<机器学习实战>[美]Peter Harrington 第五章 Logistics 回归  使用 ...

最新文章

  1. zen3架构_AMD Zen3架构处理器的L3缓存或将翻倍到64MB
  2. 读大道至简第四章有感
  3. STM8S103f单片机的开发(1)LED灯的点亮
  4. sumif单列求和_求和、单条件求和、多条件求和、隔列求和等实用技巧解读
  5. Windows 错误代码
  6. 郭敏:什么是交通事件?如何做好交通事件管理以降低二次事故发生概率?
  7. 从酷狗的网络红歌说起
  8. PHP面试题狼与兔子,假设一座圆形的山, 山脚分布着N个山洞, 山洞与山洞形成一个圆环,选择其中一个山洞作为起始, 兔子每天前进到l个洞, 狼每天前进到第k个洞 求多少天后, 兔子与狼在一个洞里
  9. 追求神乎其技的程式设计之道(八)
  10. Spark-Spark Streaming(4)-- 部署、监控
  11. Android获取手机屏幕密度
  12. 卷积神经网络和循环神经网络的思想内核是什么
  13. 人生最应该坚持的5件事
  14. 【学渣无能狂怒】今天也是为了学习落泪的一天--每天一遍Java再见
  15. Qt 串口获取串口设备名称
  16. 阿里云大学python_阿里云大学课程python
  17. 如何在自己网站上播放上传到优酷的视频
  18. java对配_[Java教程]对局匹配
  19. 广州大学操作系统实验 2020版 银行家算法
  20. 实验10——卫星网络系统仿真

热门文章

  1. Delphi 的内存操作函数(2): 给数组指针分配内存
  2. WINCE开发中,EBOOT模式下,TFTP方式无法下载NK镜像的问题解决方案
  3. Hive代码组织及架构简单介绍
  4. ubuntu下 mysql数据 自执行备份
  5. linux 修改主机名 修改ip
  6. 在线项目管理工具比较之二:LiquidPlanner
  7. 验证码的三种做法[纯数字][纯汉字][字母\数字\汉字混合]C#
  8. JavaScript编码风格指南
  9. 几个重要的 ASM Disk Groups 参数
  10. CentOS6.X 系统安装图文教程,超详细