推荐功能学习笔记(二)PCA

来源:互联网 发布:c语言char a[]= 编辑:程序博客网 时间:2024/05/17 22:46

PCA,具体我也说不上,我读书少。英文是这么写的(Principle Components Analysis)翻译一下啊,就是主成份分析。

从名字我们可以看出来,他能从多种相关成分中挑出主成份,对吧?比如一个长方体,长:200M,宽:5CM,高:10M,单从这个物体来说我们完全可以只取长和高其中2维,然后放入2维坐标系,是不是我们就做到了降维呢?OK,在对商品进行分析时,是不是面对诸多属性,很高的复杂度,我们也要做一下降维呢?PCA用到了吧。

一般情况,我们会有多个Item,例如还是长方体,长宽高3个纬度,不一定每一个都是长和高是主成份吧?所以这种肉眼分析法是行不通的,那么问题来了,我们要怎么做呢,很多文章都对PCA做了解释和分析,都写得很好,但还是我读书少,数学真的跟不上...所以真的推荐大家在学校的时候一定要把数学学好。

进入正题:如何做PCA?----------------------------------------------------------证明方法都略过,我只是要拿出主要的成份而已。

1.列出商品和纬度的矩阵ITEM=M*N:行M是商品个数,列N是纬度个数(对各维度做一下处理(xi=xi-mean(x)));

2.计算这个矩阵的协方差矩阵:把这个任务交给Matlab,很简单:COV_MATRIX=cov(ITEM)                    大小:(N*N);

3.计算这个协方差矩阵的特征向量和特征值:依然Matlab:[A,B]=eig(COV_MARTIX)     N个特征值和对应的特征向量;

返回数据格式如上A矩阵反映了和B矩阵特征值对应的特征向量

4.挑选较大的特征值:如上图明显的可以发现1.2840是比较大的特征值,这里是二维情况,多维也是类似的,放心把任务给Matlab,没问题的。选择这个特征值对应的特征向量[0.6779 ;0.7352](2*1的矩阵,转置不好打,粘到matlab里就明白了) 真实情况下我们选N'个纬度(对应较大的N'个特征值),用选取的特征向量组成V=N*N'大小的矩阵。

5.还原数据:原始矩阵ITEM(M*N)*V(N*N')就得到了我们降维后的矩阵M*N',维度由N降到了N'。

是不是现在我们就可以从N'个特征来分析商品了呢?

就算WEB应用是JAVA做的,后台对数据的处理其实我们可以用任何的语言去做,非要用JAVA做的话无非就是去实现一些所需要的API。但问题又来了,如何保证矩阵过大的时候数据不撑爆内存呢...稀疏矩阵或者是什么?过两天继续研究一下再说吧。


0 0
原创粉丝点击