python - 使用 Tensorly 的非负张量分解示例
问题描述
我对张量和张量库都很陌生。我遇到了 jeankossaifi 上张量分解的最佳示例之一,但我需要一个张量函数non_negative_tucker () 通过扩展上面链接上的示例来进行张量分解(对于 Olivetti数据集)。
解决方案
该接口与robust_pca接口几乎相同。
让我们创建一个随机示例张量X
,:
import tensorly as tl
import numpy as np
X = tl.tensor(np.random.random((10, 11, 12)))
您将应用鲁棒张量 PCA,如下所示:
from tensorly.decomposition import robust_pca
D, E = robust_pca(X)
这给了你一个低秩张量D
和一个稀疏张量,E
这样D + E = X
(大约)。
相反,非负 Tucker 会给你一个非负核心和一些非负因素。请注意,现在您还必须为分解指定等级。
from tensorly.decomposition import non_negative_tucker
core, factors = non_negative_tucker(X, rank=(12, 12, 12), n_iter_max=1000)
您可以使用这些重建张量并检查重建错误:
reconstruction = tl.tucker_to_tensor(core, factors)
error = tl.norm(reconstruction - X)/tl.norm(X)
您可以查看该功能的API 页面。
推荐阅读
- r - “零长度箭头”有多小?
- assembly - How to understand what to put in registers from documentation?
- javascript - It is possible to pass additional objects aside the response.data in ExpressJS?
- python - 正则表达式在双引号之间提取不超过十个单词
- python - Segmentation fault (Core dumped) on importing torch with python3.5 in virtualenv
- mule - DataWeave:何时/否则语句返回 null
- php - http请求通过android中的php从数据库中获取数据,使用浏览器的结果不同
- database - 简单的数据库规范化
- python - 如何对 N 个元素的列表进行排序,然后用 -1 替换 0 到 N 之间的缺失值
- android - 从 JSON 获取数据到 List 并使用 GSON 将其用于 RecyclerView