【发布时间】:2016-02-03 09:18:00
【问题描述】:
假设我有Items,一大堆这些对象:
class Item
{
public float Cost;
public float Size;
public float Weight;
public float Temperature;
}
我想从这个集合中反复挑选一个与给定输入非常匹配的对象。
Item PickItem(float cost, float size, float weight, float temperature) {...}
它应该从Items 返回一个接近给定输入的Item。它不必给出最佳答案;任何接近的值,甚至可能有一些随机变化,都可以。
我该怎么做呢?我一直在做一些研究,看起来使用主成分分析 (PCA) 可以让我将我的集合分组到相似的区域,但实现起来看起来很复杂。另外,除了将搜索词添加到集合中并找到附近的结果值之外,我不确定如何使用它来选择项目,但这需要为每次搜索重建整个 PCA 系统。
有没有更简单的方法?我可以只搜索平均差异最小的元素,但似乎我最终会得到介于所有内容之间的结果,而不是大部分相关但具有一两个异常值属性的结果。我想如果我加权它可能会起作用?
【问题讨论】:
-
避免扫描整个数据集的一种方法是将数据放入箱中,然后仅扫描给定输入所在的箱中的项目。显然,垃圾箱越小,需要检查的项目就越少,但是垃圾箱越多,簿记也就越多。但在 4 个维度上,这可能是可以容忍的。至于度量(即距离函数),我想你会发现它并不重要。从普通的欧几里得距离开始,然后从那里开始。
标签: c# search data-structures statistics pca