【机器学习】—逻辑回归

逻辑回归实现详解

介绍

逻辑回归(Logistic Regression)是一种广泛应用于分类问题的统计模型,尤其适用于二分类问题。本文将通过一个简单的例子,使用Python和PyTorch库实现逻辑回归,并通过可视化展示模型的训练过程和最终结果。

环境准备

在开始之前,确保已经安装了以下库:

  • numpy
  • matplotlib
  • torch
  • sklearn
    可以使用以下命令安装这些库:
pip install numpy matplotlib torch scikit-learn

代码实现

数据生成

我们使用sklearn.datasets.make_blobs函数生成二分类数据集。该函数可以生成具有指定中心和标准差的高斯分布数据点。

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import torch
import numpy as np
# 使用make_blobs随机生成n个样本
x, y = make_blobs(n_samples=200, centers=2, random_state=0, cluster_std=0.5)
x1 = x[:, 0]
x2 = x[:, 1]
# 可视化数据
plt.scatter(x1[y == 1], x2[y == 1], color='blue', marker='o')
plt.scatter(x1[y == 0], x2[y == 0], color='red', marker='x')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Generated Data')
plt.show()

模型定义

逻辑回归模型的基本形式为:
h ( θ ) = σ ( θ 0 + θ 1 x 1 + θ 2 x 2 ) h(\theta) = \sigma(\theta_0 + \theta_1 x_1 + \theta_2 x_2) h(θ)=σ(θ0+θ1x1+θ2x2)
其中, σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1 是sigmoid函数。

def hypothesis(theta0, theta1, theta2, x1, x2):z = theta0 + theta1 * x1 + theta2 * x2h = torch.sigmoid(z)return h.view(-1, 1)

损失函数

逻辑回归的损失函数通常使用对数损失函数(Log Loss):
J ( h , y ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( i ) ) ] J(h, y) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h^{(i)}) + (1 - y^{(i)}) \log(1 - h^{(i)}) \right] J(h,y)=m1i=1m[y(i)log(h(i))+(1y(i))log(1h(i))]

def J(h, y):return -torch.mean(y * torch.log(h) + (1 - y) * torch.log(1 - h))

模型训练

我们使用PyTorch的Adam优化器来训练模型。训练过程中,我们不断更新模型参数以最小化损失函数。

if __name__ == '__main__':# 数据准备x1 = torch.tensor(x1, dtype=torch.float32)x2 = torch.tensor(x2, dtype=torch.float32)y = torch.tensor(y, dtype=torch.float32).view(-1, 1)# 初始化参数theta0 = torch.tensor(0.0, requires_grad=True)theta1 = torch.tensor(0.0, requires_grad=True)theta2 = torch.tensor(0.0, requires_grad=True)# 优化器optimizer = torch.optim.Adam([theta0, theta1, theta2])# 训练模型for epoch in range(10000):h = hypothesis(theta0, theta1, theta2, x1, x2)loss = J(h, y)loss.backward()optimizer.step()optimizer.zero_grad()if epoch % 1000 == 0:print(f'After {epoch} epochs, the loss is {loss.item():.3f}')# 获取训练后的参数w1 = theta1.item()w2 = theta2.item()b = theta0.item()# 可视化决策边界x = np.linspace(-1, 6, 100)d = -(w1 * x + b) * 1.0 / w2plt.scatter(x1[y == 1], x2[y == 1], color='blue', marker='o')plt.scatter(x1[y == 0], x2[y == 0], color='red', marker='x')plt.plot(x, d, color='green')plt.xlabel('Feature 1')plt.ylabel('Feature 2')plt.title('Decision Boundary')plt.show()

结果分析

输出:

after 0 ,the loss is 0.693
after 1000 ,the loss is 0.188
after 2000 ,the loss is 0.086
after 3000 ,the loss is 0.049
after 4000 ,the loss is 0.031
after 5000 ,the loss is 0.020
after 6000 ,the loss is 0.014
after 7000 ,the loss is 0.009
after 8000 ,the loss is 0.007
after 9000 ,the loss is 0.005

在这里插入图片描述

通过上述代码,我们可以生成二分类数据集并训练逻辑回归模型。训练过程中,损失函数逐渐减小,最终模型能够较好地拟合数据。最终的决策边界将数据集中的两个类别分开。

总结

本文通过一个简单的例子,详细介绍了如何使用Python和PyTorch实现逻辑回归模型。通过生成数据、定义模型、定义损失函数、训练模型和可视化结果,我们展示了逻辑回归的基本流程。希望本文对读者理解逻辑回归有所帮助。

参考资料

  • Scikit-learn官方文档
  • PyTorch官方文档
  • 逻辑回归的数学原理

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

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

相关文章

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方:仓颉编程语言作为一款面向全场景应用开发的现代编程语言,通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持,为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…

Vue.js当中v-if和v-show的区别

作者:CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境:WebStorm 目录 v-if和v-show举例 v-if 定义 特点 v-show 定义 特点 代码示例 v-if和v-show区别 原理 性能 适用性 v-if和v-show举例 首先我们还是简单回顾一下vue当中两…

【iOS】知乎日报总结

文章目录 前言首页网络请求轮播图上滑加载图片请求 文章详情页WKWebView的使用点赞、收藏持久化——FMDB的使用 其他问题沙盒问题单元格点击其他 总结 前言 在系统学习了OC语言和UI控件后,知乎日报是第一个比较大的项目,耗时一个多月时间,里面…

