基于梯度下降、随机梯度下降和牛顿法的逻辑回归MATLAB实现

news/2025/10/23 17:08:07/文章来源:https://www.cnblogs.com/y54y5666/p/19161107

一、核心算法实现

1. 数据预处理与模型初始化
%% 数据准备
% 生成示例数据(二分类)
[X, y] = make_classification(n_samples=100, n_features=2, n_redundant=0, n_clusters_per_class=1);
X = [ones(size(X,1),1) X]; % 添加截距项%% 参数设置
learning_rate = 0.1; % 学习率
max_iter = 1000;     % 最大迭代次数
tol = 1e-4;          % 收敛阈值
2. Sigmoid函数定义
function g = sigmoid(z)g = 1.0 ./ (1.0 + exp(-z));
end
3. 损失函数与梯度计算
function [J, grad] = computeCost(X, y, theta)m = length(y);h = sigmoid(X * theta);J = (-1/m) * sum(y .* log(h) + (1-y) .* log(1-h));grad = (1/m) * X' * (h - y);
end

二、梯度下降法实现

function theta = gradientDescent(X, y, alpha, max_iter)[m, n] = size(X);theta = zeros(n,1);J_history = zeros(max_iter,1);for iter = 1:max_iter[J, grad] = computeCost(X, y, theta);theta = theta - alpha * grad;J_history(iter) = J;% 收敛判断if iter > 1 && abs(J_history(iter) - J_history(iter-1)) < tolbreak;endend
end

三、随机梯度下降法实现

function theta = stochasticGradientDescent(X, y, alpha, max_epoch)[m, n] = size(X);theta = zeros(n,1);J_history = zeros(max_epoch,1);for epoch = 1:max_epoch% 随机打乱样本顺序idx = randperm(m);X = X(idx,:);y = y(idx);for i = 1:mxi = X(i,:)';yi = y(i);[h, grad] = computeCost(X, y, theta);theta = theta - alpha * grad;end% 记录平均损失J_history(epoch) = computeCost(X, y, theta);end
end

四、牛顿法实现

function theta = newtonMethod(X, y, max_iter)[m, n] = size(X);theta = zeros(n,1);H = zeros(n,n);for iter = 1:max_iterh = sigmoid(X * theta);grad = (1/m) * X' * (h - y);% 计算Hessian矩阵(添加正则化项)S = diag(h .* (1-h));H = (1/m) * X' * S * X + 1e-4 * eye(n); % 正则化防止奇异% 参数更新theta = theta - H \ grad;% 收敛判断if iter > 1 && norm(grad) < tolbreak;endend
end

五、性能对比与可视化

%% 训练与比较
theta_gd = gradientDescent(X, y, 0.1, 1000);
theta_sgd = stochasticGradientDescent(X, y, 0.1, 1000);
theta_newton = newtonMethod(X, y, 100);%% 决策边界绘制
figure;
hold on;
scatter(X(y==1,2), X(y==1,3), 'r', 'filled');
scatter(X(y==0,2), X(y==0,3), 'b', 'filled');% 绘制各方法决策边界
x1 = linspace(min(X(:,2)), max(X(:,2)), 100);
x2_gd = (-theta_gd(1) - theta_gd(2)*x1) / theta_gd(3);
x2_sgd = (-theta_sgd(1) - theta_sgd(2)*x1) / theta_sgd(3);
x2_newton = (-theta_newton(1) - theta_newton(2)*x1) / theta_newton(3);plot(x1, x2_gd, 'g', 'LineWidth', 2);
plot(x1, x2_sgd, 'm', 'LineWidth', 2);
plot(x1, x2_newton, 'k', 'LineWidth', 2);
legend('Positive', 'Negative', 'GD', 'SGD', 'Newton');
title('不同优化方法的决策边界对比');

