UFLDL教程(四)之Softmax回归
关于Andrew Ng的machine learning课程中,有一章专门讲解逻辑回归(Logistic回归),具体课程笔记见另一篇文章。
下面,对Logistic回归做一个简单的小结:
给定一个待分类样本x,利用Logistic回归模型判断该输入样本的类别,需要做的就是如下两步:
① 计算逻辑回归假设函数的取值hθ(x),其中n是样本的特征维度
② 如果hθ(x)>=0.5,则x输入正类,否则,x属于负类
或者直接利用判别边界进行判断,即:如果θ'x>=0,则x输入正类,否则,x属于负类
所以,Logistic回归只能解决两类分类问题。
************************
这里一个很重要的问题就是,在对待分类样本进行分类之前,需要利用训练样本对该逻辑回归模型的参数θ=[θ1, θ2, ..., θn]进行求解
最优化的模型参数就是使代价函数取得最小值的参数,所以,只要利用优化,找到使得代价函数具有最小值的参数即可。
(1)给定参数theta的初始值
(2)利用函数fminunc对代价函数进行优化,求得最优化的theta值
该函数要求输入theta的初始值、梯度和代价函数的计算函数、其他设置
(3)得到最优化的theta值后,对于某一个待分类样本,计算它的假设函数取值或者是判定边界的取值,从而可以对其分类进行判别
************************
下面开始是softmax回归问题
第0步:初始化参数
①样本特征维数n (inputSize)
②样本类别数k (numClasses)
③衰减项权重 (lambda)
第一步:载人MNIST数据集
① 载入MNIST数据集
② 载入MNIST数据集的标签
在标签集中,标签0表示数字0,为了后续处理方便,将数字0的标签改为10
注1:实验中,有时为了调试方便,在调试时,可以加入合成数据;
注2:程序文件夹中,为了分类方便,将MNIST数据集和MNIST数据集的操作函数都存放在MNIST文件夹中,在使用前,加入语句addpath mnist/即可;
随机产生参数theta的初始值
它的维数是k*n,k是类别数numClasses,n是输入样本的特征维数inputSize
第二步:编写softmax函数
该函数的作用是计算代价函数及代价函数的梯度
(1)计算代价函数
① 代价函数的计算公式如下:
② 程序中的向量化计算方法如下:
(2) 计算梯度
① 梯度的计算公式如下:
② 程序中向量化计算方法如下:
第三步:梯度检验
在首次编写完softmax函数后,要利用梯度检验算法,验证编写的softmaxCost函数是否正确;直接调用checkNumericalCradient函数
第四步:利用训练样本集学习Softmax的回归参数
第五步:对于某一个待分类样本,利用求得的softmax回归模型对其进行分类
******关于向量化的程序公式的推导******
(1)已知参数的形式
① 参数θ的形式
② 输入数据x的形式
③ θx的乘积形式,记为矩阵M
(2)单个样本的成本函数
① 单个样本的成本函数
即:
② 单个样本的假设函数
但实际中,为了不会出现计算上的溢出,需要对假设函数的每一项都做如下调整
其中:
则有:
(3)m个样本的成本函数
① m个样本的成本函数
② m个样本的假设函数
其中:
(4) 计算梯度
① 单个样本的梯度计算
注1:
注2:
② m个样本梯度的计算
则有:
******按照神经网络的形式理解softmax模型******
(1)softmax模型,可以以神经网路的形式绘制,如下图所示
可以看到,softmax模型与传统的神经网络相比,只是输出层所使用的函数发生了变化:softmax模型使用的是指数函数,而神经网络使用的是sigmoid函数;
UFLDL教程(四)之Softmax回归的更多相关文章
- 从头学pytorch(四) softmax回归实现
FashionMNIST数据集共70000个样本,60000个train,10000个test.共计10种类别. 通过如下方式下载. mnist_train = torchvision.dataset ...
- 【分类器】感知机+线性回归+逻辑斯蒂回归+softmax回归
一.感知机 详细参考:https://blog.csdn.net/wodeai1235/article/details/54755735 1.模型和图像: 2.数学定义推导和优化: 3.流程 ...
- UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)
:softmax回归 当p(y|x,theta)满足多项式分布,通过GLM对其进行建模就能得到htheta(x)关于theta的函数,将其称为softmax回归. 教程中已经给了cost及gradie ...
- Deep Learning 6_深度学习UFLDL教程:Softmax Regression_Exercise(斯坦福大学深度学习教程)
前言 练习内容:Exercise:Softmax Regression.完成MNIST手写数字数据库中手写数字的识别,即:用6万个已标注数据(即:6万张28*28的图像块(patches)),作训练数 ...
- UFLDL深度学习笔记 (二)SoftMax 回归(矩阵化推导)
UFLDL深度学习笔记 (二)Softmax 回归 本文为学习"UFLDL Softmax回归"的笔记与代码实现,文中略过了对代价函数求偏导的过程,本篇笔记主要补充求偏导步骤的详细 ...
- Deep Learning 8_深度学习UFLDL教程:Stacked Autocoders and Implement deep networks for digit classification_Exercise(斯坦福大学深度学习教程)
前言 1.理论知识:UFLDL教程.Deep learning:十六(deep networks) 2.实验环境:win7, matlab2015b,16G内存,2T硬盘 3.实验内容:Exercis ...
- Deep Learning 7_深度学习UFLDL教程:Self-Taught Learning_Exercise(斯坦福大学深度学习教程)
前言 理论知识:自我学习 练习环境:win7, matlab2015b,16G内存,2T硬盘 练习内容及步骤:Exercise:Self-Taught Learning.具体如下: 一是用29404个 ...
- Deep Learning 10_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)
前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab ...
- Softmax 回归 vs. k 个二元分类器
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢? 这一选择取决于你的类别之间 ...
随机推荐
- Java程序猿学习C++之字符串
#include <iostream> #include <string.h> using namespace std; int my_len(const char *str) ...
- 使用json-lib进行Java和JSON之间的转换【转载】
1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能. 2. ...
- Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题
由于国内的运营商问题,双卡手机获取IMSI号问题要根据厂商API 来实现. 下面我们就来做一套完整的分析运营商获取IMSI号逻辑. 1,首先我们要判断手机的平台. 1.1,判断手机是否MTK平台 1 ...
- PureMVC(JS版)源码解析(四):Notifier类
上一篇博客中,我们解析了Observer(观察者)类,这一篇博客我们来讲Notifier(通知着)类.关于Notifier类,源码注释上有这么一段: * @class puremvc.Not ...
- Android 自定义View修炼-Android开发之自定义View开发及实例详解
在开发Android应用的过程中,难免需要自定义View,其实自定义View不难,只要了解原理,实现起来就没有那么难. 其主要原理就是继承View,重写构造方法.onDraw,(onMeasure)等 ...
- CGI初识
---恢复内容开始--- 转自http://www.moon-soft.com/program/bbs/readelite887957.htm 用 C/C++ 写 CGI 程序 小传(zhcharle ...
- PHP5常量
用函数 define()设置常量 define函数有3个参数 1.必选,常量的名称,标识符 2.必选,常量的值 3.可选,默认不设置,常量名称大小写敏感.如果设置true,常量名称不区分大小写! 下面 ...
- CentOS7安装vim7.4
卸载自带vim yum remove vim-enhanced vim-common 下载vim包 wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz ...
- Bootstrap--全局CSS样式之概览
(1)HTML5文档类型 Bootstrap 使用到的某些 HTML 元素和 CSS 属性需要将页面设置为 HTML5 文档类型.在项目中的每个页面都要参照下面的格式进行设置. Code<!DO ...
- Java静态变量,常量,成员变量,局部变量
类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰.(static表示“全局的”.“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执行 ...