NLP信息抽取大总结:三大任务(带Prompt模板)

信息抽取大总结 1.NLP的信息抽取的本质?2.信息抽取三大任务?3.开放域VS限定域4.信息抽取三大范式?范式一:基于自定义规则抽取(2018年前)范式二:基于Bert下游任务建模抽取(2018年后&a…

【Linux】网络连接模式,VM:桥接、NAT、仅主机如何选择?

1、网络类型 虚拟机建立时的常见网络类型有3种:桥接、NAT(Network Address Translation,网络地址转换)、仅主机(Host Only) 桥接:VM直接连接路由器,与物理机地位相同;N…

Spring Boot 3启动加载器详解(含源码解析)

一、引言 Spring Boot 3启动加载器是提升开发效率和应用程序启动速度的关键组件。本文将详细介绍Spring Boot 3的启动加载器,包括其实现方式、应用场景及工作原理等。 说明:本文分析使用的Spring Boot源码版本为3.3.5 二、启动加载器简介 启动加载器…

UDP客户端服务器通信

在这篇博客中,我们将探索 UDP(用户数据报协议) 通信,简要地说,UDP 是一种无连接、快速但不可靠的通信协议,适用于需要快速数据传输但对丢包容忍的场景,比如视频流和在线游戏。就像《我是如此相信…

手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案

手机实时提取SIM卡打电话的信令声音 --智能拨号器app的双SIM卡切换方案 一、前言 在蓝牙电话的方案中,由于采用市场上的存量手机来做为通讯呼叫的载体,而现在市面上大部分的手机都是“双卡双待单通”手机,简称双卡双待手机。即在手机开机后…

Spring Boot 同时接受文件和实体及 Postman 测试实战

Spring Boot 文件上传及 Postman 测试指南 在本文中,我们将介绍如何使用 Spring Boot 上传文件并通过 Postman 测试接口。我们会基于以下接口作为示例: Boolean importDevicePushConfig(RequestParam("file") MultipartFile file,DevicePush…

Paddle Inference部署推理(一)

一:Paddle Inference推理 简介 Paddle Inference 是飞桨的原生推理库,提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理。 Paddle Inference 功能特性丰富&#xff…

搭建文件服务器并使用Qt实现文件上传和下载(带账号和密码)

文章目录 0 背景1 搭建文件服务器2 代码实现文件上传和下载2.1 在pro文件中添加网络支持2.2 创建网络管理类2.3 文件上传2.4 文件下载 3 扩展(其他方法实现文件上传和下载)3.1 python3.2 npm3.3 ftp服务器 4 完整的代码 0 背景 因为需要使程序具备在远程…

社交新零售模式下“2+1 链动模式 S2B2C 商城小程序”的创新实践与发展策略

摘要:随着实体商业与社交网络深度融合,社交新零售蓬勃兴起,“21 链动模式 S2B2C 商城小程序”作为其中创新典范,融合独特激励机制与数字化运营优势,重塑零售生态。本文剖析该模式架构、运作逻辑,探讨其在私…

【Git】Git 完全指南:从入门到精通

Git 完全指南:从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一,它帮助开发者高效地管理项目,支持分布式协作和版本控制。无论是个人项目还是团队开发,Git 都能提供强大的功能来跟踪、管理代码变更,并保障…

华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读

随着数据中心规模的不断扩大,服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱(HWE9000V2)作为一款高性能的服务器设备,其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…

Css—实现3D导航栏

一、背景 最近在其他的网页中看到了一个很有趣的3d效果,这个效果就是使用css3中的3D转换实现的,所以今天的内容就是3D的导航栏效果。那么话不多说,直接开始主要内容的讲解。 二、效果展示 三、思路解析 1、首先我们需要将这个导航使用一个大…

gitee:删除仓库

1、点击主页面设置 2、找到左侧导航栏-数据管理->仓库空间信息;找到需要删除的仓库->点击设置 3、点击左侧仓库设置->点击右侧删除仓库 4、输入提示内容->确认删除 5、输入密码验证 6、成功删除提示

探索 Python 任务自动化的新境界:Invoke 库揭秘

文章目录 探索 Python 任务自动化的新境界:Invoke 库揭秘背景:为何选择 Invoke?什么是 Invoke?如何安装 Invoke?5个简单的库函数使用方法1. 定义任务2. 带参数的任务3. 运行 Shell 命令4. 任务参数化5. 列出任务 场景应…

深入理解计算机系统,源码到可执行文件翻译过程:预处理、编译,汇编和链接

1.前言 从一个高级语言到可执行程序,要经过预处理、编译,汇编和链接四个过程。大家可以思考下,为什么要有这样的过程? 我们学习计算机之处,就应该了解到,计算机能够识别的只有二进制语言(这是…

六通道串口服务器

型号:SG-TCP232-620 1.1 功能 1.1.1 基本功能 串口服务器是串口 RS232/422/485 和以太网之间的一个转换器,实现串口数 据和以太网数据的双向透明传输,可以让串口设备立即联网,典型应用拓扑如下: 1.1.2 特色功能…

Ubuntu 18.04 中安装 RDKit(针对 Python 2.7)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…