基于线性投影结构的非负矩阵分解
- 格式:pdf
- 大小:4.15 MB
- 文档页数:17
非负矩阵分解算法
1 非负矩阵分解
非负矩阵分解(Non-Negative Matrix Factorization,NMF)是
一种特殊的矩阵分解,它采用的分解维度包含非负的值。
NMF的定义是这样的:给定一个m阶n列非负矩阵A,有k非负数,将其分解成两个
m阶n列非负矩阵W和H,使得:A = WH.NMF可以应用于许多不同领域,包括信号处理、数据挖掘、图像处理、信息检索、自然语言处理等领域。
2 优点
非负矩阵分解具有许多优点:首先,非负矩阵分解有着很明显的
几何解释,可以用于多维数据挖掘,聚类和可视化。
其次,它的算法
本身不需要依赖于边界条件和/或初始条件,算法具有高度稳定性,用
于提取潜在信息特征,例如隐藏结构、主题、技能、现象等。
此外,
非负矩阵分解可以用较少的计算消耗从较大的数据集中提取有用的特征,从而降低空间需求并提高运行效率。
3 应用
非负矩阵分解的应用较广泛,在数据挖掘领域可用于高维数据降维、高维数据可视化、文本挖掘、模式挖掘以及聚集分析等方面。
在
信号处理方面,NMF可以用来提取信号中的有效信息,从而获得必要信息。
此外,NMF也可以用于表示图像并对其进行分类。
在自然语言处
理(Natural Language Processing)领域,NMF可以把文本表示成主题,以帮助文本分类、信息检索和在线推荐等任务。
4 结论
可以看出,非负矩阵分解在数据挖掘和信号处理等多领域具有重要的应用价值,特别是其几何解释、算法稳定性以及计算代价等众多优势的共同作用。
然而,NMF的应用还有待更多的研究,才能令它登上数据挖掘技术的高峰,为社会带来更多的发展。
量)中包含大部分为0的系数,因此基图像矩阵牙和编码图像矩阵H是稀疏的(sParse)。
基图像的稀疏是因为它是非整体的而且包含多个版本的嘴、鼻子和其它面部元件,在这里各种版本的嘴、鼻子和其它面部元件是在不同的位置和处于不同的形式。
整张脸的多样性就是通过组合这些不同的部件所生成的。
尽管所有的部件至少被一张脸使用,但对于给定的脸并不一定同时使用所有的可用的部件。
这就导致了一个稀疏地分散的图像编码,与v Q的一元编码和P C A的全部分散的编码形成鲜明的对比。
N M F口」二叫叫l111l ll口L」乞_」卜尸叫叫卜一卜扁洲洲...l l习「二]]]l‘蓄日.l ll.l ll...「「]]]至习}}州州I11卜州卜了--.!!!...l一~门门一门门r一,「一几几鱼鱼匕列列「「」.!!!「翌r~~~~呈呈_」月匡匡{{{李一{{{江习l二月一一l r一-,厂气飞一1一T丁一疡一}}牲大1__里f户_」~__l l..!!里哩到「「工二)))钾一:片.r l‘r r一1:阅一宁一卞一二,二,户l l,、百..11.气馨。
书一各.本.4本4一一··1一f+于+卡一··上址全士上上福福~备牛4半4--p C A辍蟒矍黔鬓辍卜卜玺玺铆铆~呀,.曰卜,44r尹石畏‘‘‘气丁习巨蒸蒸俘砚勺勺爵自自酬酬爵圃令令麒圃麒麒肠肠翻嚷寥娜娜氢氢翩翩{密令润瞬绝翻眯眯之麟爵观胰爵广截截彝啊!!!版{{{嗽叫解解遗、髯摹!!!瓮髯酬111·惑一履图2.1N M F、V Q、P C A对人脸的表示N M F是对人脸的的基于部分的表达,而V Q和P C A是对人脸的基于整体的表达。
这三种分析方法都被应用到一个m=2429的人脸图像数据库中,每个图像由n=19xl9像素组成,最终形成一个n x m矩阵V。
这三种方法都是设法找到一种V的近似分解V二不朽叮,但是牙和H规定不同的约束条件。
⾮负矩阵分解(NMF)原理及算法实现⼀、矩阵分解回想矩阵分解是指将⼀个矩阵分解成两个或者多个矩阵的乘积。
对于上述的⽤户-商品(评分矩阵),记为能够将其分解为两个或者多个矩阵的乘积,如果分解成两个矩阵和。
我们要使得矩阵和的乘积能够还原原始的矩阵当中,矩阵表⽰的是m个⽤户于k个主题之间的关系,⽽矩阵表⽰的是k个主题与n个商品之间的关系通常在⽤户对商品进⾏打分的过程中,打分是⾮负的,这就要求:这便是⾮负矩阵分解(NMF)的来源。
⼆、⾮负矩阵分解2.1、⾮负矩阵分解的形式化定义上⾯介绍了⾮负矩阵分解的基本含义。
简单来讲,⾮负矩阵分解是在矩阵分解的基础上对分解完毕的矩阵加上⾮负的限制条件。
即对于⽤户-商品矩阵找到两个矩阵和,使得:同⼀时候要求:2.2、损失函数为了能够定量的⽐较矩阵和的近似程度,提出了两种损失函数的定义⽅式:欧⼏⾥得距离:KL散度:在KL散度的定义中,。
当且仅当时取得等号。
当定义好损失函数后,须要求解的问题就变成了例如以下的形式,相应于不同的损失函数:求解例如以下的最⼩化问题:2.3、优化问题的求解乘法更新规则,详细操作例如以下:对于欧⼏⾥得距离的损失函数:对于KL散度的损失函数:上述的乘法规则主要是为了在计算的过程中保证⾮负,⽽基于梯度下降的⽅法中,加减运算⽆法保证⾮负。
事实上上述的惩罚更新规则与梯度下降的算法是等价的。
以下以平⽅距离为损失函数说明上述过程的等价性:平⽅损失函数能够写成:使⽤损失函数对求偏导数:依照梯度下降法的思路:即为:令,即能够得到上述的乘法更新规则的形式。
2.4、⾮负矩阵分解的实现1from numpy import *2from pylab import *3from numpy import *45def load_data(file_path):6 f = open(file_path)7 V = []8for line in f.readlines():9 lines = line.strip().split("\t")10 data = []11for x in lines:12 data.append(float(x))13 V.append(data)14return mat(V)1516def train(V, r, k, e):17 m, n = shape(V)18#先随机给定⼀个W、H,保证矩阵的⼤⼩19 W = mat(random.random((m, r)))20 H = mat(random.random((r, n)))21#K为迭代次数22for x in range(k):23#error24 V_pre = W * H25 E = V - V_pre26#print E27 err = 0.028for i in range(m):29for j in range(n):30 err += E[i,j] * E[i,j]31print(err)32 data.append(err)3334if err < e:35break36#权值更新37 a = W.T * V38 b = W.T * W * H39#c = V * H.T40#d = W * H * H.T41for i_1 in range(r):42for j_1 in range(n):43if b[i_1,j_1] != 0:44 H[i_1,j_1] = H[i_1,j_1] * a[i_1,j_1] / b[i_1,j_1]4546 c = V * H.T47 d = W * H * H.T48for i_2 in range(m):49for j_2 in range(r):50if d[i_2, j_2] != 0:51 W[i_2,j_2] = W[i_2,j_2] * c[i_2,j_2] / d[i_2, j_2]5253return W,H,data5455565758if__name__ == "__main__":59#file_path = "./data_nmf"60# file_path = "./data1"61 data = []62# V = load_data(file_path)63 V=[[5,3,2,1],[4,2,2,1,],[1,1,2,5],[1,2,2,4],[2,1,5,4]]64 W, H ,error= train(V, 2, 100, 1e-5 )65print (V)66print (W)67print (H)68print (W * H)69 n = len(error)70 x = range(n)71 plot(x, error, color='r', linewidth=3)72 plt.title('Convergence curve')73 plt.xlabel('generation')74 plt.ylabel('loss')75 show()这⾥需要注意训练时r值的选择:r可以表⽰和主题数或者你想要的到的特征数K值的选择:k表⽰训练的次数,设置的越⼤模型的拟合效果越好,但是具体设置多少,要根据性价⽐看,看误差曲线的变化。
非负矩阵分解
非负矩阵分解(Non-Negative Matrix Factorization, NMF)是一种机器学习技术,用于将数据重新表示成低维空间中的基本因素。
其基本概念是将原始数据表
示为两个非负矩阵的乘积。
非负矩阵分解的主要用途是文本挖掘,特别是分析大量文档,确定文档主题或概念关系。
此外,它也被用于图像和声音分析和表示。
非负矩阵分解确保数据表示形式中所有项均为非负值,这可以将分析从基于复数值的空间中转移到基于实数值的空间中,从而显著的改善了复杂度。
此外,由
于它是一种无监督学习算法,它不需要用户指定的方向,因此可以发现未知的模式,并检查任何特定的特性的关联。
非负矩阵分解是一种迭代过程,它将原始数据分解为两个数据矩阵,第一个矩阵描述数据中各个元素的组成,第二个矩阵表示数据中各个元素的重要性。
这两个矩阵相乘可以重新组合成原始数据,并提供有用的信息。
总之,非负矩阵分解是一种强大的工具,可用于分析和提取数据中的有用信息,并使复杂计算更容易实现。
它可以帮助用户更好地理解大量总体数据,提取其中的模式和特征,并在今后的分析过程中进行发现。