当前位置: 首页 > article >正文

别再死记公式了!用Python手把手复现西瓜书3.0α数据集的对率回归(附完整代码与可视化)

从西瓜数据集到决策边界Python实战对率回归的数学之美机器学习初学者常陷入公式推导与代码落地的断层中——明明理解了教材中的数学原理面对实际数据集时却无从下手。本文将以周志华《机器学习》中的西瓜数据集3.0α为蓝本用Python完整演绎对率回归从理论到实践的转化过程。不同于简单罗列代码我们将重点揭示每个编程步骤与书中公式的映射关系让你真正掌握为什么这样实现的底层逻辑。1. 数据观察与特征工程西瓜数据集3.0α虽然只有17条样本却包含了密度和含糖率两个关键特征。我们先通过Pandas加载数据并观察分布规律import pandas as pd import matplotlib.pyplot as plt data pd.read_csv(watermelon_3.0a.csv) print(data.describe()) plt.scatter(data[data[好瓜]1][密度], data[data[好瓜]1][含糖率], cred, labelGood) plt.scatter(data[data[好瓜]0][密度], data[data[好瓜]0][含糖率], cblue, labelBad) plt.xlabel(Density) plt.ylabel(Sugar Rate) plt.legend() plt.show()执行这段代码后我们会发现两个明显特征正样本好瓜集中在右上区域高密度、高含糖率负样本坏瓜集中在左下区域低密度、低含糖率关键预处理步骤特征标准化将密度和含糖率缩放到相近范围添加偏置项为后续向量化计算做准备标签转换将好瓜列转为0/1数值# 特征标准化 data[密度] (data[密度] - data[密度].mean()) / data[密度].std() data[含糖率] (data[含糖率] - data[含糖率].mean()) / data[含糖率].std() # 添加全1列作为偏置项 data[bias] 1 # 整理特征矩阵X和标签向量y X data[[密度, 含糖率, bias]].values y data[好瓜].values.reshape(-1,1)2. 对率回归模型实现对率回归的核心是sigmoid函数它将线性组合映射到(0,1)概率空间$$ \sigma(z) \frac{1}{1e^{-z}} \quad \text{其中} \quad z w^Tx $$在Python中我们通过NumPy实现这个数学表达import numpy as np def sigmoid(z): return 1 / (1 np.exp(-z))模型参数更新采用梯度上升法与线性回归的梯度下降相反因为我们要最大化似然函数。权重更新公式为$$ w : w \alpha \cdot X^T(y - \sigma(Xw)) $$对应代码实现class LogisticRegression: def __init__(self, lr0.01, n_iters1000): self.lr lr # 学习率 self.n_iters n_iters # 迭代次数 self.weights None # 待训练参数 def fit(self, X, y): n_samples, n_features X.shape self.weights np.zeros((n_features, 1)) # 初始化参数 # 梯度上升 for _ in range(self.n_iters): linear_pred np.dot(X, self.weights) predictions sigmoid(linear_pred) # 计算梯度 dw np.dot(X.T, (y - predictions)) # 更新参数 self.weights self.lr * dw def predict(self, X): linear_pred np.dot(X, self.weights) y_pred sigmoid(linear_pred) return [1 if i 0.5 else 0 for i in y_pred]注意这里将偏置项b作为权重向量的最后一个元素处理避免了单独计算。这种技巧在机器学习实现中非常常见。3. 留一法交叉验证由于样本量小仅17个我们采用留一法(Leave-One-Out)进行模型评估from sklearn.metrics import accuracy_score def loo_cv(X, y): n_samples len(X) accuracies [] for i in range(n_samples): # 划分训练集和测试集 X_train np.delete(X, i, axis0) y_train np.delete(y, i, axis0) X_test X[i:i1] y_test y[i:i1] # 训练模型 model LogisticRegression(lr0.1, n_iters1000) model.fit(X_train, y_train) # 预测并记录准确率 y_pred model.predict(X_test) accuracies.append(accuracy_score(y_test, y_pred)) return np.mean(accuracies) print(f留一法平均准确率: {loo_cv(X, y):.2f})实践中发现几个关键点学习率设为0.1时收敛速度和质量最佳迭代1000次足够使参数收敛标准化后的特征使训练过程更稳定4. 决策边界可视化理解模型决策边界是掌握分类算法的关键。我们通过以下代码展示对率回归如何在特征空间划分类别def plot_decision_boundary(model, X, y): # 设置绘图范围 x_min, x_max X[:,0].min()-0.1, X[:,0].max()0.1 y_min, y_max X[:,1].min()-0.1, X[:,1].max()0.1 # 生成网格点 xx, yy np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100)) # 预测每个网格点的类别 Z model.predict(np.c_[xx.ravel(), yy.ravel(), np.ones(xx.ravel().shape)]) Z np.array(Z).reshape(xx.shape) # 绘制等高线和散点图 plt.contourf(xx, yy, Z, alpha0.4) plt.scatter(X[:,0], X[:,1], cy.flatten(), s20, edgecolork) plt.xlabel(标准化密度) plt.ylabel(标准化含糖率) plt.title(对率回归决策边界) # 在全数据集上训练最终模型 final_model LogisticRegression(lr0.1, n_iters1000) final_model.fit(X, y) plot_decision_boundary(final_model, X, y)可视化结果清晰显示决策边界呈线性对率回归本质是线性分类器正负样本基本被正确划分个别样本位于边界附近符合实际数据分布5. 模型诊断与优化虽然我们的基础实现已经能工作但仍有优化空间常见问题排查表问题现象可能原因解决方案准确率波动大学习率过高降低学习率(如0.01→0.001)预测全为同一类特征尺度差异大进行特征标准化训练不收敛迭代次数不足增加n_iters或添加早停机制性能优化技巧添加L2正则化防止过拟合实现随机梯度下降加速训练添加学习率衰减策略正则化版本的核心修改def fit(self, X, y, lambda_0.1): # lambda_是正则化系数 # ...原有代码... # 在梯度计算中添加正则化项 dw np.dot(X.T, (y - predictions)) - lambda_ * self.weights # ...其余保持不变...6. 数学原理与代码对照理解以下关键公式与代码实现的对应关系sigmoid函数def sigmoid(z): return 1 / (1 np.exp(-z)) # 对应公式σ(z)1/(1e^{-z})梯度计算dw np.dot(X.T, (y - predictions)) # 对应∇ℓ(w)X^T(y-σ(Xw))参数更新self.weights self.lr * dw # 对应w:wα∇ℓ(w)通过这种对照可以清晰看到每个数学符号如何转化为编程语句。建议在实现时保持这种映射关系方便调试和理解。7. 工程实践建议在实际项目中应用对率回归时有几个实用技巧特征组合 当线性边界不足以划分数据时可以尝试创建新特征# 添加交互特征 data[密度×含糖率] data[密度] * data[含糖率]类别不平衡处理 如果正负样本比例悬殊可以对少数类过采样在损失函数添加类别权重调整决策阈值不一定是0.5模型持久化 训练好的模型可以保存供后续使用import pickle # 保存模型 with open(model.pkl, wb) as f: pickle.dump(model, f) # 加载模型 with open(model.pkl, rb) as f: loaded_model pickle.load(f)生产环境优化用Cython加速数值计算实现批量预测接口添加输入数据验证逻辑8. 扩展思考虽然我们实现了基础版本但对率回归还有更多值得探索的方向多分类扩展一对多(One-vs-Rest)策略softmax回归实现概率校准Platt scaling方法等频分箱校准与神经网络的联系对率回归本质是单层神经网络sigmoid激活函数的演变在线学习版本def partial_fit(self, X_batch, y_batch): # 在线更新权重 predictions sigmoid(np.dot(X_batch, self.weights)) dw np.dot(X_batch.T, (y_batch - predictions)) self.weights self.lr * dw这个西瓜数据集的完整实现虽然规模小但涵盖了机器学习项目的主要流程数据观察→模型实现→训练验证→可视化分析→优化改进。掌握这种端到端的实现能力比单纯理解理论公式更重要。

