尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

基于梯度下降、随机梯度下降和牛顿法的逻辑回归MATLAB实现
📅 发布时间:2026/6/20 13:24:46

一、核心算法实现

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

相关新闻

  • 2025年海外仓企业最新推荐榜,英国海外仓/法国海外仓/西班牙海外仓/意大利海外仓/波兰海外仓/聚焦企业服务品质与平台适配力深度剖析
  • 详细介绍:OpenLayers地图交互 -- 章节十四:拖拽缩放交互详解
  • 2025 年断路器厂家最新推荐排行榜权威发布!涵盖远程控制 / 物联网 / 漏电 / 无线遥控 / 远程监控类型,优质品牌助采购精准决策

最新新闻

  • Pytest+Allure+Selenium:构建高效Web自动化测试框架全流程指南
  • 金融机器学习中合成数据增强:破解数据稀缺与过拟合难题
  • LASS-ODE-Power:基于混合LoRA的电力系统动态轨迹预测基础模型
  • CentOS 8 LAMP 部署:模块化源重建与SELinux协同配置指南
  • SGA-MCTS:基于检索与蒙特卡洛树搜索的LLM智能体规划框架解析
  • 2026承德漏水检测维修本地口碑防水商家榜单:厨卫/阳台/屋面/地下室渗漏水维修,持证施工+明码实价,防水补漏公司TOP5推荐 - 即刻修防水

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号