机器学习 笔记(二) Multi-class classification
2016-04-12 21:08
316 查看
刚刚学了Andrew Ng在Coursera上的Machine Learning公开课,感觉在学习的过程中,有一些疑惑,尤其是各种算法之间的联系,以及在模型训练中遇到的普遍性的注意点,这里做一个回顾和总结。
Multi-class classification problem
案例:数字识别(0,1,2,…,9),待识别的数字图片如下所示,
Q1. 如何将数字的图像转变为向量?
A1.
1) 如果图片是20 pixel*20 pixel的数字灰度图像,可以取每个像素为基本单元,将每个单元灰度级用一个浮点数表示(0~1)。再将20*20的像素展开(unroll)为1个400维度的向量。
2)如果是RGB图像,每个像素用三个8位的数(0~255)表示,分别代表红、绿、蓝的强度(intensity)。
问题描述:特征为X,输出为y,要学习的参数为theta。
方法1. Logic regression algorithm
用逻辑回归算法,只需依次令y=k(0,1,2…9),将数字识别变成0-1分类问题,依次学习每个数字对应的参数,伪代码如下
方法2. Neural network algorithm
用神经网络算法,重点在于特征维度设计、特征选取,神经网络模型的设计(几层,几个隐藏单元),模型如下:
输入单元为400+1维,隐藏层为25+1维,输出层为10维,神经网络算法执行步骤如下:
a) Forward propagation -> Cost function
b) Back propagation– Grad
c) Gradient checking 保证grad计算正确,但是此步骤之后,记得注释掉该功能,防止它拖慢程序速度
d) Optimization 用梯度下降方法或者其它先进方法去最优代价函数
e) Regularization调整lambda项
参数theta随机初始化
注意:symmetric breaking 问题,如果theta初始化时每个分量都相同,那么神经网络的同一层的各个单元输出(激励输出)也相同,模型训练无法进行。
如何初始化Theta? 方法如下:
Theta = rand(L_out, 1+L_in)*2*epsilon_init - epsilon_init ,
theta在[-epsilon_init, epsilon_init]上随机变化
如何选择epsilon_init? 一个有效的方法是令
epsilon_init的选择基于神经网络中与Theta相邻层的单元数,L_in=Sl输入单元的单元数,L_out=Sl+1,输出单元的单元数。
Multi-class classification problem
案例:数字识别(0,1,2,…,9),待识别的数字图片如下所示,
Q1. 如何将数字的图像转变为向量?
A1.
1) 如果图片是20 pixel*20 pixel的数字灰度图像,可以取每个像素为基本单元,将每个单元灰度级用一个浮点数表示(0~1)。再将20*20的像素展开(unroll)为1个400维度的向量。
2)如果是RGB图像,每个像素用三个8位的数(0~255)表示,分别代表红、绿、蓝的强度(intensity)。
问题描述:特征为X,输出为y,要学习的参数为theta。
方法1. Logic regression algorithm
用逻辑回归算法,只需依次令y=k(0,1,2…9),将数字识别变成0-1分类问题,依次学习每个数字对应的参数,伪代码如下
for k=1:num_labels [theta] = fmincg (@(t)(lrCostFunction(t, X, (y == k), lambda)),initial_theta, options); all_theta(k,:) = theta'; end
方法2. Neural network algorithm
用神经网络算法,重点在于特征维度设计、特征选取,神经网络模型的设计(几层,几个隐藏单元),模型如下:
输入单元为400+1维,隐藏层为25+1维,输出层为10维,神经网络算法执行步骤如下:
a) Forward propagation -> Cost function
b) Back propagation– Grad
c) Gradient checking 保证grad计算正确,但是此步骤之后,记得注释掉该功能,防止它拖慢程序速度
d) Optimization 用梯度下降方法或者其它先进方法去最优代价函数
e) Regularization调整lambda项
参数theta随机初始化
注意:symmetric breaking 问题,如果theta初始化时每个分量都相同,那么神经网络的同一层的各个单元输出(激励输出)也相同,模型训练无法进行。
如何初始化Theta? 方法如下:
Theta = rand(L_out, 1+L_in)*2*epsilon_init - epsilon_init ,
theta在[-epsilon_init, epsilon_init]上随机变化
如何选择epsilon_init? 一个有效的方法是令
epsilon_init的选择基于神经网络中与Theta相邻层的单元数,L_in=Sl输入单元的单元数,L_out=Sl+1,输出单元的单元数。
相关文章推荐
- Tyvj_P1008
- Linux——利用文件创建swap分区
- C++常见字符输入的做法
- NYOJ 148 fibonacci数列(二)【矩阵快速幂】
- 数据结构-栈的实现之数制转换
- 线程的Alertable与User APC
- mac iterm2配置
- 2016京东编程题:年终奖
- listview使用Adapter,多次调用getview函数,从而影响性能问题
- C/C++用new、delete分配回收堆中空间
- 用百度API显示地图
- 迷瘴
- java多线程系列:锁
- Mysql源码分析
- 二叉树先序遍历 -- 递归和非递归实现
- c++实验2-计算并输出体重状态
- ABP源码分析二十九:ABP.MongoDb
- C++第三次上机实验其他作业
- 远程连接打印机0x00000709错误
- 树的遍历及相关题目