相关文章:

别再死记公式了!用Python手把手复现西瓜书3.0α数据集的对率回归(附完整代码与可视化)

从西瓜数据集到决策边界:Python实战对率回归的数学之美机器学习初学者常陷入公式推导与代码落地的断层中——明明理解了教材中的数学原理,面对实际数据集时却无从下手。本文将以周志华《机器学习》中的西瓜数据集3.0α为蓝本,用Python完整演绎…...

告别默认图表:手把手教你定制VASPKIT的PLOT.In文件,画出符合期刊要求的能带图

科研绘图进阶:深度定制VASPKIT能带图的专业技巧在学术论文写作中,一张精心设计的能带图往往能成为研究成果的视觉名片。VASPKIT作为材料计算领域的利器,其自动绘图功能虽然便捷,但默认输出往往难以满足高端期刊的审美要求。本文将…...

Nature|619372人循环代谢性状的遗传分析

尽管复杂疾病的全基因组关联研究(GWAS)通常会分析多达100多万人,但分子特征的研究却滞后了。在这里,研究对爱沙尼亚生物库和英国生物库中多达619,372名个体的249个循环代谢特征进行了GWAS荟萃分析。从8,398个趋同于共享基因和通路…...

魔兽争霸3终极优化指南:5分钟彻底解决画面拉伸和帧率锁定问题

魔兽争霸3终极优化指南:5分钟彻底解决画面拉伸和帧率锁定问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏魔兽争霸3在现…...

