【机器学习】逻辑回归

2023-11-07

1 逻辑回归基础理论

逻辑回归(Logistic regression)又叫对数几率回归,是一个分类模型。主要进行二分类。在线性回归的基础上进行一个sigmoid变换,于是得到逻辑回归模型。逻辑回归输出值在(0,1) 之间,直观含义是y=1的概率。

逻辑回归假设数据服从伯努利分布,通过极大似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。

1.1 公式

y = 1 1 + e − ( θ T X + b ) y = \frac{1}{1+e^{-(\theta^TX+b)}} y=1+e(θTX+b)1
也可以写成:
l n y 1 − y = θ T X + b ln\frac{y}{1-y} = \theta^TX +b ln1yy=θTX+b
从上式可以看出,逻辑回归实际是用线性回归拟合真实标签的对数几率。
 
 

1.2 sigmoid函数

理想的二分类函数为阶跃函数,然而其不连续,于是找到一定程度上近似单位阶跃函数的替代函数,并希望它单调可微。
g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1
sigmoid函数
sigmoid函数的特点是

  1. 取值永远在0,1之间
  2. 输出值在z=0附近变化陡峭,远离0时变化平缓

 

1.3 逻辑回归的优缺点和适用数据

优点:模型简单简单,可解释性强。计算速度快,存储资源底。对线性关系拟合效果好。
缺点:容易欠拟合,分类精度可能不高。因为本质是线性分类器,无法应对较为复杂的数据。
适用数据:数值型和标称型数据。
 

1.4 损失函数

虽然逻辑回归源于线性回归,但是并不会用线性回归的MSE作为损失函数,因为如果使用MSE的话得到的是一个非凸函数(non-convexfunction),这将影响梯度下降算法寻找全局最小值。

逻辑回归的参数估计方法为极大似然法(maximum likelihood method),即令每个样本属于其真实标签的概率越大越好。
m个样本服从伯努利分布,其概率密度函数为:
p ( y ∣ x , θ ) = h θ ( x ) y ( 1 − h θ ( x ) ) 1 − y p(y|x,\theta)=h_\theta(x)^y(1-h_\theta(x))^{1-y} p(yx,θ)=hθ(x)y(1hθ(x))1y
极大似然即为求联合概率密度最大值:

L ( θ ) = ∏ i = 1 m p ( y i ∣ x i , θ ) L(\theta)=\prod_{i=1}^m p(y_i|x_i,\theta) L(θ)=i=1mp(yixi,θ)

负对数似然函数即为损失函数,表达式为:
J ( θ ) = − 1 m ∑ i = 0 m ( y i ∗ l o g ( h θ ( x i ) ) + ( 1 − y i ) ∗ l o g ( 1 − h θ ( x i ) ) ) J(\theta) = - \frac{1}{m}\sum_{i=0}^m (y_i *log(h_\theta(x_i))+ (1-y_i) *log(1-h_\theta(x_i))) J(θ)=m1i=0m(yilog(hθ(xi))+(1yi)log(1hθ(xi)))
其中,m表示样本数, y i y_i yi是真实标签, h θ ( x i ) h_\theta(x_i) hθ(xi)是基于参数θ的预测值。

该损失函数的优化方法最常见的有梯度下降法,坐标轴下降法,等牛顿法·等。
梯度下降算法为:

Repeat : { θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j := \theta_j -\alpha\frac{\partial}{\partial \theta_j}J(\theta) θj:=θjαθjJ(θ)} ( θ \theta θ所有分量同时更新)

 

1.5 偏导数的推导

