基于Python的机器学习系列(8):Newton Raphson逻辑回归

        在本篇博文中,我们将探讨一种比传统梯度下降更高效的优化方法——Newton Raphson方法,并学习如何在逻辑回归中应用它。Newton Raphson方法通过利用二阶导数的曲率信息,快速地找到使代价函数最小化的参数。尽管这种方法在处理较小规模的数据集时速度极快,但随着特征数量的增加,它的性能可能会受到影响,因为需要计算矩阵的逆以及二阶导数。

Newton Raphson方法概述

        Newton Raphson方法是一种迭代算法,旨在通过对目标函数的二阶导数进行分析,找到函数的最小值点。与传统的梯度下降算法不同,Newton Raphson方法不仅考虑了一阶导数(斜率),还考虑了二阶导数(曲率),从而能够更快速地收敛到最优解。

实现步骤

        在本次实现中,我们将Newton Raphson方法应用于逻辑回归,具体步骤如下:

  1. 数据准备

    • 添加截距项
    • 将输入矩阵 X、目标向量 y 和权重向量 w 进行正确的形状处理
      • X 的形状为 (m, n),其中 m 是样本数量,n 是特征数量
      • y 的形状为 (m, ),为目标标签
      • w 的形状为 (n, ),为模型参数
    • 划分训练集和测试集
    • 特征缩放以加速收敛
    • 清理缺失数据(如果有)
    • (可选)特征工程
  2. 预测和计算损失

                损失函数采用交叉熵损失:

                其中h 定义为sigmoid函数: 

        3.计算曲率方向

                使用如下公式计算曲率方向:

                其中 H 为二阶导数矩阵(即Hessian矩阵)。

        4.更新参数

                使用如下规则更新参数:

        5.迭代

                迭代执行步骤2-4,直到达到最大迭代次数 max_iter,或新旧损失之间的差异小于预定义的阈值。

数据准备

        首先,我们需要生成并处理数据,包括添加截距项、特征缩放等。以下代码展示了这一过程:

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 生成数据集
X, y = make_classification(n_samples=500, n_features=5, n_redundant=1, n_informative=4,n_clusters_per_class=2, random_state=14)
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y,s=25, edgecolor='k')# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 添加截距项
intercept = np.ones((X_train.shape[0], 1))
X_train   = np.concatenate((intercept, X_train), axis=1)
intercept = np.ones((X_test.shape[0], 1))
X_test    = np.concatenate((intercept, X_test), axis=1)

Newton Raphson算法实现

        在实现Newton Raphson算法时,我们需要计算梯度和Hessian矩阵,并使用这些信息来更新权重向量。以下代码展示了这一过程:

def newton(X, y, max_iter=1000):w = np.zeros(X.shape[1])l_rate = 0.01batch_size = int(0.1 * X.shape[0])for i in range(max_iter):ix = np.random.randint(0, X.shape[0])batch_X = X[ix:ix+batch_size]batch_y = y[ix:ix+batch_size]cost, second, first = newton_curve(batch_X, batch_y, w)if i % 500 == 0:print(f"Cost at iteration {i}", cost)H_inverse = np.linalg.pinv(second)w = w - l_rate * H_inverse @ firstreturn w, idef newton_curve(X, y, w):m = X.shape[0]h = h_theta(X, w)error = h - ycost = -(np.sum(-y * np.log(h) - (1 - y) * np.log(1 - h)))first = (1/m) * np.dot(X.T, error)second = X.T @ np.diag((h) * (1-h)) @ Xreturn cost, second, firstdef sigmoid(x):return 1 / (1 + np.exp(-x))def h_theta(X, w):return sigmoid(X @ w)def output(pred):return np.round(pred)w, i = newton(X_train, y_train, max_iter=5000)

计算准确率

        接下来,我们使用训练好的模型对测试集进行预测,并计算模型的准确率:

from sklearn.metrics import accuracy_score
yhat = output(h_theta(X_test, w))
accuracy_score(y_test, yhat)

结语

        在这一系列文章中,我们先介绍了二元逻辑回归,接着扩展到多元逻辑回归,最后讨论了Newton-Raphson方法的逻辑回归。每种方法都有其独特的应用场景和优势。

  1. 二元逻辑回归:适用于只有两个类别的分类问题。通过对数几率(logit)函数的应用,我们可以将线性回归扩展到分类任务中。这个方法简单而有效,是大多数分类问题的基础。

  2. 多元逻辑回归:当问题有多个类别时,多元逻辑回归则是首选。它通过使用softmax函数来处理多类别分类问题,是二元逻辑回归的自然扩展。

  3. Newton-Raphson方法的逻辑回归:相比于传统的梯度下降法,Newton-Raphson方法提供了一种通过二阶导数(Hessian矩阵)来快速收敛的方法。虽然在特征数量较少时表现优异,但其在特征数量较多时由于需要计算Hessian矩阵的逆,可能会导致计算开销过大。

        每种方法在不同的场景下都有其独特的优势和局限性。了解并合理选择这些方法,可以帮助我们更好地解决分类问题。

        敬请期待下一篇博文:基于Python的机器学习系列(8):朴素贝叶斯 - 高斯模型。

如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!

欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

谢谢大家的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端项目重新打包部署后如何通知用户更新

前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后如何通知用户更新常用的webSocket解决方案纯前端方案路由拦截多线程main.ts中 创建多线程多线程逻辑处理 前端项目重新打包部署后如何通知用户更新 前端项目重新打包部署后,由于用户没及时更新页面&…

什么是OpenTiny?