勒索软件时代:你的备份数据安全吗?

最近几个月,我连续接到好几个客户的求助电话,都是中了勒索病毒。说真的,干灾备这行十几年,以前一年也碰不到几个勒索案例,现在一个月就能听到好几起。有个客户是做电商的,凌晨三点被锁了数据库,…...

QM/MM与ML/MM模拟对比:从呋喃光化学弛豫看机器学习力场结构保真度

1. 项目概述:从呋喃的光化学弛豫看QM/MM与ML/MM模拟的实战差异在计算化学和分子模拟领域,我们常常需要回答一个核心问题:一个分子在吸收光能量后,究竟会经历怎样的微观旅程?这个过程充满了不确定性,电子在几…...

机器学习势函数与量子热浴结合:精准模拟钛酸钡相变中的核量子效应

1. 项目概述:当机器学习势函数遇上量子热浴在计算材料科学领域,我们一直面临着一个核心矛盾:精度与效率的权衡。研究像钛酸钡(BaTiO₃)这样的经典铁电材料相变,我们需要在原子尺度上追踪成千上万个原子在温…...

如何安装OpenClaw?2026年京东云部署及配置Token Plan详细攻略

如何安装OpenClaw?2026年京东云部署及配置Token Plan详细攻略。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…...

终极QMC解密指南:如何快速将QQ音乐加密音频转换为MP3/FLAC格式

终极QMC解密指南:如何快速将QQ音乐加密音频转换为MP3/FLAC格式 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经从QQ音乐下载了喜欢的歌曲&#xff0c…...

人形机器人场景数据采集实战:从方案设计到质量验收

人形机器人场景数据采集实战:从方案设计到质量验收 摘要:人形机器人场景数据采集与传统工业数据采集有本质区别——场景复杂、交互多样、数据量巨大。本文基于多个落地项目经验,从采集方案设计、设备选型、场景编排、质量验收四个环节&#x…...

Redis 缓存实战案例与技术详解

Redis 缓存实战案例与技术详解 1. Redis 简介 Redis 是一种开源的内存数据存储,常用于缓存和消息队列。 2. 配置优化 使用 LRU 淘汰策略配置数据持久化功能 3. 实战案例 案例一:电商秒杀系统 架构:前端系统 Redis 持久化缓存特点&#xff1a…...

ros2_control 代码架构分析

ros2_control 代码架构分析 一、整体框架 1.1 代码框架 ├── ros2_control/ # ★ 框架本体(vendored,jazzy 分支) │ ├── controller_manager/ # 核心运行时:ros2_control_node │ ├── hardware_interface/ # 硬件抽象 +…...

不只是驱动问题:深度排查Windows CMD中nvidia-smi失效的5种可能及解决方案

不只是驱动问题:深度排查Windows CMD中nvidia-smi失效的5种可能及解决方案当你在Windows CMD中键入nvidia-smi命令却只得到"不是内部或外部命令"的提示时,多数教程会告诉你"配置环境变量Path即可解决"。但现实往往更复杂——特别是当…...

S32K144FTM定时器中断

目录 FTM定时器概念定义 定时器运用常用概念 S32DS添加FTM库 S32DSFTM外设配置 S32DS添加库冲突概念理解 FTM_DRV_Init函数定义 FTM_DRV_InitCounter外设函数 FTM_DRV_InitCounter外设函数 FTM_DRV_CounterStart外设函数 INT_SYS_InstallHandler外设函数 INT_SYS_Ins…...

CentOS服务器上VNC连接总出问题?这份保姆级排错手册(含端口混乱、服务重启、密码修改)

CentOS服务器VNC连接全流程排错指南:从端口混乱到服务恢复当你正埋头调试一个关键的仿真任务,突然VNC连接断开,所有工作界面瞬间消失——这种场景对使用CentOS服务器的工程师和科研人员来说绝不陌生。VNC作为远程桌面的生命线,一旦…...

2026年了,还在为电力负荷预测发愁?基于XGBoost的多变量单步预测全栈实战!

大家好,我是你们的技术伙伴。👋在2026年的今天,随着“双碳”目标的推进,智能电网和能源互联网成为了技术的热点。而这一切的基础,就是精准的电力负荷预测。很多初学者觉得负荷预测很难,觉得需要复杂的深度学…...

012-java精品项目-淘客系统源码(安卓+IOS+php后端)

本文介绍了一个完整的淘宝客App开发项目,包含Android端、iOS端、后端服务和数据库系统。项目提供了详细的接口文档(淘宝客App接口文档.doc)和客户申请资料(淘宝客客户需要申请资料.doc),并包含完整的淘宝客…...

Graph Fusion:一张 512 节点的图怎么压到 120 个以内

