Logistic回归学习笔记

  • Logistic回归学习线路
    • 预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。
    • Logistic回归的函数模型
    • 损失函数、损失最小化架构
      • 对数损失作为损失函数
      • 损失最小化架构
    • 分类函数
      • 最大概率分类函数
      • 阈值分类函数
    • Logistic回归的优化算法
      • 梯度下降
      • 随机梯度下降
      • 小批量梯度下降
      • 坐标下降

Logistic回归学习线路

预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。

推荐B站视频:“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”

信息量(Information)指的是一个事件所包含的信息的多少,通常用以2为底的对数表示。比如说,如果一个事件发生的概率是1/8,那么这个事件的信息量就是log2(1/8)=-3,因为需要三个比特才能表示它。

熵(Entropy)是一个系统或信源中不确定性的度量,也可以理解为信息的平均量。在信息论中,熵越大表示系统或信源越难以预测,因此包含的信息越多。比如说,一堆硬币正反面朝上的情况有很多种可能性,因此它们的熵比一堆已知全是正面朝上的硬币要高。

KL散度(Kullback-Leibler
divergence),又称相对熵,是衡量两个概率分布之间差异的一种方式。KL散度是非负的,并且当且仅当两个分布完全相同时取值为0。

交叉熵(Cross-entropy)是一种用来比较两个概率分布之间差异的方法,它通常用于评估分类模型的性能。与KL散度类似,交叉熵也是非负的,当且仅当两个分布相等时取值为0。

本节知识导图

Logistic回归的函数模型

 逻辑回归是一个分类模型

 它可以用来预测某件事发生是否能够发生。分类问题是生活中最常见的问题:

  • 生活中:比如预测上证指数明天是否会上涨,明天某个地区是否会下雨,西瓜是否熟了

  • 金融领域:某个交易是否涉嫌违规,某个企业是否目前是否违规,在未来一段时间内是否会有违规

  • 互联网:用户是否会购买某件商品,是否会点击某个内容

 对于已知的结果,上面问题的回答只有:0,1 。

 我们以以下的一个二分类为例,对于一个给定的数据集,存在一条直线可以将整个数据集分为两个部分:

 此时,决策边界为w1x1+w2x2+b=0w_{1}x_1+w_2x_2+b=0w1​x1​+w2​x2​+b=0,此时我们很容易将h(x)=w1x1+w2x2+b>0h(x)=w_1x_1+w_2x_2+b>0h(x)=w1​x1​+w2​x2​+b>0的样本设置为1,反之设置为0。但是这其实是一个感知机的决策过程。
 逻辑回归在此基础上还需要在加上一层,找到分类概率与输入变量之间的关系,通过概率来判断类别。
回顾一下线性回归模型:h(x)=wTx+bh(x)=w^Tx+bh(x)=wTx+b在线性模型的基础上加上一个函数ggg,即h(x)=g(wTx+b)h(x)=g(w^Tx+b)h(x)=g(wTx+b)。这个函数就是sigmoid函数,也叫做logistic函数g(z)=11+e−zg(z)=\frac{1}{1+e^{-z}}g(z)=1+e−z1​

它可以将一个线性回归中的结果转化为一个概率值。此时h(x)h(x)h(x)表示的就是某件事发生的概率,我们也可以记为p(Y=1∣x)p(Y=1|x)p(Y=1∣x)
可以看下sigmoid函数的图像:

总结:这样,我们便得到Logistic模型h(x)h(x)h(x)的表达式h(x)=11+e−wTx+bh(x) = \frac{1}{1+e^{-w^Tx+b}}h(x)=1+e−wTx+b1​
:h(xi)h(x_i)h(xi​)的意义在于 样本xix_ixi​的标签为1的概率为h(x)h(x)h(x)

损失函数、损失最小化架构

对数损失作为损失函数

对数损失:l(y,y^)=−∑i=1myilog2y^l(y,\hat{y})=-\sum_{i=1}^my_ilog_2\hat{y}l(y,y^​)=−i=1∑m​yi​log2​y^​

