svd

Why Sklearn TruncatedSVD's explained variance ratios are not in descending order?

落花浮王杯 提交于 2020-07-13 15:45:43
问题 Why Sklearn.decomposition.TruncatedSVD 's explained variance ratios are not ordered by singular values? My code is below: X = np.array([[1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,1,1,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,1,1,1]]) svd = TruncatedSVD(n_components=4) svd.fit(X4) print(svd.explained_variance_ratio_) print(svd.singular_values_) and the results: [0.17693405 0.46600983 0.21738089 0.13967523] [3.1918354 2.39740372 1.83127499 1.30808033] I heard that a

Why Sklearn TruncatedSVD's explained variance ratios are not in descending order?

自作多情 提交于 2020-07-13 15:44:43
问题 Why Sklearn.decomposition.TruncatedSVD 's explained variance ratios are not ordered by singular values? My code is below: X = np.array([[1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,0,0,0,0,0], [0,0,0,0,0,0,1,1,1,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,1,1,1]]) svd = TruncatedSVD(n_components=4) svd.fit(X4) print(svd.explained_variance_ratio_) print(svd.singular_values_) and the results: [0.17693405 0.46600983 0.21738089 0.13967523] [3.1918354 2.39740372 1.83127499 1.30808033] I heard that a

文本主题模型之潜在语义索引(LSI)

ぃ、小莉子 提交于 2020-03-29 07:43:42
    在文本挖掘中,主题模型是比较特殊的一块,它的思想不同于我们常用的机器学习算法,因此这里我们需要专门来总结文本主题模型的算法。本文关注于潜在语义索引算法(LSI)的原理。 1. 文本主题模型的问题特点     在数据分析中,我们经常会进行非监督学习的聚类算法,它可以对我们的特征数据进行非监督的聚类。而主题模型也是非监督的算法,目的是得到文本按照主题的概率分布。从这个方面来说,主题模型和普通的聚类算法非常的类似。但是两者其实还是有区别的。     聚类算法关注于从样本特征的相似度方面将数据聚类。比如通过数据样本之间的欧式距离,曼哈顿距离的大小聚类等。而主题模型,顾名思义,就是对文字中隐含主题的一种建模方法。比如从“人民的名义”和“达康书记”这两个词我们很容易发现对应的文本有很大的主题相关度,但是如果通过词特征来聚类的话则很难找出,因为聚类方法不能考虑到到隐含的主题这一块。     那么如何找到隐含的主题呢?这个一个大问题。常用的方法一般都是基于统计学的生成方法。即假设以一定的概率选择了一个主题,然后以一定的概率选择当前主题的词。最后这些词组成了我们当前的文本。所有词的统计概率分布可以从语料库获得,具体如何以“一定的概率选择”,这就是各种具体的主题模型算法的任务了。     当然还有一些不是基于统计的方法,比如我们下面讲到的LSI。 2. 潜在语义索引(LSI)概述    

SVD 奇异值分解与word embedding

血红的双手。 提交于 2020-02-29 22:21:35
在研究NLP的过程中,遇到了word embedding, 经过一系列学习,发现它最初的原理之一来自奇异值分解。于是对奇异值分解做一个简单的记录。 资料中比较好的资料: https://www.cnblogs.com/endlesscoding/p/10033527.html 原理讲解简单,demo做的十分好! https://www.cnblogs.com/litaotao-doctor/p/5320521.html 这篇把特征值和奇异值放在一起讲,十分到位。 看完上面的资料后,我觉得自己没必要记录公式原理了,自惭形秽。好,下面开始: SVD: Sigular Value Decomposition 个人认为奇异值和特征值应该可以有相同的理解,这里我们先谈特征值: 特征值的定义为对矩阵A存在特征值 λ,特征向量x,使下式成立: 而对A的所有特征值,我们称为A的谱,记为λ(A)。 那么我们该如何理解这个式子? 有几个相关的关系可以给我们参考:矩阵A的秩不小于A的非零特征值数;如果矩阵A不满秩,则一定存在0特征值;若矩阵A可对角化,则rankA = A的非零特征值数。 也就是说 矩阵的特征值与矩阵的线性相关性是有关系的。 则我们对特征值的理解可以为: 任意矩阵A对向量x的矩阵乘法,可以理解为对x向量的表换(旋转、平移、缩放),那么Ax可以理解为一次表换,而特征值λ与x的相乘

奇异值分解(SVD)

∥☆過路亽.° 提交于 2020-02-28 07:33:44
SVD计算方法 A = U ∑ V T A=U\sum V^T A = U ∑ V T 若 A A A 的大小为 m ∗ n m*n m ∗ n ,则 U U U 的大小为 m ∗ m m*m m ∗ m , V V V 的大小为 n ∗ n n*n n ∗ n , ∑ \sum ∑ 的大小为 m ∗ n m*n m ∗ n .U为 A A T AA^T A A T 特征值对应的特征向量, V V V 为 A T A A^TA A T A 的特征值对应的特征向量。 ∑ \sum ∑ 中对角线元素为奇异值( A A T AA^T A A T 的特征值值开根号,然后按从大到小排序,同时 U 和 V U和V U 和 V 中的特征向量也按这个顺序排列)。 在matlab中有奇异值分解的函数,我们可以直接使用。当然你也可以自己写。 应用 1.图片压缩 我们可以对图像矩阵进行奇异值分解,然后使用数值较大的几个奇异值以及对应的奇异向量去表示图像,这样可以减少存储图像所需的空间。 来源: CSDN 作者: KingKong. 链接: https://blog.csdn.net/weixin_43221105/article/details/102750540

对称矩阵、方阵、逆矩阵、协方差矩阵

