NMF把一个矩阵分解为两个矩阵的乘积,可以用来解决很多问题,例如:用户聚类、item聚类、预测(补全)用户对item的评分、个性化推荐等问题。NMF的过程可以转化为最小化损失函数(即误差函数)的过程,其实整个问题也就是一个最优化的问题。详细实现过程如下:(其中,输入矩阵很多时候会比较稀疏,即很多元素都是缺失项,故数据存储采用的是libsvm的格式,这个类在此忽略)
package NMF_danji;
import java.io.File;
import java.util.ArrayList;
/**
* @author 玉心sober: http://weibo.com/karensober
* @date 2013-05-19
*
* */
public class NMF {
private Dataset dataset = null;
private int M = -1; // 行数
private int V = -1; // 列数
private int K = -1; // 隐含主题数
double[][] P;
double[][] Q;
public NMF(S