当lll取最小值的时候,模型y^\hat{y}y^​分布最接近真实(理论)模型yiy_iyi​分布

损失最小化架构

因为是二分类问题,所以

将其带入对数损失函数lll
所以二分类的损失最小化架构为:

min−∑[yilog(h(xi))+(1−yi)log(1−h(xi))]min -\sum [y_ilog(h(x_i))+(1-y_i)log(1-h(x_i))]min−∑[yi​log(h(xi​))+(1−yi​)log(1−h(xi​))]

逻辑回归损失函数为什么不用最小二乘法?答案


这就是交叉熵:
−∑[yilog(h(xi))+(1−yi)log(1−h(xi))]-\sum [y_ilog(h(x_i))+(1-y_i)log(1-h(x_i))]−∑[yi​log(h(xi​))+(1−yi​)log(1−h(xi​))]


从概率论、统计学角度来看损失最小化架构(交叉熵):
 在统计学中,假设我们已经有了一组样本(X,Y),为了计算出能够产生这组样本的参数。通常我们会采用最大似然估计的方法(一种常用的参数估计的方法)。使用到最大似然估计的话,我们还要一个假设估计,这里我们就是假设 YYY是服从于伯努利分布的。P(Y=1∣x)=p(x)P(Y=1|x)=p(x)P(Y=1∣x)=p(x)P(Y=0∣x)=1−p(x)P(Y=0|x)=1-p(x)P(Y=0∣x)=1−p(x)由于YYY服从于伯努利分布,我们很容易就有似然函数:L=∏[p(xi)yi][1−p(xi)](1−yi)L=\prod[p(x_i)^{y_i}][1-p(x_i)]^{(1-y_i)}L=∏[p(xi​)yi​][1−p(xi​)](1−yi​)为了求解我们可以两边取对数:
logL=∑[yilog(p(xi))+(1−yi)log(1−p(xi))]logL = \sum [y_ilog(p(x_i))+(1-y_i)log(1-p(x_i))]logL=∑[yi​log(p(xi​))+(1−yi​)log(1−p(xi​))]

最大似然估计其实就是取概率的概率最大的那个概率模型:这么说你可能不懂,换种方式,∏p(h(xi)∣θ)\prod p(h(x_i)|\theta)∏p(h(xi​)∣θ),已有概率模型h(x)h(x)h(x)在现有样本θ\thetaθ的条件下,计算出值越大,越说明h(x)h(x)h(x)最接近理论概率模型

我们一般喜欢取式子的最小值,所以将原式子转化一下
min(−logL)=min−∑[yilog(p(xi))+(1−yi)log(1−p(xi))]min(-logL) =min -\sum [y_ilog(p(x_i))+(1-y_i)log(1-p(x_i))]min(−logL)=min−∑[yi​log(p(xi​))+(1−yi​)log(1−p(xi​))]

这里的p(xi)p(x_i)p(xi​)对应的就是h(xi)h(x_i)h(xi​)

从信息量,熵的角度来看损失最小化架构:

KL散度:当DKL=0D_{KL}=0DKL​=0时,P模型=Q模型,我们追求的就是我们所构建的Q模型(也就是h(x)h(x)h(x))接近真实P模型(这里是样本的理论模型,pi为p_i为pi​为样本)

没错,根据吉布斯不等式,交叉熵≥\geq≥ P系统的熵,所以当我们取交叉熵的最小值时,Q模型越接近真实的理论P模型,又知道,信息量的定义是f:=−log2xf:=-log_2xf:=−log2​x
所以带入原式子,交叉熵为:−∑i=1mpilog2x-\sum_{i=1}^mp_ilog_2x−i=1∑m​pi​log2​x

这也就是对数损失的由来:l(y,y^)=−∑i=1myilog2y^l(y,\hat{y})=-\sum_{i=1}^my_ilog_2\hat{y}l(y,y^​)=−i=1∑m​yi​log2​y^​看老师的课的时候,直接丢给我一个对数损失,然后又直接讲交叉熵,对数损失为啥可以作为损失函数,也没告诉我们。通过上面的知识,读者应该明白这个对数损失怎么来的了吧。继续看下去,你会收获更多。

