如何找到保留内积相对值的投影?

时间:2013-12-09 03:26:45

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

我想用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-Pseudo-Code来解释我需要的东西:

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'

1 个答案:

答案 0 :(得分:1)

没有这样的现成变换。即使有我不知道的事情,也没有任何转变可以完全保留这样的财产。通过减少维度,您本质上会丢失信息。