( y i ∗ l o g ( h θ ( x i ) ) + ( 1 − y i ∗ l o g ( 1 − h θ ( x i ) ) (y_i *log(h_\theta(x_i))+ (1-y_i *log(1-h_\theta(x_i)) (yilog(hθ(xi))+(1yilog(1hθ(xi))

= y i ( l o g h θ ( x i ) 1 − h θ ( x i ) ) + l o g ( 1 − h θ ( x i ) =y_i(log\frac{h_\theta(x_i)}{1-h_\theta(x_i)}) +log(1-h_\theta(x_i) =yi(log1hθ(xi)hθ(xi))+log(1hθ(xi)

其中: h θ ( x i ) = 1 1 + e − θ T x i h_\theta(x_i) = \frac{1}{1+e^{-\theta^Tx_i}} hθ(xi)=1+eθTxi1

因此: y i ( l o g h θ ( x i ) 1 − h θ ( x i ) ) + l o g ( 1 − h θ ( x i ) ) y_i(log\frac{h_\theta(x_i)}{1-h_\theta(x_i)}) +log(1-h_\theta(x_i)) yi(log1hθ(xi)hθ(xi))+log(1hθ(xi))

= y i ∗ l o g 1 e − θ T x i + l o g e − θ T x i 1 + e − θ T x i = y_i*log\frac{1}{e^{-\theta^Tx_i}} +log\frac{e^{-\theta^Tx_i}}{1+e^{-\theta^Tx_i}} =yilogeθTxi1+log1+eθTxieθTxi

= y i ∗ θ T x i − log ⁡ ( 1 + e θ T x i ) =y_i*\theta^{T}x_i - \log(1+e^{\theta^Tx_i}) =yiθTxilog(1+eθTxi)

所以

∂ J ( θ ) ∂ θ = ∂ ∂ θ ( − 1 m ∑ i = 0 m ( y i ∗ l o g ( h θ ( x i ) ) + ( 1 − y i ∗ l o g ( 1 − h θ ( x i ) ) ) ) \frac{\partial J(\theta)}{\partial \theta}= \frac{\partial}{\partial \theta}( - \frac{1}{m}\sum_{i=0}^m (y_i *log(h_\theta(x_i))+ (1-y_i *log(1-h_\theta(x_i)))) θJ(θ)=θ(m1i=0m(yilog(hθ(xi))+(1yilog(1hθ(xi))))

= ∂ ∂ θ ( − 1 m ∑ i = 0 m ( y i ∗ θ T x i − log ⁡ ( 1 + e θ T x i ) ) ) = \frac{\partial}{\partial \theta} (-\frac{1}{m}\sum_{i=0}^{m}(y_i*\theta^{T}x_i - \log(1+e^{\theta^Tx_i}))) =θ(m1i=0m(yiθTxilog(1+eθTxi)))

= − 1 m ∑ i = 0 m ( y i ∗ x − 1 1 + e θ T x i ∗ e θ T x i ∗ x i ) = -\frac{1}{m}\sum_{i=0}^{m}(y_i*x -\frac{1}{1+e^{\theta^Tx_i}}*e^{\theta^Tx_i}*x_i) =m1i=0m(yix1+eθTxi1eθTxixi)

= − 1 m ∑ i = 0 m ( x i ( y i − h θ ( x i ) ) =-\frac{1}{m}\sum_{i=0}^{m}(x_i(y_i-h_\theta(x_i)) =m1i=0m(xi(yihθ(xi))

= 1 m ∑ i = 0 m ( x i ( h θ ( x i ) − y i ) ) =\frac{1}{m}\sum_{i=0}^{m}(x_i(h_\theta(x_i)-y_i)) =m1i=0m(xi(hθ(xi)yi))

对于 θ \theta θ的分量 θ j \theta_j θj 则有:

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 0 m ( x i j ( h θ ( x i ) − y i ) ) \frac{\partial J(\theta)}{\partial \theta_j} =\frac{1}{m}\sum_{i=0}^{m}(x_{ij}(h_\theta(x_i)-y_i)) θjJ(θ)=m1i=0m(xij(hθ(xi)yi))

 

1.6 正则化

正则化的目的是防止模型过拟合。主要包括L1正则化和L2正则化。
L1为模型添加先验知识: θ \theta θ 服从零均值拉普拉斯分布。
L2为模型添加先验知识: θ \theta θ 服从零均值正态分布。
L1正则会将参数压缩到0,L2则不会,但也会接近于0。因此,加入正则项可实现特征选择。
J ( θ ) L 1 = J ( θ ) + 1 2 b 2 ∑ j ∣ θ j ∣ J(\theta)_{L1} = J(\theta) +\frac{1}{2b^2}\sum_j|\theta_j| J(θ)L1=J(θ)+2b21jθj
J ( θ ) L 2 = J ( θ ) + 1 2 σ 2 θ T θ J(\theta)_{L2} = J(\theta) + \frac{1}{2\sigma^2}\theta^T\theta J(θ)L2=J(θ)+2σ21θTθ

1.7 逻辑回归的多分类方法

逻辑回归也可以处理多分类问题,常用方法是使用一对多 (one-vs-all) 的分类算法。具体方法是:
设有3个类别,y=1,y=2,y=3。
首先,以y=1作为正类,y=2 和y=3作为负类,建立二元逻辑回归模型。
而后,以y=2作为正类,y=1 和y=3作为负类,建立二元逻辑回归模型。
最后,以y=3作为正类,y=1 和y=2作为负类,建立二元逻辑回归模型。
一共建立3个模型。
对于每一个样本,都选择输出概率最大的的类别作为分类结果。

另一种算法为OvO。推导如下:
已知对于二分类,有:
l n P ( y = 1 ∣ x , θ ) P ( y = 0 ∣ x , θ ) = x θ ln\frac{P(y=1|x,\theta)}{P(y=0|x,\theta)} = x\theta lnP(y=0∣x,θ)P(y=1∣x,θ)=xθ
若为K元分类,则有:

l n P ( y = 1 ∣ x , θ ) P ( y = K ∣ x , θ ) = x θ 1 ln\frac{P(y=1|x,\theta)}{P(y=K|x,\theta)} = x\theta_1 lnP(y=Kx,θ)P(y=1∣x,θ)=xθ1

l n P ( y = 2 ∣ x , θ ) P ( y = K ∣ x , θ ) = x θ 2 ln\frac{P(y=2|x,\theta)}{P(y=K|x,\theta)} = x\theta_2 lnP(y=Kx,θ)P(y=2∣x,θ)=xθ2

l n P ( y = 3 ∣ x , θ ) P ( y = K ∣ x , θ ) = x θ 3 ln\frac{P(y=3|x,\theta)}{P(y=K|x,\theta)} = x\theta_3 lnP(y=Kx,θ)P(y=3∣x,θ)=xθ3


l n P ( y = K − 1 ∣ x , θ ) P ( y = K ∣ x , θ ) = x θ K − 1 ln\frac{P(y=K-1|x,\theta)}{P(y=K|x,\theta)} = x\theta_{K-1} lnP(y=Kx,θ)P(y=K1∣x,θ)=xθK1

并且有:

∑ k = 1 K P ( y = k ∣ x , θ ) = 1 \sum_{k=1}^KP(y=k|x,\theta) =1 k=1KP(y=kx,θ)=1

可得:
P ( y = k ∣ x , θ ) = e x θ k 1 + ∑ t = 1 K − 1 e x θ t , k = 1 , 2 , 3... K − 1 P(y=k|x,\theta) = \frac{e^{x\theta_k}}{1+\sum_{t=1}^{K-1}e^{x\theta_t}}, k=1,2,3...K-1 P(y=kx,θ)=1+t=1K1exθtexθk,k=1,2,3...K1
P ( y = K ∣ x , θ ) = 1 1 + ∑ t = 1 K − 1 e x θ t P(y=K|x,\theta) = \frac{1}{1+\sum_{t=1}^{K-1}e^{x\theta_t}} P(y=Kx,θ)=1+t=1K1exθt1

 
 

2. 基础版python代码

def sigmoid(inX):
    return 1.0/(1+exp(-inX))

def gradDescent(dataMatIn, classLabels):
    dataMatrix = mat(dataMatIn)             #convert to NumPy matrix
    labelMat = mat(classLabels).transpose() #convert to NumPy matrix
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1))
    for k in range(maxCycles):              #heavy on matrix operations
        h = sigmoid(dataMatrix*weights)     #matrix mult
        error = (labelMat - h)              #vector subtraction
        weights = weights - alpha * dataMatrix.transpose()* error #matrix mult
    return weights

代码源自《机器学习实战》

 
 

3. sklearn中的逻辑回归

##  基础函数库
import numpy as np 
## 导入逻辑回归模型函数
from sklearn.linear_model import LogisticRegression

# 实例化,训练数据
lr_clf = LogisticRegression()
lr_clf = lr_clf.fit(x_train, y_train)

lr_clf.coef_  # 查看系数theta
lr_clf.intercept_ # 查看截距

lr_clf.predict_proba(x_test) # 预测概率
lr.predict(x_test) # 预测分类结果

# 模型评估
from sklearn import metrics

# 准确度指标
metrics.accuracy_score(y_test,test_predict)
# 混淆矩阵
confusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)

 
 
 

reference
Andrew NG. Logistic Regression Classification
《机器学习》 周志华版
https://zhuanlan.zhihu.com/p/74874291
https://www.cnblogs.com/pinard/p/6029432.html

《机器学习实战》 Peter Harrington
https://blog.csdn.net/weixin_39910711/article/details/81607386

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【机器学习】逻辑回归 的相关文章

随机推荐

  • 架构师日记-深入理解软件设计模式

    作者 京东零售 刘慧卿 一 设计模式与编程语言 1 1 什么是设计模式 设计模式 Design pattern 由软件开发人员在软件开发中面临常见问题的解决方案 是经过长时间的试验积累总结出来的 它使设计更加灵活和优雅 复用性更好 从实用的
  • vue2里设置input光标位置

    人狠话不多 直接上业务需求 垃圾需求 凑合看 我的业务是在企微应用里 图片识别 然后点客户姓名 手机号 输入框 识别的结果可以点击回填到输入框内 这里思考回填的情况 1 可能是 直接输入 然后点下面识别的字回填 输入框是空的 直接点一个字拼
  • 【小甲鱼C语言】课后笔记第一章第一节——打印(printf)

    目录 1 打印 就是 输出 的意思 2 使用 GCC 编译程序 gcc 源代码 o 可执行文件 3 printf 是格式化输出函数 a 函数概要 b 函数原型 c 参数分析 d 返回值 e 演示 4 转义字符 5 反斜杠的奥义 6 课后习题
  • Qt自定义标题栏-移动窗口

    前情提要 众所周知 一个最简单的窗口也是有标题栏的 Windows默认提供的标题栏上有 图标 窗口标题 Min Max Close按钮 但是 这未免太过局限 高自由度的自定义是极客 Geek 精神不可或缺的一部分 如果你想在标题栏上增加 减
  • spring.jpa.hibernate.ddl-auto的配置

    spring jpa hibernate ddl auto 可以显式设置 spring jpa hibernate ddl auto 标准的Hibernate属性值有 none validate update create create d
  • mysql之 mysql 5.6不停机双主一从搭建(活跃双主一从基于日志点复制)

    环境说明 版本 version 5 6 25 log 主1库ip 10 219 24 25主2库ip 10 219 24 22从1库ip 10 219 24 26os 版本 centos 6 7已安装热备软件 xtrabackup 防火墙已
  • A template class for binding C++ to Lua

    A template class for binding C to Lua 标签 classc bindingconstructorluafunction 2006 09 09 15 50 1397人阅读 评论 0 收藏 举报 目录 htt
  • OpenMMLab-AI实战营第二期-人体关键点检测与MMPose

    人体关键点检测与MMPose 课程链接 https www bilibili com video BV1kk4y1L7Xb 这个课程的大致内容是介绍如何从给定的二维影像中恢复出人体的姿态 2D或者3D 大纲如下所示 基本上可以认为流程是 先
  • hadoop的DFSOutputStream

    当我们用命令 hadoop fs copyFromLocal localfile hdfs 将本地文件复制到HDFS时 其背后的复制过程是怎样的 本地文件通过什么方式传输到datanode上的呢 这里面很显然的是 1 文件在多个电脑之间进行
  • 基于clickhouse做用户画像,标签圈选

    clickhouse在做用户画像标签时 怎么去做圈选 表结构应该是怎么样的 我们应该怎么去处理 能够使其高性能的圈选 尽可能缩小其占用的存储空间 这个问题 我通过代码给大家做下的演示 先在hive中对数据预处理 最初表结构 create t
  • python/pta 7-42 纵横

    7 42 纵横 莫大侠练成纵横剑法 走上了杀怪路 每次仅出一招 这次 他遇到了一个正方形区域 由n n个格子构成 每个格子 行号 列号都从1开始编号 中有若干个怪 莫大侠施展幻影步 抢占了一个格子 使出绝招 横扫四方 就把他上 下 左 右四
  • 眼底图像血管增强与分割--(4)基于自适应对比度增强算法实现

    在 http blog csdn net piaoxuezhong article details 78385517 中介绍的自适应对比度增强算法 其基本原理是将图像分为低频背景和高频细节两部分 算法选择高频部分进行增益放大 这样就增强了细
  • 修复“net::err_cert_authority_invalid”错误

    1 背景 在请求接口时接口报错net err cert authority invalid 当您的浏览器无法验证您网站的SSL证书的有效性时 就会出现此问题 如果您尚未设置证书或为您的网站使用HTTP 不推荐 则不应遇到此错误 2 解决办法
  • 利用Python子进程关闭Excel自动化过程出现的弹窗

    利用Python进行Excel自动化操作的过程中 尤其是涉及VBA时 可能遇到消息框 弹窗 MsgBox 此时需要人为响应 否则代码卡死直至超时 1 2 根本的解决方法是VBA代码中不要出现类似弹窗 但有时我们无权修改被操作的Excel文件
  • python多线程编程: 使用互斥锁同步线程

    由于每个线程互相独立 相互之间没有任何关系 你干你的 我干我的 互相不干扰 如果要几个线程同时干一件事怎么办 由于互相不走动 如果一个线程已经做过了 另一个线程再去做 不就重复了吗 很容易乱套 现在假设这样一个例子 有一个全局的计数num
  • 如何在windows使用valgrind_如何在windows下使用f2py

    什么是f2py f2py是一个将fortran或者c程序转化成python可以调用的库的工具 它几乎和numpy同时出现 使用也相对比较方便 因此一直在numpy包中 在早期 f2py起到的作用类似于numba 你可以将程序的主要逻辑交给p
  • 从在线字典网站获取词汇释义:一个Python爬虫实战案例

    目录 目录 1 准备工作 2 分析网页结构 3 编写爬虫 4 提取单词信息 5 输出结果
  • css 渐变实现loading

    div class loading div
  • 基于FPGA的MCP4725驱动程序

    基于FPGA的MCP4725驱动程序 芯片资料 MCP4725是低功耗 高精度 单通道的12位缓冲电压输出数模转换器 Digital to Analog Convertor DAC 具有非易失性存储器 EEPROM 用户可以使用I2C接口命
  • 【机器学习】逻辑回归

    1 逻辑回归基础理论 逻辑回归 Logistic regression 又叫对数几率回归 是一个分类模型 主要进行二分类 在线性回归的基础上进行一个sigmoid变换 于是得到逻辑回归模型 逻辑回归输出值在 0 1 之间 直观含义是y 1的