【问题标题】:Reduce ND Vectors to 2D While Preserving Dot Product在保留点积的同时将 ND 向量减少到 2D
【发布时间】:2018-04-23 21:02:14
【问题描述】:

我希望将一组(约 500 个)N 维向量的维数降低为 2D 向量,这样对于任何两个向量:

numpy.dot(vOriginal1, vOriginal2)==numpy.dot(vNew1, vNew2)

其中 vNew1、vNew2 是降维后的 vOriginal1、vOriginal2 向量。

编辑:我不是在寻找 0 的错误,只是一个低错误。所有向量的大小都是固定的M,要转换成大小为2。

【问题讨论】:

  • 数量numpy.dot(vOriginal1, vOriginal2) - numpy.dot(vNew1, vNew2)(跨数据集)的范数称为降维算法或嵌入算法的重构误差。许多算法,如 isomap、多维缩放、PCA 和核 PCA,以及许多其他方法(您可以在 scitkit-learn 中找到很多),都试图最小化这种重建误差的不同公式或近似值。您要求的算法可以保证您的数据集的重建误差正好为 0,而这通常不存在。
  • @ely:我不是在寻找 0 错误,只是低错误。
  • 这里是@ely scikit-learn.org/stable/modules/manifold.html解决的SKLearn实现的链接

标签: python machine-learning scikit-learn dimensionality-reduction


【解决方案1】:

我真的不确定这怎么可能。输出的形状取决于输入向量的 N 维数?

例如:

import numpy as np

a = np.array(range(0, 12)).reshape(6,2)
b = np.array(range(0, 12)).reshape(2,6)
np.dot(a,b)
c = a.reshape(4,3)
d = b.reshape(3,4)
np.dot(c,d)

为我们提供以下输出:

a: 
 [[ 0  1]
 [ 2  3]
 [ 4  5]
 [ 6  7]
 [ 8  9]
 [10 11]]  

b:
 [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]

a dot b:
 [[  6   7   8   9  10  11]
 [ 18  23  28  33  38  43]
 [ 30  39  48  57  66  75]
 [ 42  55  68  81  94 107]
 [ 54  71  88 105 122 139]
 [ 66  87 108 129 150 171]]

a:
 [[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

d:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

c dot d:
 [[ 20  23  26  29]
 [ 56  68  80  92]
 [ 92 113 134 155]
 [128 158 188 218]

您能告诉我们有关 N 维数组的任何信息吗?它们是固定尺寸吗?还是一组尺寸?

【讨论】:

  • 开始时向量的大小都是 M,我想将它们转换为大小 2。是的,不可能得到精确的解决方案(因为它不存在)。我只是在寻找一个近似值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 2017-04-18
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
相关资源
最近更新 更多