纵然是瞬间 提交于 2020-02-23 17:59:49
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 矩阵的高级函数:基于SVD算法(即奇异值分解法)的矩阵分解、通过SVD算法(即奇异值分解法)/特征值分解法来实现PCA算法、随机数矩阵 1.对称矩阵 2.方阵、逆矩阵 X是一个m行n列的矩阵,并不能保证其有逆矩阵,因此X需要乘以X的转置,即X乘以自身的转置矩阵,其结果为一个方阵, 方阵即行数和列数都为一样,这样便能保证其矩阵X有逆矩阵。 X是一个m行n列的矩阵,X的转置(自身的转置矩阵)是一个n行m列的矩阵,那么两者相乘结果为m行m列的方阵,方阵即行数和列数都为一样。 X是一个n行m列的矩阵,X的转置(自身的转置矩阵)是一个m行n列的矩阵,那么两者相乘结果为n行n列的方阵,方阵即行数和列数都为一样。 求X乘以X的转置的逆矩阵,即求X的方阵的的逆矩阵。 3.协方差矩阵 1.PCA算法中求协方差矩阵 2.特征脸法: 1.特征脸法是一种相对“古老”的人脸识别算法,而特征脸法的核心算法是PCA算法。 2.特征脸法中的经过零均值化处理后的m行n列图像矩阵: m为人脸图像的维度,n为人脸图像的样本数,行数为人脸图像的flatten后的维度数,列数为数据集的人脸图像的样本数, 人脸图像的flatten后向量作为列向量。 3

python实现主成分分析法降维(PCA)

风格不统一 提交于 2020-02-06 02:53:21
一、基础主成分分析(PCA) 基本代码 import sklearn . decomposition clf_pca = sklearn . decomposition . PCA ( n_components = None , copy = True , whiten = False , svd_solver = 'auto' , tol = 0.0 , iterated_power = 'auto' , random_state = None ) PCA模型中参数的解释 n_components:主成分个数 【default】n_components = None = min(n_samples, n_features) - 1 【选项】:None | (int) copy:是否复制数据,不复制(False)则覆盖原有数据 【default】copy = True 【选项】:True | False whiten:白噪化处理 【default】whiten=False 【选项】:False | bool , optional False :乘以n个样本的平方根,然后除以奇异值 bool : optional : svd_solver:奇异值分解器 【default】svd_solver=‘auto’ 【选项】:str{‘auto’ | ‘full’ | ‘arpack’ |

推荐系统相关算法(1):SVD

一世执手 提交于 2020-02-01 06:41:30
http://www.cnblogs.com/FengYan/archive/2012/05/06/2480664.html 1. SVD简介 假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分)。那么能预测出Zero君对M的评分吗?答案显然是能。最简单的方法就是直接将预测分定为平均分。不过这时的准确度就难说了。本文将介绍一种比这个最简单的方法要准上许多,并且也不算复杂的算法。 SVD(Singular Value Decomposition)的想法是 根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来根据分析结果预测评分 。电影中的因子可以理解成这些东西:电影的搞笑程度,电影的爱情爱得死去活来的程度,电影的恐怖程度。。。。。。SVD的想法抽象点来看就是将一个N行M列的评分矩阵R(R[u][i]代表第u个用户对第i个物品的评分),分解成一个N行F列的用户因子矩阵P(P[u][k]表示用户u对因子k的喜好程度)和一个M行F列的物品因子矩阵Q(Q[i][k]表示第i个物品的因子k的程度)。用公式来表示就是 R = P * T(Q) //T(Q)表示Q矩阵的转置 下面是将评分矩阵R分解成用户因子矩阵P与物品因子矩阵Q的一个例子。R的元素数值越大,表示用户越喜欢这部电影

推荐系统相关算法(1):SVD

十年热恋 提交于 2020-02-01 06:40:52
假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分)。那么能预测出Zero君对M的评分吗?答案显然是能。最简单的方法就是直接将预测分定为平均分。不过这时的准确度就难说了。本文将介绍一种比这个最简单的方法要准上许多,并且也不算复杂的算法。 SVD(Singular Value Decomposition)的想法是 根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来根据分析结果预测评分 。电影中的因子可以理解成这些东西:电影的搞笑程度,电影的爱情爱得死去活来的程度,电影的恐怖程度。。。。。。SVD的想法抽象点来看就是将一个N行M列的评分矩阵R(R[u][i]代表第u个用户对第i个物品的评分),分解成一个N行F列的用户因子矩阵P(P[u][k]表示用户u对因子k的喜好程度)和一个M行F列的物品因子矩阵Q(Q[i][k]表示第i个物品的因子k的程度)。用公式来表示就是 R = P * T(Q) //T(Q)表示Q矩阵的转置 下面是将评分矩阵R分解成用户因子矩阵P与物品因子矩阵Q的一个例子。R的元素数值越大,表示用户越喜欢这部电影。P的元素数值越大,表示用户越喜欢对应的因子。Q的元素数值越大,表示物品对应的因子程度越高。分解完后,就能利用P,Q来预测Zero君对《七夜》的评分了

sparse matrix svd in python

扶醉桌前 提交于 2020-01-29 02:32:05
问题 Does anyone know how to perform svd operation on a sparse matrix in python? It seems that there is no such functionality provided in scipy.sparse.linalg. 回答1: You can use the Divisi library to accomplish this; from the home page: It is a library written in Python, using a C library (SVDLIBC) to perform the sparse SVD operation using the Lanczos algorithm. Other mathematical computations are performed by NumPy. 回答2: Sounds like sparsesvd is what you're looking for! SVDLIBC efficiently wrapped