Operator Fusion 解决单点算子合并,Graph Fusion 在更大范围做整图级别的融合。GE 图引擎收到 ATC 编译好的图后,不是直接拿去执行——它先跑一遍图优化流水线,常量折叠、算子替换、模式匹配、Buffer 复用,把几百个节点的"散…...

用labview制作的上位机界面的多语言显示

在工控系统中,特别是有国外项目的时候,多语言显示必不可少。labview的控件的显示项里,有一个“标题”项,用标题就可以实现多语言显示,因为在labview中,标签是唯一的,而标题是可以重复的。首先&a…...

AArch64缓存架构解析与性能优化实践

1. AArch64缓存架构基础解析AArch64架构作为ARMv8指令集的64位执行状态,其缓存系统设计体现了现代处理器架构的典型特征。缓存作为CPU与主存之间的高速缓冲存储器,通过存储频繁访问的数据和指令来减少内存访问延迟。在AArch64中,缓存被组织为…...

量子通信技术突破:量子处理器如何提升经典通信容量

1. 量子通信技术的新范式:量子处理器辅助经典通信在传统通信领域,香农极限长期被视为不可逾越的理论边界。然而,量子计算技术的快速发展正在颠覆这一认知。我们团队最新研究发现,通过量子处理器辅助的经典通信系统,可以…...

Agent Harness 系列:为什么你的 Agent 演示很顺、上线就崩?

导读: 同样的模型,换一套外围基础设施,排名从第 30 开外直接冲到第 5——没有改动任何模型权重,没有换更贵的 API。这不是玄学,这是 Agent Harness 的威力。本文是三篇系列的第一篇,从"为什么需要 Har…...

打印机:解决windows打印任务卡死或者打印纸张喷墨不清晰的问题

问题概述买了一台型号较老的HP喷墨打印机,不知道是驱动问题还是打印机有问题,Windows在打印时老出现任务卡死或打印质量不佳(如喷墨不清晰)的问题。解决windows打印任务卡死试过很多种解决方案,大多都是浪费时间&#…...

别急着重装系统!记一次 Ubuntu 22.04 上 gcc 与 cpp 版本依赖冲突的排查与修复实录

从依赖地狱到编译自由:Ubuntu 22.04下gcc与cpp版本冲突的深度修复指南那天下午,当我正准备为新的C项目搭建开发环境时,终端里那行刺眼的红色错误提示让我的咖啡瞬间不香了。作为一个自诩"Linux老司机"的开发者,我没想到…...

统信UOS 20.1060专业版美化全攻略:从桌面到开机GRUB,一张图搞定所有壁纸

统信UOS 20.1060专业版视觉定制指南:全系统美学统一方案当你第一次启动全新安装的统信UOS专业版时,那个默认的蓝色渐变桌面或许会让你感到一丝失望——它专业、稳重,但缺乏个性。作为一名追求效率与美感并存的技术爱好者,我一直在…...

从“画箭头”到1亿播放量:机械工程师梁乐平,如何用CAD绘图书写知识传播新篇章?

一、绘图的开始和许多人一样,梁乐平选择了机械类专业,从广东理工学院毕业后,一头扎进了机械设计与绘图的世界。与别人不同的是,他给自己取了一个颇有传统文人气息的字“金泓”。这个细节,隐约透露着他性格中那份既务实…...

CompressO:重新定义本地视频压缩的三大创新维度

CompressO:重新定义本地视频压缩的三大创新维度 【免费下载链接】compressO Convert any video/image into a tiny size. 100% free & open-source. Available for Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/co/compressO 当…...

AI Native 公司构建指南:从 Anthropic 创始人手册到工程实践

【摘要】系统解析 AI Native 公司的本质特征与技术架构,基于 Anthropic 2026 年《创始人行动手册》核心框架,结合 31 家精益 AI 团队的真实案例,提供从想法验证到规模化增长的完整工程落地路径,帮助技术创业者避开 AI 时代特有的创…...

拆解:我们为宁步建设做南京办公室装修GEO的完整步骤与底层思考

很多南京工装老板现在都有一个共同困惑:网站有、文章发、排名有,就是没有精准咨询。本质原因很简单:传统SEO只“做排名”,而现在的AI搜索GEO是“做答案”。用户现在搜【南京1000平办公室装修】【南京产业园工装公司】,…...

17.通杀安卓 /iOS 全机型!Linux 原生刷机方案,EDL 底层救砖 + 自动化源码开源

摘要 本文面向具备基础Linux命令行操作能力的开发者与维修工程师,系统阐述主流品牌Android与iOS设备刷机维修的底层原理与可落地方案。覆盖华为、小米、OPPO、vivo、一加及苹果设备,提供从Bootloader解锁、Recovery刷写、固件烧录到基带修复的完整技术栈。所有操作均基于USB…...