OpenTiny 是一套企业级的 Web 前端开发解决方案,提供跨端、跨框架的 UI 组件库和低代码引擎,帮助开发者高效构建 Web 应用 。企业运用开发中,可以利用 OpenTiny 的以下核心组件和优势: TinyVue 组件库:一个丰富的组件库…

python初级爬虫实战:我是怎么用python下载音乐的

今天分享的内容是如何使用python下载歌曲和歌词信息,文章涉及内容主要为了帮助大家学习python技能,请大家合规合理使用。 如果你正在学习Python爬虫,但是找不到方向的话可以试试我这一份学习方法和籽料呀!点击 领取(不…

汽车IVI中控OS Linux driver开发实操(二十四):I2C设备驱动的编写

概述: 在Linux驱动中I2C系统中主要包含以下几个成员: I2C adapter(即I2C适配器,用来控制各种I2C从设备,其驱动需要完成对适配器的完整描述,最主要的工作是需要完成i2c_algorithm结构体。这个结构体包含了此I2C控制器的数据传输具体实现,以及对外上报此设备所支持的功…

0.91寸OLED迷你音频频谱

一、简介 音频频谱在最小0.91寸OLED 屏幕上显示,小巧玲珑 二、应用场景 本模块为音频频谱显示模块,用来获取声音频谱并展示频谱,跟随音乐声音律动 三、产品概述 基于主控芯片设计的将声音采集分析频谱,显示到0.91寸OLED的功能…

我们如何将数据输入到神经网络中?

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 下面我拿识别美女的例子来给大家介绍如何将美女的图片数据输入到神经网络中。 此例中,待输入的数据是一张图像。为了存储图像…

Java中String类的经典问题、错误认知以及归纳总结

在学习过程中对String类的理解反复刷新,以此文记之,做归纳总结,也适合新手避坑。 以实用性考虑,环境为Java 8 以及 之后版本。 String类相比其它类特殊的地方在于有一个字符串常量池(StringTable),里面存着字面量的引…

Hackademic.RTB1靶场实战【超详细】

靶机下载链接:https://download.vulnhub.com/hackademic/Hackademic.RTB1.zip 一、主机探测和端口扫描 nmap 192.168.121.0/24 ip:192.168.121.196 端口:22、80 二、访问80端口 发现target可点击 点击后跳转,页面提示目标是读取到 key.txt 文件 fin…

Enhancing Octree-Based Context Models for Point Cloud Geometry Compression 论文笔记

1. 论文基本信息 发布于: IEEE SPL 2024 2. 创新点 分析了基于 one-hot 编码的交叉熵损失函数为什么不能准确衡量标签与预测概率分布之间的差异。介绍了 ACNP 模块,该模块通过预测占用的子节点数量来增强上下文模型的表现。实验证明了ACNP模块在基于八…

【Java】 力扣 最大子数组和

目录 题目链接题目描述思路代码 题目链接 53.最大子数组和 题目描述 思路 动态规划解析: 状态定义: 设动态规划列表 dp ,dp[i] 代表以元素 nums[i] 为结尾的连续子数组最大和。 为何定义最大和 dp[i] 中必须包含元素 nums[i] :…

前端css动画缩放transform: scale()

transform: scale(2) scale等比例放大 大于1是放大 小于1是缩小 负值是倒着放大 scaleX scaleY 可以单独设置只在x轴y轴放大 改变中心点放大的位置 左上 left top 左下 left bottom 左中 left center 右上 …

Python之列表的基本使用

列表 一、什么是列表二、创建 Python 列表三、二维列表四、索引和切片五、运算符六、列表的函数(1)len(列表名)(2)min(列表名)(3)max(列表名)(4)s…

探索顶级PDF水印API:PDFBlocks(2024年更新)

引言 在一个敏感信息常常面临风险的时代,能够轻松高效地保护文档的能力至关重要。PDF水印已成为企业和个人寻求保护其知识产权、确保文件保密性的基本工具。 PDFBlocks 文字水印 API是什么? PDFBlocks API 提供了一个强大的解决方案,用于在…

如何使用博达网站群管理平台的树状导航

1 介绍 由于网站建设需要,需在首页的左边竖栏部分使用树状导航。我又过了一遍《网站群管理平台用户手册》,没发现如何在网站的首页设置树状导航组件。昨天,我之所以在创建树状导航上不知所措,是因为平台本身有一些误导&#xff0…

如何用Java SpringBoot+Vue搭建校内跑腿业务系统?实战教程解析

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

ASM实例的SPILE 存储在ASM的磁盘组上时,集群要如何去获取SPFILE并启动ASM实例?(1)

从11g R2 开始,ASM spfile 会自动存储在安装集群软件时创建的第一个磁盘组中,一般为OCR磁盘组。由于投票盘/OCR 存储在 ASM 上,因此需要在节点上启动 ASM。要启动 ASM,需要其 SPFILE 。但 SPFILE 仅位于 ASM 磁盘组上。集群是如何…

【html+css 绚丽Loading】 - 000009 五行逆流珠

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

[000-01-018].第3节:Linux环境下ElasticSearch环境搭建

我的后端学习笔记大纲 我的ElasticSearch学习大纲 1.Linux系统搭建ES环境: 1.1.单机版: a.安装ES-7.8版本 1.下载ES: 2.上传与解压:将下载的tar包上传到服务器software目录下,然后解压缩:tar -zxvf elasticsearch-7…

Excel求和方法之

一 SUM(),选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后,按下Alt键和键(即Alt)

深度学习------------------卷积神经网络(LeNet)

目录 LeNet网络手写的数字识别MNIST总结卷积神经网络(LeNet) 问题 LeNet网络 手写的数字识别 MNIST ①输入的是:3232的image ②放到一个55的卷积层里面(为什么是5?因为32-x128,∴x5)&#xff0c…