matlab逻辑回归两次成绩录取查询,【多元逻辑回归分类】基于matlab的MNIST实践

一、多元逻辑回归原理

1.1 多元逻辑回归问题

二元分类问题与多元分类问题如下图所示:

6fd57decfb7ba6ed8911b3d3aa9257e0.png

One-vs-all(one-vs-rest):

对于多类分类问题,可以将其看做成二类分类问题:保留其中的一类,剩下的作为另一类。例如:

e077d89844e91272e522e2a87b40508e.png1.2 多元逻辑回归常用步骤

1.2.1 构造预测函数

Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别),使用Sigmoid函数,可以将任意实数映射到[0,1]区间,这样使用0.5作为阈值,可以利用回归方法解决分类问题,Sigmoid函数形式为:

405330c67d3857dc185516dfa4500c86.pngSigmoid 函数的图像为“S”形,如下图所示:

d4f2713f3363a2ce2c77c917a19fba21.png对于分类问题,确定决策边界(也叫分类边界),是非常重要的,下面左图是一个线性的决策边界,右图是非线性的决策边界。

e25273fe3922eec7e1ecee659196f977.png

对于线性边界的情况,边界形式如下:

704935dca43bc2b20e78453a830b0463.png构造预测函数为:

5ea2d92378a0fda7c68003fdd725c3d4.png函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

4f322d7a5062c71ef7c4f9b9abfb53db.png

1.2.2 构造损失函数J

Cost函数和J函数如下,

a97c8058f1affcbfbdda26a4249b6dc5.png它们是基于最大似然估计推导得到的。综合上述两式得

bc0df0e2ad6dce838ff34fc620c99fc7.png

下面详细说明推导的过程: 将(1)式(1.2.1节最后)综合起来可以写成:

fb8edf054fee74946209e638a1704def.png取似然函数为:

5b68d94336dd417e6ed1d496055af417.png对数似然函数为:

4f1109ffb72a67f0b1ba7262ae301267.png最大似然估计就是求使 l(θ) 取最大值时的θ,其实这里可以使用梯度上升法求解,求得的θ就是要求的最佳参数。但是,在Andrew Ng的课程中将取为下式,即:

7c0296dd88ae80cedd159cd2d2f6a86f.png因为乘了一个负的系数-1/m,所以J(θ)取最小值时的θ为要求的最佳参数。

1.2.3 梯度下降法求的最小值

θ更新过程:

0ee70551772b9ac83cacb9c78621eab9.png经过化简,θ更新过程可以写成:

30cfb09ad2f1b7756e928560d0a6cfd0.png

二、基于Matlab的MNIST手写数字实验

2.1 输入输出数据处理

数据来自THE MNIST DATABASEof handwritten digits网站(

每一张图片包含28像素X28像素。可以用一个数字数组来表示这张图片,把这个数组展开成一个向量,长度是 28x28 = 784。从这个角度来看,MNIST数据集的图片就是在784维向量空间里面的点, 并且拥有比较复杂的结构。

在MNIST训练数据集中,mnist.train.images 是一个形状为 [60000, 784] 的张量,第一个维度数字用来索引图片,第二个维度数字用来索引每张图片中的像素点。在此张量里的每一个元素,都表示某张图片里的某个像素的强度值,值在0-255之间,归一化后,值介于0和1之间。

相对应的MNIST数据集的标签是介于0到9的数字,用来描述给定图片里表示的数字,为了方便训练,需要对输出 one-hot 编码 ,使标签数据是"one-hot vectors"。一个one-hot向量除了某一位的数字是1以外其余各维度数字都是0。所以在此教程中,数字n将表示成一个只有在第n维度(从0开始)数字为1的10维向量。比如,标签0将表示成([1,0,0,0,0,0,0,0,0,0,0])。因此, mnist.train.labels 是一个 [60000, 10] 的数字矩阵。

2.2 假设模型的选择

采用逻辑回归模型 h(w)=g(w’X+b),其中g(z)=1/(1+exp(z));  x为输入数据,28*28=784*1维数的向量 。

2.3 算法实现过程%%加载训练数据===============================

Load data;

%加载图片,784*60000的矩阵,表示60000张图片

train_images=data.train_images;

%加载标签数据,表示60000*1的矩阵,表示60000个标签

train_labels=data.train_images;

%%训练过程================================

%初始化参量w,b

w=zeros(784,10);

b=zeros(10,1);

%进行10次逻辑回归训练得到多个参量,再进行组装

for (i=1 to 10)

{

%两类逻辑分类训练,k为迭代次数,a为学习速率

[w1,b1]=BinLogistRrgressionTrain( train_images,train_labels,k,a);

w=joint(w,w1);

b=joint(b,b1);

}

%%仿真测试===========================

y=predict(test_images,w,b);

s=test(y,test_labels);%测试正确率

三、实验结果与数据分析

3.1 训练数据个数对准确率的影响

在迭代次数k=200,学习速率为a=0.5时的测试数据

102ef89ec2ebfacb5108d0954e4f85b5.png由图可知,随着训练数据的增多,训练准确率也在增加,当训练数据很小时,准确率增加幅度较大,当训练数据很大时,准确率增长幅度减缓。但随着数据量的增加,计算量增加,训练时间也会增加。由此,可以选择训练数据量n=2000以上比较合适。

3.2 学习速率对准确率的影响

在训练数据为n=1000,迭代次数k=200时的测试数据

05dfe7b600f5ca5cf9130fcd44bfd531.png由图可知,当学习速率a<1时,随着学习速率a的增大,训练准确率也在增加,当学习速率啊a>1时,准确率幅度变化不大,轻微波动。由此,可以选择学习速率a=1左右比较合适。

3.3 迭代次数对准确率的影响

在训练数据为n=1000,学习速率a=0.5,a=1时的测试数据

9e59312614429b73efd6753e63302203.png由图可知,学习速率不同时,迭代次数的效果不同,当迭代次数k<300时,随着迭代次数k的增大,训练准确率也在增加,当学习速率啊k>300时,准确率幅度变化不大,甚至降低。由此,可以选择迭代次数k=300左右比较合适。

3.4 总结及选择合适参数

8933a25f40ae29afd1ba7c701798e9d6.png

参考上述参数建议,选取一下几组数据进行训练与测试

由此可以选择参数训练数据个数n=6000,学习速率a=1,迭代次数k=200进行训练.。

3.5 本次实验结论及心得

通过采用简单的多类逻辑回归分类模型,使手写数字识别的准确率达到了89.2%,尽管不是很高,但也基本上实现了一个简单图像识别的功能,学到了一些经验,如,当要适当减少迭代次数以加快训练时间,可以适当增加学习速率,以至于准确率不会降低太多。

其次在该过程中,也遇到了不少问题,如当训练样本过多时(总训练样本有60000),训练时间太长,不能迅速得到模型,这是该方法的一个弊端。

参考资料:coursera课程:《机器学习》(由斯坦福大学Andrew NG讲授)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值