推荐视频:[“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”]

因为是二分类问题,所以

所以二分类的交叉熵为:

−∑[yilog(p(xi))+(1−yi)log(1−p(xi))]-\sum [y_ilog(p(x_i))+(1-y_i)log(1-p(x_i))]−∑[yi​log(p(xi​))+(1−yi​)log(1−p(xi​))]

这里的p(xi)p(x_i)p(xi​)对应的就是h(xi)h(x_i)h(xi​)

这两个角度的思考:

  • 它们推导出来的式子是一样的,是不是都能叫交叉熵?

    • 不是的,它们只是式子相同,最大似然估计函数推导的时候是因为习惯上将相乘改为相加,所以才出现的logloglog,它的底数可以为任意正数,而且没有单位,而信息量将log2log_2log2​写进了定义里,并且他是有单位的,比特就是它的单位。

分类函数

最大概率分类函数

在一个kkk元分类问题中,给定预测概率模型hhh,即
h(x)=(h1(x),h2(x),...,hk(x))h(x)=(h_1(x),h_2(x),...,h_k(x))h(x)=(h1​(x),h2​(x),...,hk​(x))其中,hi(x)h_i(x)hi​(x)是样本属于第i个类别的概率。
关于模型h的最大概率分类函数为:
MaxProbh(x)=argmaxhi(x)MaxProb_h(x)=argmax h_i(x)MaxProbh​(x)=argmaxhi​(x)

:argmax,取最大值的下标。
这个hi(x)h_i(x)hi​(x)可以理解为,样本标签为hih_ihi​的概率,最大hih_ihi​的作为样本i的标签

阈值分类函数

在一个2元分类问题中,设标签在{0,1}中取值。
给定预测概率模型h,即h(x)表示特征组x的标签为1的概率。
关于模型h的以t为阈值的阈值分类函数为:

其就是,如果真实标签为1,那么就是当预测模型(标签为1)函数值大于某个值的时候,便认为预测标签为1,反正为0

Logistic回归的优化算法

梯度下降

理论部分:我的另一篇文章:搜索算法—学习笔记

achine_learning.logistic_regression.lib.logistic_regression_gd
import numpy as npdef sigmoid(scores):return 1 / (1 + np.exp(-scores))class LogisticRegression:def fit(self, X, y, eta=0.1, N = 1000): #eta ηm, n = X.shapew = np.zeros((n,1))for t in range(N):h = sigmoid(X.dot(w)) #hw(X)g = 1.0 / m * X.T.dot(h - y) #梯度gw = w - eta * g #更新wself.w = wdef predict_proba(self, X):return sigmoid(X.dot(self.w)) # 概率def predict(self, X):proba = self.predict_proba(X) # 概率return (proba >= 0.5).astype(np.int)

交叉熵是一个凸函数吗,可导。

随机梯度下降

理论部分:我的另一篇文章:搜索算法—学习笔记

import numpy as npdef sigmoid(scores):return 1.0 / (1 + np.exp(-scorecs ))class LogisticRegression:def fit(self, X, y, eta_0=10, eta_1=50, N=1000):m, n = X.shapew = np.zeros((n,1))self.w = wfor t in range(N):i = np.random.randint(m) #随机选一个样本 x(i)x = X[i].reshape(1, -1) # 1*n 向量pred = sigmoid(x.dot(w)) # hw(x)g = x.T * (pred - y[i]) # 梯度w = w - eta_0 / (t + eta_1) * g # 更新wself.w += wself.w /= N # w均值def predict_proba(self, X):return sigmoid(X.dot(self.w))def predict(self, X):proba = self.predict_proba(X)return (proba >= 0.5).astype(np.int)

小批量梯度下降

坐标下降

