[英]How can I find a projection to preserve the relative value of inner product?
我想用100维向量v进行降维,然后得到10维向量v'。
并且必须保留以下属性:
For arbitrary vector w1, w2(100-dimension)
if v * w1 > v * w2(* rep inner product)
After reduction....
v' * w1' > v' * w2'
我了解到随机投影是一种方法( http://scikit-learn.org/stable/modules/random_projection.html ),但它保留了距离和内积的价值。 但是我只想保持相对>或<属性,而不是绝对距离/内积值。
随机投影的另一个问题是它适合大尺寸缩小(10000-3000)。
from sklearn.random_projection import johnson_lindenstrauss_min_dim
johnson_lindenstrauss_min_dim gives us a bound.
以下是我的Python伪代码来说明我需要的内容:
import sys
import math
import numpy as np
def compare(a, b_lst):
d_lst = []
indx = 0
for b in b_lst:
d_lst.append((index, np.dot(a, b)))
indx += 1
return sorted(d_lst, key = lambda v : v[1])
x = np.random.rand(1, 100)
y = np.random.rand(5, 100)
result1 = compare(x, y)
# do projection
transformer = projection_method(object_dimension = 10)
x1 = transformer.transform(x)
y1 = transformer.transform(y)
result2 = compare(x1, y1)
for i in xrange(len(result1)):
if result1[i][0] != result2[i][0]: # compare sorted index
print 'failed'
sys.exit(-1)
print 'passed'
没有这样的现成转换。 即使有些我不知道的东西,也不会进行任何转换来精确地保留这样的属性。 通过减小维度,您本质上会丢失信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.