如何从相似性矩阵生成数据?

时间:2013-05-09 13:33:04

标签: similarity svd

假设有14个对象,每个对象具有或不具有1000个二进制特征。我有一个14x14的相似度矩阵,但不是原始的14x1000数据。在给定相似度矩阵的情况下,有没有办法重建或生成类似于原始数据的东西?

我尝试过蒙特卡罗模拟,但不受约束的他们会花费太多时间来实现与原始相似度矩阵的低水平一致性。

我看到了这个相关的问题:Similarity matrix -> feature vectors algorithm?。但是,他们希望减少不增加维度。另外,我不确定(1)使用哪个矩阵或矩阵,以及(2)如何转换为二进制矩阵。

1 个答案:

答案 0 :(得分:0)

除非你描述如何计算相似性得分,否则不可能肯定地说。

通常,对于通常的相似性评分,这是不可能的:在从单个特征到聚合统计的转换中信息丢失了。您可以做的最好的事情是获得一组与相似性得分一致的特征。

我认为当你说“与原作相似”时,这就是你所说的。这个问题非常有趣。假设相似性被计算为两个特征向量的点积(即,具有值= 1 / true的一对对象的特征计数)。这不是唯一的选择:它与值0(假)一致意味着没有信息。但它可能会推广到其他相似性度量。

在这种情况下,问题实际上是线性规划问题:一种天真的方法是穷尽地搜索可能对象的空间 - 不是随机的,而是由约束引导。例如,假设SIM(A,B):=对象A和对象B的相似性。在这些向量上定义一个顺序。

如果SIM(A,B)= N,则选择A = B minimal(如(1,....,1(N次),0,...... 0(1000-N次)),然后选择最小的C st(A,C),(B,C)具有给定的值。一旦发现不一致,回溯和增量。

这会找到一致的答案,虽然复杂性非常高(但可能比蒙特卡罗更好)。

找到一个更好的算法是一个有趣的问题,但更多的是我不能在SO帖子中说 - 这可能是CS论文的主题!