【softmax分类】基于matlab梯度下降softmax回归minist数据分类【含Matlab源码 1645期】

举报
海神之光 发表于 2022/05/29 01:07:36 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【softmax分类】基于matlab梯度下降softmax回归minist数据分类【含Matlab源码 1645期】 获取代码方式2: 通...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【softmax分类】基于matlab梯度下降softmax回归minist数据分类【含Matlab源码 1645期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、简介

随着科学技术的不断更新发展,人们在工作生活中越来越依赖计算机.人们希望把传统手写办公和计算机办公有机结合起来.为解决这一问题,手写数字识别为大家提供了一个新方向.高精确度和高效率办公与学习是人们日常工作生活中孜孜不倦追求的目标.随着网络信息技术的不断发展,深度学习逐渐被大家熟悉及利用,其中卷积神经网络在一系列计算机领域中取得了突破性进展.然而,手写数字识别由于其自身特点和复杂性,无论在技术领域还是在应用领域,仍然存在很大的发展空间.通过Softmax函数进行minist数据分类。

三、部分源代码

function [theta,test_pre,rate] = mysoftmax_gd(X_test,X,label,lambda,alpha,MAX_ITR,varargin)
% 该函数用于实现梯度下降法softmax回归
% 调用方式:[theta,test_pre,rate] = mysoftmax_gd(X_test,X,label,lambda,alpha,MAX_ITR,varargin)
% X_test:测试输入数据
% X:训练输入数据,组织为m*p矩阵,m为案例个数,p为加上常数项之后的属性个数
% label:训练数据标签,组织为m*1向量(数值型)
% lambda:权重衰减参数weight decay parameter
% alpha:梯度下降学习速率
% MAX_ITR:最大迭代次数
% varargin:可选参数,输入初始迭代的theta系数,若不输入,则默认随机选取
% theta:梯度下降法的theta系数寻优结果
% test_pre:测试数据预测标签
% rata:训练数据回判正确率

% Genlovy Hoo,2016.06.29. genlovhyy@163.com
%% 梯度下降寻优
Nin=length(varargin);
if Nin>1
    error('输入太多参数') % 若可选输入参数超过1个,则报错
end
[m,p] = size(X);
numClasses = length(unique(label)); % 求取标签类别数
if Nin==0
    theta = 0.005*randn(p,numClasses); % 若没有输入可选参数,则随机初始化系数
else
    theta=varargin{1}; % 若有输入可选参数,则将其设定为初始theta系数
end
cost=zeros(MAX_ITR,1); % 用于追踪代价函数的值
for k=1:MAX_ITR
    [cost(k),grad] = softmax_cost_grad(X,label,lambda,theta); % 计算代价函数值和梯度
    theta=theta-alpha*grad; % 更新系数
end
%% 回判预测
[~,~,Probit] = softmax_cost_grad(X,label,lambda,theta);
[~,label_pre] = max(Probit,[],2);
index = find(label==label_pre); % 找出预测正确的样本的位置
rate = length(index)/m; % 计算预测精度
%% 绘制代价函数图
figure('Name','代价函数值变化图');
plot(0:MAX_ITR-1,cost)
xlabel('迭代次数'); ylabel('代价函数值')
title('代价函数值变化图');% 绘制代价函数值变化图
%% 测试数据预测
[mt,pt] = size(X_test);
Probit_t = zeros(mt,length(unique(label)));
for smpt = 1:mt
    Probit_t(smpt,:) = exp(X_test(smpt,:)*theta)/sum(exp(X_test(smpt,:)*theta));
end
[~,test_pre] = max(Probit_t,[],2);



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

四、运行结果

在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 由伟,刘亚秀.MATLAB数据分析教程[M].清华大学出版社,2020.
[2]王岩,隋思涟.试验设计与MATLAB数据分析[M].清华大学出版社,2012.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/122199758

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。