1.矩阵分解
1.1矩阵分解的作用
矩阵填充(通过矩阵分解来填充原有矩阵,例如协同过滤的ALS算法就是填充原有矩阵)
清理异常值与离群点
降维、压缩
个性化推荐
间接的特征组合(计算特征间相似度)
1.2 矩阵分解的方法
(1)特征值分解
(2)PCA(Principal Component Analysis)分解,作用:降维、压缩。
(3)SVD(Singular Value Decomposition)分解,也叫奇异值分解。
(4)LSI(Latent Semantic Indexing)或者叫LSA(Latent Semantic Analysis),隐语义分析分解。
(5)PLSA(Probabilistic Latent Semantic Analysis),概率潜在语义分析。PLSA和LDA都是主题模型,PLSA是判别式模型。
(6)NMF(Non-negative Matrix Factorization)模型,非负矩阵分解。非负矩阵分解能够广泛应用于图像分析、文本挖掘和语言处理等领域。
(7)LDA(Latent Dirichlet Allocation)模型,潜在狄利克雷分配模型。LDA是一种主题模型,将文档集中每篇文档的主题以概率的形式给出,可以用于主题聚类或者文本分类,是生成式模型。LDA作为主题模型可以应用到很多领域,比如:文本情感分析、文本分类、个性化推荐、社交网络、广告预测等方面。
(8)MF(Matrix Factorization)模型,矩阵分解模型。矩阵分解其实可以分为很多种:
1)基本矩阵分解(Basic Matrix Factorization),basic MF分解。
2)正则化矩阵分解(Regularized Matrix Factorization)。
3)概率矩阵分解(Probabilistic Matrix Factorization),PMF。
4)非负矩阵分解(Non-negative Matrix Factorization),NMF。
5)正交非负矩阵分解(Orthogonal Non-negative Matrix Factorization)。
6)PMF(Probabilistic Matrix Factorization),概率矩阵分解。
7)SVD++
矩阵分解的主要应用是:降维、聚类分析、数据预处理、低维度特征学习、特征学习、推荐系统、大数据分析等。
1.3 推荐学习的经典矩阵分解算法
矩阵分解的算法这么多,给大家推荐几个经典的算法来学习:
1)经典的PCA、SVD是机器学习入门必学算法。
2)2003年提出的主题模型LDA
3)概率矩阵分解(PMF),主要应用到推荐系统中,在大规模的稀疏不平衡Netflix数据集上取得了较好的结果。
4)非负矩阵分解,也很重要。非负矩阵分解及其改进版本应用到很多领域中。
2. SVD分解具体介绍
特征值分解和奇异值分解在机器学习中都是很常见的矩阵分解算法。两者有着很紧密的关系,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。
1)特征值分解矩阵的缺点
基于我们以前学习的线性代数知识,利用特征值分解提取特征矩阵是一个容易理解且便于实现的方法。但是为什么还存在奇异值分解呢?特征值分解最大的问题是只能针对方阵,即n*n的矩阵。而在实际的应用中,我们分解的大部分都不是方阵。
很明显,在绝大部分情况下,都是矩阵。如果这个时候要对这个矩阵进行特征提取,特征值分解的方法明显就不行了。此时,就可以用SVD对非方阵矩阵进行分解。
1)特征值分解矩阵的缺点
我们前面讲了很多特征值、特征向量和特征值分解,而且基于我们以前学习的线性代数知识,利用特征值分解提取特征矩阵是一个容易理解且便于实现的方法。但是为什么还存在奇异值分解呢?特征值分解最大的问题是只能针对方阵,即n*n的矩阵。而在实际的应用中,我们分解的大部分都不是方阵。
举个例子:
关系型数据库中的某一张表的数据存储结构就类似于一个二维矩阵,假设这个表有m行,有n个字段,那么这个表数据矩阵规模就是m*n。很明显,在绝大部分情况下,m与n是不相等的。如果这个时候要对这个矩阵进行特征提取,特征值分解的方法明显就不行了。此时,就可以用SVD对非方阵矩阵进行分解。
2.3 SVD分解的应用
异值分解的应用有很多,比如:用SVD解PCA、潜在语言索引也依赖于SVD算法。可以说,SVD是矩阵分解、降维、压缩、特征学习的一个基础工具,所以SVD在机器学习领域相当重要。
1)降维
通过奇异值分解的公式,我们可以很容易看出来,原来矩阵A的特征有n维。经过SVD分解后,可以用前r个非零奇异值对应的奇异向量表示矩阵A的主要特征,这样就把矩阵A进行了降维。
2)压缩
通过奇异值分解的公式可以看出来,矩阵A经过SVD分解后,要表示原来的大矩阵A,我们只需要存储U、Σ、V三个较小的矩阵即可。而这三个较小规模的矩阵占用内存上也是远远小于原有矩阵A的,这样SVD分解就起到了压缩的作用。