六、优化

  1. 学习率调整
    • 动态衰减策略:alpha = initial_alpha / (1 + decay_rate * iter)
    • 自适应方法:结合AdaGrad或RMSProp
  2. 正则化增强
    • L2正则化:在损失函数中添加 lambda/2 * sum(theta(2:end).^2)
    • L1正则化:使用次梯度法处理稀疏性
  3. 数值稳定性优化
    • Sigmoid函数截断:sigmoid(z) = max(min(z, 30), -30)
    • Hessian矩阵正则化:添加小量对角项防止奇异

参考代码 使用梯度下降法、随机梯度下降法和牛顿法实现的逻辑回归算法 www.youwenfan.com/contentcnj/59877.html

七、扩展应用示例

%% 多分类扩展(One-vs-All)
function models = oneVsAll(X, y, num_classes, method)models = cell(num_classes,1);for c = 1:num_classes% 二分类标签转换binary_y = (y == c);% 训练单个分类器switch methodcase 'gd'models{c} = gradientDescent(X, binary_y);case 'sgd'models{c} = stochasticGradientDescent(X, binary_y);case 'newton'models{c} = newtonMethod(X, binary_y);endend
end

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

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

相关文章

2025年海外仓企业最新推荐榜,英国海外仓/法国海外仓/西班牙海外仓/意大利海外仓/波兰海外仓/聚焦企业服务品质与平台适配力深度剖析

随着跨境电商 “品牌出海” 浪潮持续推进,亚马逊、TEMU、TikTok 等多平台运营模式成为主流,加之欧美、日韩等海外市场消费需求升级,卖家在选择海外仓服务商时面临多重考量 —— 如何匹配不同平台的履约规则、如何保…

2025 深圳营销策划品牌最新推荐榜单:深耕多行业全案服务,权威评选助企业精准合作食品加工 / 物流 / 新能源营销策划推广公司推荐

引言 在深圳产业升级与数字化浪潮叠加的背景下,企业面临获客成本高企、品牌传播碎片化、营销效果难量化等多重困境。尤其在制造业、新能源等实体领域,传统营销模式已难以适配市场变化,而新兴消费赛道又需精准触达年…

精控DRC,成就高质量IC设计精品

在当今高速发展的集成电路(IC)设计领域,精准、高效的设计规则检查(DRC)显得尤为关键。不仅保证设计符合制造工艺要求,更是提升良率、缩短迭代、降低成本的关键一步。 1、为什么DRC是IC设计的“把关者”? DRC是物…

完整教程:【uniapp】uniapp+uview-ui+mixins实现搜索+上拉加载+加载动画功能:

完整教程:【uniapp】uniapp+uview-ui+mixins实现搜索+上拉加载+加载动画功能:pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

攻壳机动队 动画电影12部合集

名称:攻壳机动队 动画电影12部合集【4K&1080P蓝光原盘REMUX】 描述:赛博朋克美学的巅峰名称:攻壳机动队 动画电影12部合集【4K&1080P蓝光原盘REMUX】 描述:赛博朋克美学的巅峰之作!这套超豪华合集将带你深…

2025 年天津老味儿刨冰最新推荐榜:精选 5 家世代传承与新兴热门品牌,附品质选择指南

引言 天津老味儿刨冰以酸磨糕的醇厚、红豆的绵密与碎冰的清爽,成为刻在城市记忆里的消暑符号。但如今市场中,既有坚守传统的老字号,也涌现出诸多创新新品牌,同时夹杂着部分商家食材劣质、工艺粗糙等问题,让消费者…

详细介绍:OpenLayers地图交互 -- 章节十四:拖拽缩放交互详解

详细介绍:OpenLayers地图交互 -- 章节十四:拖拽缩放交互详解2025-10-23 16:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !impor…

2025 年断路器厂家最新推荐排行榜权威发布!涵盖远程控制 / 物联网 / 漏电 / 无线遥控 / 远程监控类型,优质品牌助采购精准决策