【机器学习】Logistic回归---学习笔记(重新整理)相关推荐

  1. 《机器学习实战》学习笔记(八):预测数值型数据 - 回归

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  2. 《机器学习实战》学习笔记第八章-回归

    目录 线性回归 标准回归 局部加权线性回归 预测鲍鱼的年龄 缩减系数来"理解"数据 岭回归 lasso 前向逐步回归 预测乐高玩具套件的价格 获取数据 线性回归 回归的目的就是预测 ...

  3. 李宏毅深度学习笔记——呕心整理版

    李宏毅深度学习笔记--呕心整理版 闲谈叨叨叨: 之前看过吴恩达的一部分课程,所以有一定理论基础,再看李宏毅的课程会有新的理解.我先以有基础的情况写完学习过程,后续再以零基础的角度补充细节概念(估计不会 ...

  4. 《机器学习实战》学习笔记(七):利用AdaBoost 元算法提高分类性能

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  5. 重修-龙珠计划机器学习训练营task1-part2学习笔记

    文章标题:龙珠计划机器学习训练营task1-part2学习笔记 一.学习知识点概要 利用鸢花数据(iris)进行逻辑回归方法的训练,该数据集一共包含5个变量,其中4个特征变量,1个目标分类变量.共有1 ...

  6. Python3《机器学习实战》学习笔记(二):决策树基础篇之让我们从相亲说起

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 个人网 ...

  7. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例

    ** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...

  8. Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM

    原 Python3<机器学习实战>学习笔记(八):支持向量机原理篇之手撕线性SVM 置顶 2017年09月23日 17:50:18 阅读数:12644 转载请注明作者和出处: https: ...

  9. Python3《机器学习实战》学习笔记(三):决策树实战篇

    转载请注明作者和出处: http://blog.csdn.net/c406495762  运行平台: Windows  Python版本: Python3.x  IDE: Sublime text3 ...

最新文章

  1. PropertiesFactoryBean PropertyPlaceholderConfigurer 区别
  2. 如何用Java制作一个简易日历
  3. 有关计算机组装的书,计算机组装实习报告书.doc
  4. 华中科技大学计算机上机,华中科技大学计算机学院上机复试题目.doc
  5. SpringMVC源码阅读:过滤器
  6. _reincarnation
  7. 6.Boost之smartpointer
  8. 职业高中计算机英语教案,职高英语shopping教学设计.doc
  9. DataGridView中的CheckBox
  10. VMware vSphere 功能特性比较 vsphere 6.5/6.7/7.0
  11. docker教程_2 docker常见命令
  12. 【收藏的JS库】 Javascript常用的库 (包含图片处理、动画库、语音命令库、视觉检测、机器学习等)
  13. 1194. 锦标赛优胜者
  14. 互联网周刊eNet研究院:2018中国数字化转型最佳解决方案TOP100
  15. 华硕支持2003服务器主板,驱动天空 - 品牌主板 - 服务器主板 SERVER - 华硕服务器主板...
  16. 量化人才之战如何取胜
  17. 【雅思大作文考官范文】——第十二篇:'positive or negative' essay
  18. POJ 3067 Japan【树状数组】
  19. python成绩查询系统_Python爬虫实战:登录教务系统查成绩
  20. 基于EP4CE10F17C8N芯片详解Altera Cyclone系列器件命名规则

热门文章

  1. 左手坐标系和右手坐标系
  2. 原生js操作元素类名—classList.add()、classList.remove()、classList.contains()、classList.toggle()
  3. android 点赞爆炸,核心动画 - 点赞爆炸效果
  4. Weex 环境安装小结 1
  5. HFSS学习笔记 13 边界条件(一)
  6. 微信公众号访问提示网络出错
  7. 微信上如何制作投票链接?5分钟快速制作活动链接方法
  8. 电脑问题处理篇:宏基(Acer)笔记本电脑开机显示NO BOOTABLE DEVICE的解决办法
  9. Ubuntu Linux投影的操作
  10. 后端、前端、测试应该怎么选?