(MIT)Deep learning 学习笔记(4)

来源:互联网 发布:magento php扩展 编辑:程序博客网 时间:2024/05/02 02:55
一直生病加上放假,居然躺了这么久了,这篇学习还是打算继续写下去,一步一个脚印的走下去把。文章的第一部分是需要的数学知识,如果不是很熟悉还是值得看一看的,国外的书都很严谨,各个推理之间都很严密,同时也能学习下如何写英文文章的原理部分。线代和概率都很基础。不过对PCA的描述真是让我又从另一个角度认识了这种算法。Principal Components Analysis,主成分分析,几十年前就诞生的一项非常实用的算法。说它实用有两点,一点是因为它既可以进行有损压缩并且还具有不错的压缩比,另一点是它可以用来提取信息的特征。通俗来讲,主成分分析是通过对信息矩阵进行特征值分解,获得它的特征向量和特征值,是非常简单的数据处理。而且因为信息通常是有一定规律的,所以会导致特征会集中体现在某几个特征值和特征向量上面。那么只要把数值大的特征值对应的特征向量作为编码矩阵,便可以极大的压缩信息。而在模式识别上面,一个个不同样本的信息也都反应在特征向量么,同时特征向量的非零部分包含着样本绝大数的信息,常常用于识别中。那么来看下文中是如何引入PCA的。首先,对于m个N维样本X,想要通过一个映射,将其压缩到I维,记作C。假设映射为 X~=DC ,因为信息被压缩,所以这里用的约等号。简便起见限制D为正交的归一的矩阵。那么问题变为如何寻找一个合适的D矩阵。引入公式:![距离公式](http://img.blog.csdn.net/20170405233339757?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)这里r(c) = DC,为DC相乘后的具体值。问题就变成了求最短距离的问题了。这里我们对几何距离进一步做处理,变化如下:![](http://img.blog.csdn.net/20170405233535586?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)既然变成了平方模式,可以根据矩阵特性进一步展开![](http://img.blog.csdn.net/20170405233635758?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)整理之后,考虑到交换性,消去正负项之后![](http://img.blog.csdn.net/20170405233759385?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)可以看到压缩前后的距离首先是与样本自身的发散性有关,这个是在压缩中一定存在的误差。对于后面的进一步整合![](http://img.blog.csdn.net/20170405233957275?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)最后这样展开![](http://img.blog.csdn.net/20170405234128682?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)明眼人可能已经看出来了,这就是要对X做特征值分解。还是不要离题,继续从距离这个角度推导。既然D是个矩阵,那么会作用在每个x上面,那么新的误差距离公式为:![](http://img.blog.csdn.net/20170405234634467?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)从这里看出距离变为和每个样本的差值的模了,但是这样看着不舒服,代入上面的公式![](http://img.blog.csdn.net/20170405234756024?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)虽然是最简单模式了,但如何下手去解了,这里就要依靠矩阵的迹来辅助计算了。可能在刚学现代的时候都觉得迹没什么用,但是实际上迹包含着矩阵大部分信息,是矩阵运算中最重要的方法之一。![这里写图片描述](http://img.blog.csdn.net/20170405235020637?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)迹有交换性,能很方便的消去多余项。![这里写图片描述](http://img.blog.csdn.net/20170405235125279?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9naWNvcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)最后将公式变为一个求最大值式子,换句话说,也是需要特征值分解的地方,只有l个最大特征值对应的特征向量才会使得该式子最大。从这里可以看出最初的主成分分析也是从最基础的需求推导出来的,也表明了基础的重要性。下面是一段我研究生时候参考来的代码:

“`
function main()
%***主成份分析** %
读入文件数据 X=load(‘data.txt’);
%==========方法1:求标准化后的协差矩阵,再求特征根和特征向量=================
%标准化处理
[p,n]=size(X);
for j=1:n
mju(j)=mean(X(:,j));
sigma(j)=sqrt(cov(X(:,j)));
end
for i=1:p
for j=1:n
Y(i,j)=(X(i,j)-mju(j))/sigma(j);
end
end
sigmaY=cov(Y);
%求X标准化的协差矩阵的特征根和特征向量
[T,lambda]=eig(sigmaY);
disp(‘特征根(由小到大):’);
disp(lambda);
disp(‘特征向量:’);
disp(T);
%方差贡献率;累计方差贡献率
Xsum=sum(sum(lambda,2),1);
fai(i)=lambda(i,i)/Xsum;
end
psai(i)= sum(sum(lambda(1:i,1:i),2),1)/Xsum;
disp(‘方差贡献率:’);
disp(fai);
disp(‘累计方差贡献率:’);
disp(psai);

0 0
原创粉丝点击