
documentTermMatrix = array([[ 0.,1.,0.,1.],[ 0.,0.],[ 1.,0.]])u,s,vt = linalg.svd(documentTermMatrix,full_matrices=False)sigma = diag(s)## remove extra dimensions...numberOfDimensions = 4for i in range(4,len(sigma) -1): sigma[i][i] = 0queryVector = array([[ 0.],# same as first column in documentTermMatrix [ 0.],[ 0.],[ 1.],[ 1.]])
数学怎么说应该有效:
dtMatrixToqueryAgainst = dot(u,dot(s,vt))queryVector = dot(inv(s),dot(transpose(u),queryVector))similarityToFirst = cosinedistance(queryVector,dtMatrixToqueryAgainst[:,0]# gives 'matrices are not aligned' error. should be 1 because they're the same
什么工作,数学看起来不正确:(从here)
dtMatrixToqueryAgainst = dot(s,vt)queryVector = dot(transpose(u),queryVector)similarityToFirst = cosinedistance(queryVector,dtMatrixToqueryAgainsst[:,0]) # gives 1,which is correct
为什么路由工作,而第一个没有,当我能找到关于LSA数学的所有东西显示第一个是正确的?我觉得我错过了一些明显的东西……
解决方法 您的代码中存在一些不一致的地方,这些不一致会导致您在混淆之前出现错误.这使得很难准确理解你尝试了什么以及为什么你感到困惑(显然你没有运行代码,因为它被粘贴,或者它会先抛出异常).也就是说,如果我正确地遵循你的意图,你的第一种方法几乎是正确的.请考虑以下代码:
documentTermMatrix = array([[ 0.,0.]])numDimensions = 4u,full_matrices=False)u = u[:,:numDimensions]sigma = diag(s)[:numDimensions,:numDimensions]vt = vt[:numDimensions,:]lowRankdocumentTermMatrix = dot(u,dot(sigma,vt))queryVector = documentTermMatrix[:,0]lowDimensionalquery = dot(inv(sigma),dot(u.T,queryVector))lowDimensionalqueryvt[:,0]
您应该看到lowDimensionalquery和vt [:,0]相等.将vt视为低维子空间中文档的表示.首先,我们将查询映射到该子空间以获取lowDimensionalquery,然后将其与vt的相应列进行比较.您的错误是尝试将转换后的查询与来自lowRankdocumentTermMatrix的文档向量进行比较,该文档向量位于原始空间中.由于转换后的查询所包含的元素少于“重建”文档,因此Python抱怨道.
总结以上是内存溢出为你收集整理的Python差异的潜在语义分析全部内容,希望文章能够帮你解决Python差异的潜在语义分析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)