引言 随着电力系统向智能化、物联化加速升级,断路器作为保障用电安全的核心设备,市场需求与日俱增,但同时也面临品牌繁杂、产品质量良莠不齐的困境。不少采购方在选择时,常因缺乏权威参考,难以辨别品牌技术实力、…

RTX5060TI 配置Xinference

RTX5060TI 配置XinferenceRTX5060TI 配置Xinference CUDA (llama-factory) D:\P\llm\LLaMA-Factory>nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2025 NVIDIA Corporation Built on Wed_Apr…

js函数声明和函数表达式的理解

什么是函数声明 以 function 关键字开头,必须指定函数名(如 function greet() {}),且不能作为其他语句的一部分。‌‌ 函数声明会被提升 在JS中,函数声明会被提升,这意味着函数可以在声明之前被调用。 当你使用函…

2025 天津电竞网吧最新推荐榜单权威发布:Z 世代电竞领衔五大实力品牌,技术与口碑深度解析!

引言 伴随京津冀电竞产业协同发展提速,天津电竞市场规模年增速超 30%,各类机构数量呈爆发式增长。但行业快速扩张背后乱象凸显:近 40% 机构存在硬件配置缩水、网络延迟严重问题,25% 缺乏专业运营团队,用户维权率较…

合成孔径雷达(SAR)成像仿真

一、SAR仿真架构 1. 核心模块划分 graph TD A[雷达参数配置] --> B[信号生成] B --> C[目标场景建模] C --> D[回波模拟] D --> E[运动补偿] E --> F[成像算法] F --> G[图像评估] 2. 关键技术指标参…

2025 年最新推荐智能门锁厂家榜单:涵盖高端 / 猫眼 / 家用 / 人脸 / 续航 / 掌静脉等多类型,帮消费者避开劣质产品选到靠谱品牌

引言 当下智能门锁市场蓬勃发展,却也乱象丛生。大量品牌涌入导致产品质量良莠不齐,部分产品存在指纹识别失误、续航短、安全防护不足等问题,让消费者选购时倍感迷茫。不少厂家重营销轻研发,产品更新滞后,难以满足…

动车受电弓网检测系统 保障高速铁路安全高效运行

受电弓-接触网(弓网)系统是高速列车获得持续稳定动力供给的唯一途径。受电弓检测对于高速铁路的安全、高效运营至关重要。受电弓监测有助于确保列车高效运行和极小的损耗、磨损。随着列车速度的提高,受电弓系统的反…

超越“系统性沉默”:“AI元人文”构想下的价值范式转换与游戏化探索

超越“系统性沉默”:“AI元人文”构想下的价值范式转换与游戏化探索 ——技术与哲学的思辨 作者: 岐金兰 摘要: 当前人工智能伦理领域存在一种值得关注的“系统性沉默” :研究者在承认价值表征内在困难的同时,持续…

通信协议(Http,websocket)

http协议详情http是超文本传输协议,浏览器和web服务器之间交互的通信协议,它是基于Tcp之上的应用层协议(osi七层)。特点:基于请求响应,服务端不能主动给客户端推送消息。 无状态无连接,不能做会话保持。协议本身不…

详细介绍:go语言学习记录9.23

详细介绍:go语言学习记录9.23pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

npm install 时包库找不到报错解决 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MATLAB 仿真无线传感器网络(WSN)三大经典场景

一、统一参数区(建议先调这里) %% 0. 公共参数 clear; clc; close all; rng(2025) % 可重复 field = [0 100; 0 100]; % 100 m 100 m nNode = 200; % 节点数 R = 1…

P13382 解题报告

前言 连续段 DP 板子,问题在于没有学连续段 DP 并理解其本质 这个题目还可以当成每一次插入一些字母是一个很好的 trick 同时记得联考没有好东西,不会就跳了看后面的暴力拿满 经常出现 T3,4 没有时间做的情况也可以…