矩阵理论结课作业主要介绍了非负矩阵分解,同时基于非负矩阵分解讲了两个实例。
非负矩阵分解( Non-negative matrix factorization, NMF )是一种常用的矩阵分解方法。对于一个 的矩阵 V ,可以将其分解为两个非负矩阵的乘积 W 和 H ( W 和 H 的相乘只能尽量逼近 V ) ,其中 W 的大小为 m d , H 的大小为 d n 。用数学公式可以将其表示为:
损失函数有多种定义方式,其中最常见的是采用欧氏距离来定义损失函数进而描述 V 和 WH 的近似程度。对于式 (1) ,我们直接想法就是 V 和 WH 每个对应位置的元素都应该尽量接近,所以定义损失函数为
根据矩阵乘法的定义,矩阵WH 的第 i 行 j 列可以表示为
结合式 (7) 、式 (8) 和 KKT 条件,我们可以由拉格朗日乘子法得到无约束最优化问题,即:
对于 nn的矩阵 A 和 B,我们有以下表示:
对上式子进行整理可以得到:
对其进行矩阵求导并整理可以得到
上述式子可以通过迭代法来求解
关于NMF的应用
第一个使用 NMF 做推荐算法(在CSDN上看一个大佬写的,自己修改了以下)
该算法首先定义用户和电影两个集合,通过每个用户对部分电影的打分,预测该用户对其他没看过电影的打分值,这样可以根据打分值为该用户做出推荐。其中,用户和电影的关系,可以用一个矩阵来表示,每一列表示用户,每一行表示电影,每个元素的值表示用户对已经看过的电影的打分。
接下来,我们预先设置这些电影可以分为两个部分,然后使用库函数对电影
主题分布矩阵和用户分布矩阵进行绘制
如上图 所示,在设置电影主题数为 2 的情况下, “ 星际穿越 ” , “ 死神来了 ” , “ 老友记” 三者更加接近,而 “ 大耳朵图图 ” 和 “ 熊出没 ” 更加接近。通过分析后两者属于动画片,因此我认为这种分法是较为合理的。在用户分布矩阵中,“ 小姚 ” 和 “ 小陈 ” 极度相似,这两个用户仅在“ 死神来了 ” 这个影片上评分不同,其余评分都是相同的,因此我们认为这一划分也是合理的。最后,我们对该算法进行测试,选择用户“ 小姚 ”让算法为其推荐影片, 由下图 可以看出,因为 “ 小姚 ” 没有对 “ 大耳朵图图 ” 有过评分,因此算法会将该影片推荐给用户。
到此为止,使用 NMF 做推荐算法的整个过程已经完整呈现。但根据上文对矩 阵分解概念的介绍,我们知道在矩阵分解中一定会有误差。在这个案例中,误差主要来源于预先设置的电影主题数目,接下来本文设置不同的电影主题数目并记录误差(如下表 所示)。由表可知,随着主题的增多误差逐渐降低。原因在于主题越多,越接近原始矩阵,所以误差越少。
这也启示我们在使用 NMF 做推荐算法时,要提前确定好需求再定义聚类数目
第二个使用 NMF 识别手写体
由上述对 NMF 的简单介绍可以知道, NMF 主要是对原始矩阵进行分解以得特征矩阵 W 和系数矩阵和 H ,这启发我们可以利用 NMF 实现特征提取。本节选取了著名的手写体数据集—2-digits ,对其使用 NMF 实现特征提取。图 6 是该数据集真实分布,由图可知,该数据集由 64 张照片组成,其中每张照片中含有两个数字。
对于该数据集的处理本文采用的主要步骤如下:
1 、随机初始化特征矩阵 W 和系数矩阵和 H ,设定特征提取数目、误差阈值和
迭代次数
2 、基于前文所介绍的求解方法对 W 和 H 进行迭代更新
3 、当误差小于误差阈值或达到迭代次数,更新停止
4 、输出特征矩阵 W , W 矩阵的每一列即为一个特征(对应一个数字)
5 、将得到的 W 矩阵进行绘制,得到识别结果
下图利用 NMF 识别后的结果,如果所示 NMF 的较为清晰地识别出 8 个特征数目(8 是预先在程序中设置的特征提取数目)。
总结
在大数据时代,数据大多呈现出维数高,数据量大等特点。缩减数据维数是指从高维数据中提取知识,发现内在规律,减少冗余,增强特征价值密度,进而提高后续计算效率。非负矩阵分解作为非线性且带有非负约束的矩阵分解降维方法,具有可解释性强、计算方便、可大规模处理数据等优点。