返回介绍

奇异值分解(SVD)

发布于 2025-01-01 12:38:39 字数 2434 浏览 0 评论 0 收藏 0

“SVD 并不像应该的那样出名。” - 吉尔伯特斯特朗

我们显然希望,在一个主题中最常出现的单词在另一个主题中出现的频率较低 - 否则该单词不会成为分离这两个主题的不错选择。 因此,我们希望主题是正交的。

SVD 算法将矩阵分解为具有正交列的和具有正交行的矩阵(以及包含每个因子的相对重要性的对角矩阵)。

来源: Facebook 研究:快速随机 SVD

SVD 是精确分解,因为它产生的矩阵足够大,完全覆盖原始矩阵。 SVD 在线性代数中的使用非常广泛,特别是在数据科学中,包括:

  • 语义分析
  • 协同过滤/推荐(获的 Netflix 奖项)
  • 计算 Moore-Penrose 伪逆
  • 数据压缩
  • 主成分分析(将在后面介绍)
%time U, s, Vh = linalg.svd(vectors, full_matrices=False)

'''
CPU times: user 1min 4s, sys: 8.82 s, total: 1min 13s
Wall time: 13.3 s
'''

print(U.shape, s.shape, Vh.shape)

# (2034, 2034) (2034,) (2034, 26576)

确认这是输入的分解。

答案

# 练习:确认 U,s,Vh 是 var 向量的分解

# True

确认 U, V 正交。

答案

# 练习:确认`U, V`正交

# True

主题

关于奇异值 s 我们能说什么?

plt.plot(s);

plt.plot(s[:10])

# [<matplotlib.lines.Line2D at 0x7fcada6c6828>]

num_top_words=8

def show_topics(a):
    top_words = lambda t: [vocab[i] for i in np.argsort(t)[:-num_top_words-1:-1]]
    topic_words = ([top_words(t) for t in a])
    return [' '.join(t) for t in topic_words]

show_topics(Vh[:10])

'''
['critus ditto propagandist surname galacticentric kindergarten surreal imaginative',
 'jpeg gif file color quality image jfif format',
 'graphics edu pub mail 128 3d ray ftp',
 'jesus god matthew people atheists atheism does graphics',
 'image data processing analysis software available tools display',
 'god atheists atheism religious believe religion argument true',
 'space nasa lunar mars probe moon missions probes',
 'image probe surface lunar mars probes moon orbit',
 'argument fallacy conclusion example true ad argumentum premises',
 'space larson image theory universe physical nasa material']
'''

我们得到的主题匹配我们期望的簇的类型! 尽管事实上这是一个无监督的算法 - 也就是说,我们从未真正告诉算法我们的文档是如何分组的。

稍后我们将更详细地回顾 SVD。 目前,重要的一点是我们有一个工具可以让我们将矩阵精确地分解为正交列和正交行。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文