【机器学习】ICA特征提取
看完了ICA的一整套原理介绍后,感觉完整的介绍和andrew ng的课程中的ICA特征提取关系不是很大;在ICA的理论中,主要用于盲源分离的,也就是混合的观测数据X,通过一个正交的且其范数为1的分离矩阵W(其实是实现旋转变换),分解为相互独立的原始信号数据S=WX。(这里要求S,W,X都为n*n的矩阵)
学习完成后自己有一些理解和不解。
数据处理
在实际的造作过程中,先通过均值削减和白化操作(也可通过PCA降维),把观测数据X变为一个,各个维数之间相互独立的新数据Z;让Z通过矩阵W分解为S,S=WZ;这样处理数据可以加快数据的收敛性;减低计算的复杂度。
模型转化
1,感觉利用极大似然估计算法时,利用sigmoid函数特有的性质,来近似代替原始数据的的概率分布Ps(t),感觉这个很神奇,以前只知道期望均值,可以用平均数来代替,例如本例中也通过均值来近似估计对数似然期望;没想到连概率密度函数都可以“蒙”;通过转化把一个函数优化问题,最后通过梯度下降算法来求解最优值。
2,利用负熵转化时,感觉这个也很神奇,通过信息论中熵的概念,中心极限定理,最大熵原理,KL散度,互信息定义出了变量间相互独立行的度量,通过度量目标函数,来优化找到最佳W。
ICA进行图像特征提取
下面该进入正题了,就是利用ICA进行图像特征提取了;在ICA提取提取图像特征,这里先引用一段tornadomeet的介绍:
在sparse coding模型中,学习到的基是超完备集的,也就是说基集中基的个数比数据的维数还要大,那么对一个数据而言,将其分解为基的线性组合时,这些基之间本身就是线性相关的。如果我们想要得到线性无关的基集,那么基集中元素的个数必须小于或等于样本的维数,本节所讲的ICA(Independent
Component Analysis,独立成分分析)模型就可以完成这一要求,它学习到的基之间不仅保证线性无关,还保证了相互正交。
ICA特征提取本质上是对原始数据X,通过矩阵W,来实现一个线性变换;这里要求W为正交阵,变换后数据Y(Y=WX)之间线性无关,且正交;而且可以通过变换W矩阵的维度,来控制学习的特征的个数。
在模型变换上面,ICA特征提取并没有用上面提到的似然估计,熵等方法,而是通过类似autoencoder的方式,让自己和自己比较,是原始数据和重构数据误差达到最小;然后通过变换W矩阵,是W正交化。我们知道autoencoder是通过simoid(WX+B)来重构数据的,这个过程有两个变换,线性变换部分:WX+b;非线性部分:sigmoid部分;由于sigmoid非线性变换的存在,所以最后没有约束权值矩阵W必须为正交阵;所以通过autoencoder学习到的特征之间有相关性的。
所以利用ICA提取特征应该叫做,ICA autoencoder 或者 正交线性 autoencoder
ICA图像特征提取过程,由于tornadomeet大牛写的很好就直接copy了。
给出的代价函数却为:
(线性重构误差)
代价函数的偏导公式(这样实现时,可以偷懒不用推导了),只不过它给出的公式有一个小小的错误,我把正确的公式整理如下:
错误就是公式右边第一项最左边的那个应该是W,而不是它的转置W’,否则程序运行时是有矩阵维数不匹配的情况。
4. 最后就是对参数W进行迭代优化了,由于要使W满足正交性这一要求,所以不能直接像以前那样采用lbfgs算法,而是每次直接使用梯度下降法进行迭代,迭代完成后采用正交化步骤让W变成正交矩阵。只是此时文章中所说的学习率alpha是个动态变化的,是按照线性搜索来找到的。W正交性公式为:
5. 如果采用上面的代价函数和偏导公式时,用Ng给的code是跑不起来的,程序在线搜索的过程中会陷入死循环。(线搜索没有研究过,所以完全不懂)。最后在Deep Learning高质量交流群内网友”蜘蛛小侠”的提议下,将代价函数的W加一个特征稀疏性的约束,(注意此时的特征为Wx),然后把Ng的code中的迭代次数改大,比如5000,
其它程序不用更改,即可跑出结果来。
稀疏代价函数:
偏导为:
其中一定要考虑样本的个数m,否则即使通过了代价函数和其导数的验证,也不一定能通过W正交投影的验证。
程序代码:
参见tornadomeet的博客
http://www.cnblogs.com/tornadomeet/archive/2013/04/25/3041963.html
其中有个错误:就是在orthonormalICACost.m函数中,grad项的后面忘记除以样本总数num_samples了;如果不处理程序会陷入死循环。
应该是:
grad = ……+...
(weightMatrix*patches./sqrt((weightMatrix*patches).^2+epsilon))*patches'/ num_samples
【机器学习】ICA特征提取的更多相关文章
- 机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)
假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...
- sklearn机器学习-特征提取1
scikit-learn机器学习的特征提取部分较多nlp内容,故学到一半学不下去,看完nltk再来补上 scikit-learn机器学习的特征提取这一章感觉讲的不是特别好,所以会结合着来看 首先是Di ...
- paper 156:专家主页汇总-计算机视觉-computer vision
持续更新ing~ all *.files come from the author:http://www.cnblogs.com/findumars/p/5009003.html 1 牛人Homepa ...
- paper 61:计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
转载出处:blog.csdn.net/carson2005 以下链接是本人整理的关于计算机视觉(ComputerVision, CV)相关领域的网站链接,其中有CV牛人的主页,CV研究小组的主页,CV ...
- 相似度度量:欧氏距离与余弦相似度(Similarity Measurement Euclidean Distance Cosine Similarity)
在<机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)>一文中,我们通过计算文本特征向量之间 ...
- 关于国内外CV领域牛人的博客链接 .
此文为转载文章,尊重知识产权http://blog.csdn.net/carson2005/article/details/6601109此为原文链接,感谢作者! 以下链接是关于计算机视觉(Compu ...
- 计算机视觉(ComputerVision, CV)相关领域的站点链接
关于计算机视觉(ComputerVision, CV)相关领域的站点链接,当中有CV牛人的主页.CV研究小组的主页,CV领域的paper,代码.CV领域的最新动态.国内的应用情况等等. (1)goog ...
- 一文看懂AI深度学习丨曼孚科技
深度学习(Deep Learning)是机器学习的一种,而机器学习是实现人工智能的必经途径. 目前大部分表现优异的AI应用都使用了深度学习技术,引领了第三次人工智能的浪潮. 一. 深度学习的概念 深度 ...
- 小匠第二周期打卡笔记-Task05
一.卷积神经网络基础 知识点记录: 神经网络的基础概念主要是:卷积层.池化层,并解释填充.步幅.输入通道和输出通道之含义. 二维卷积层: 常用于处理图像数据,将输入和卷积核做互相关运算,并加上一个标量 ...
随机推荐
- Java8-Stream-No.11
import java.util.Arrays; import java.util.List; public class Streams11 { static class Person { Strin ...
- 【Android-Zxing框架】二维码扫描框区域大小与不同手机分辨率适配问题
Zxing框架进行二维码扫描时候会发现,随着分辨率的增加,扫描框会越来越小,SurfaceView扫描窗口就看不见了,我们可以自己定义扫描窗口的大小,以及适配屏幕问题. Zxing包中有个类Camer ...
- 【转】css样式的书写顺序及原理——很重要!
记得刚开始学习前端的时候,每次写css样式都是用到什么就在样式表后添加什么,完全没有考虑到样式属性的书写顺序对网页加载代码的影响.后来逐渐才知道正确的样式顺序不仅易于查看,并且也属于css样式优化的一 ...
- OFDM留空中央直流子载波目的及原理
目的: 降低峰均比! 原理: IDFT公式: 直流分量k接近0,公式近似于对X(k)进行累加,因此直流分量会产生较大的信号能量,造成严重的峰均比. 详细内容可参考: https://dwz.cn/Zl ...
- encodeURI()、encodeURIComponent()、escape()
URI的通用格式如下: /*** 协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数1=值1&参数2=值2+值3#标志 **/ /*** http://use ...
- python 学习资料 常用
https://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html 利用python 进行数据分析第二版 https://www.jianshu ...
- luogu 1156 垃圾陷阱 动态规划
Code: #include <bits/stdc++.h> #define N 4004 #define setIO(s) freopen(s".in"," ...
- luogu P4194 矩阵
嘟嘟嘟 先二分. 令二分的值为\(mid\),则对于每一行都要满足\(|\sum_{i = 1} ^ {n} (A_{ij} - B_{ij})|\),把绝对值去掉,就得到了\((\sum_{i = ...
- C# 父类代码动态转换子类
百度上搜索C# 如何父类运行时转换成子类,没有得到相应答案,突然想起C# 有dynamic类型试试看结果成功了... 以后编写代码类似这样的代码 就可以删减掉了 if (en.type == EMap ...
- SpringMVC——拦截器,过滤器实现登录拦截
一.拦截器与过滤器的区别 1.过滤器 依赖于servlet容器.在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次.使用过滤器的目的是用来做一些过滤操 ...