欢迎来到天天文库
浏览记录
ID:5366738
大小:599.92 KB
页数:21页
时间:2017-12-08
《r语言案例_用bignmf 进行非负矩阵分解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、算法介绍bignmf包例子总结用bignmf进行非负矩阵分解潘岚锋邱怡轩魏太云......算法介绍bignmf包例子总结•一个具有统计味道的算法•一个软件包•两个例子......算法介绍bignmf包例子总结非负矩阵分解在图像处理和文本挖掘领域有广泛的应用。非负约束导致分解得到的矩阵具有强稀疏性,使结果易于解释。Vnm≈WnrHrm其中V;W;H≥0,r≪min(m;n)使用最简单的平方和损失函数,min∥V−WH∥2W;H0......算法介绍bignmf包例子总结为什么非负?如果没有非负约束,平方和损失下的最优解就是奇异值分解的前r个特征根对应的特征向量。但是
2、奇异值分解得到的矩阵通常看不出来实际意义,仅仅是方差最大的因子1,方差第二大的因子2。。。非负矩阵分解的思路与因子分析类似,以因子的非负线性组合来最大程度的表达原数据。非负约束的结果一:因子是稀疏的,每个因子只与部分样本有关,易于解释;二:因子的系数是稀疏的,是数据本身也可以得到解释。......算法介绍bignmf包例子总结如果已知这些因子,那么非负矩阵分解就是一个简单的多响应变量回归问题(要求系数非负)。在因子未知的情况下,将因子设为随机值,得到系数,再根据系数求因子,然后继续求系数。。。重复这个过程会发现,因子不再是随机的,而是包含了原数据的信息的。......算法
3、介绍bignmf包例子总结已有算法非负矩阵分解已经有了很多算法,例如MultiplicativeUpdate,ProjectedGradientMethod,GradientDescent。交替最小二乘法比较符合上面的解释,具有更好的统计意义,而且收敛性质很好,计算速度快。已有的交替最小二乘法都使用冷冰冰的二次规划算法求解非负回归,我们使用的最小角回归的思路解非负回归,更有统计的感觉,而且速度更快(至少不会慢)。......算法介绍bignmf包例子总结交替最小二乘1.初始化W2.针对V的每一列Vj,以W为自变量求hj=argminhj0f(Vj;Whj),得到H=
4、(h1;h2;:::;hm)3.针对V的每一行Vj,以H为自变量求w=argminf(VT;HTw),得到W=(w;w;:::;w)Tiwi0ii12n4.重复2、3步直至收敛条件满足......算法介绍bignmf包例子总结bignmf包bignmf包就是求解上面说的问题。只有两个函数:•bignmf用于一般矩阵的分解•bignmfsp用于稀疏矩阵的分解,接受用Matrix包生成的稀疏矩阵用法都非常简单,主要两个参数,一个设定矩阵,一个设定秩......算法介绍bignmf包例子总结例子v_mat<-matrix(rexp(60000,2),200,300)sys
5、tem.time(re<-bignmf(v_mat,5))v_mat<-matrix(rexp(6000000,2),2000,3000)v_mat[v_mat6、法介绍bignmf包例子总结C++实现借助伟大的Rcpp和RcppEigen包,算法内层用C++代码实现•cdouterloop函数负责用坐标下降法解非负回归,内部各种显式循环•wupdate把V按行拆成n个小的回归问题,以H为自变量,求解W•hupdate把V按列拆成m个小的回归问题,以W为自变量,求解H•spwupdate和sphupdate分别是稀疏版本......算法介绍bignmf包例子总结稀疏矩阵C++库Eigen支持稀疏矩阵的运算。RcppEigen可以把Matrix包生成的稀疏矩阵传递到C++中。直接把Matrix包得到的系数矩阵输入函数bignmfsp中7、就可以......算法介绍bignmf包例子总结支持并行非负矩阵分解可以很好的支持并行运算wupdate和hupdate都是把V拆成多个小的回归问题,这些小的问题可以分散到多个cpu上计算。......算法介绍bignmf包例子总结更大?即使V,W,H三个矩阵的大小都远远超过了内存也没有关系。把原矩阵和结果矩阵分散成许多个小部分,每次读取一小部分可以处理的数据,分别计算。1.每次读取V和W的一行或几行,计算WTW和WTV2.读取WTV的一列或多列,计算出H对应的列;在得到H的列的同时,可以开始计算HHT和VHT3.读取VHT的
6、法介绍bignmf包例子总结C++实现借助伟大的Rcpp和RcppEigen包,算法内层用C++代码实现•cdouterloop函数负责用坐标下降法解非负回归,内部各种显式循环•wupdate把V按行拆成n个小的回归问题,以H为自变量,求解W•hupdate把V按列拆成m个小的回归问题,以W为自变量,求解H•spwupdate和sphupdate分别是稀疏版本......算法介绍bignmf包例子总结稀疏矩阵C++库Eigen支持稀疏矩阵的运算。RcppEigen可以把Matrix包生成的稀疏矩阵传递到C++中。直接把Matrix包得到的系数矩阵输入函数bignmfsp中
7、就可以......算法介绍bignmf包例子总结支持并行非负矩阵分解可以很好的支持并行运算wupdate和hupdate都是把V拆成多个小的回归问题,这些小的问题可以分散到多个cpu上计算。......算法介绍bignmf包例子总结更大?即使V,W,H三个矩阵的大小都远远超过了内存也没有关系。把原矩阵和结果矩阵分散成许多个小部分,每次读取一小部分可以处理的数据,分别计算。1.每次读取V和W的一行或几行,计算WTW和WTV2.读取WTV的一列或多列,计算出H对应的列;在得到H的列的同时,可以开始计算HHT和VHT3.读取VHT的
此文档下载收益归作者所有