K最近邻算法疑问

7
我是一名新手人工智能。我了解K最近邻算法以及如何实现它。然而,如果要计算不在一个比例尺上的事物的距离或权重,该怎么办?
例如,年龄距离可以很容易地计算,但是你如何计算红色到蓝色的距离?也许颜色是个糟糕的例子,因为你仍然可以使用频率。比如说汉堡、披萨和薯条之间的距离怎么办?
我有一种感觉,这里肯定有聪明的方法。
非常感谢您的关注和帮助。
编辑:非常感谢大家提供的非常好的答案。这真的很有帮助,我很感激。但我认为肯定有出路。
我能不能这样做?假设我正在使用我的KNN算法来预测一个人是否会在我餐厅用餐,该餐厅供应上述三种食品中的所有食品。当然,还有其他因素,但为了简单起见,在喜爱的食物领域中,300个人中有150个喜欢汉堡,100个喜欢披萨,50个喜欢薯条。常识告诉我,喜欢的食物会影响人们是否决定用餐。
所以现在一个人输入他/她最喜欢的食物是汉堡,我要预测他/她是否会在我的餐厅用餐。忽略其他因素,并基于我的(训练)先前知识库,常识告诉我,对于这个特定领域的最近邻居距离,与如果他输入披萨或薯条相比,更有可能存在更近的距离。
唯一的问题是我使用了概率,我可能是错误的,因为我不知道并且可能无法计算实际距离。我还担心这个字段会对我的预测产生过多/过少的权重,因为距离可能与其他因素(价格、时间、餐厅是否已满等我可以轻松量化的因素)不成比例,但我想我可以通过一些参数调整来解决这个问题。
哦,每个人都提供了很好的答案,但我只能接受一个。在这种情况下,我将在明天接受得票最高的答案。再次感谢大家。
7个回答

11

将您收集数据的所有食品作为“维度”(或表中的列)表示。

为每个可以收集数据的人记录“喜好”,并将结果放在表中:

          汉堡   |    披萨  |   薯条   |   卷饼  | 喜欢我的食物
person1     1     |        0  |       1   |     1    |      1
person2     0     |        0  |       1   |     0    |      0
person3     1     |        1  |       0   |     1    |      1
person4     0     |        1  |       1   |     1    |      0

现在,给定一个新的人,并了解他喜欢的一些食物信息,您可以使用简单的测量方法(例如皮尔逊相关系数余弦相似度等)来衡量与其他人的相似性。

现在你有了一种方法来找到K个最近邻居并做出一些决策...

要获取更高级别的信息,请查找“协作过滤”(但我会警告您,这会涉及到一些数学)。


7
“nearest”的意思是你有一些度量,可以衡量事物的更远或更近。 “汉堡包”,“比萨饼”和“薯条”的量化不是KNN问题,而是关于基本系统建模的问题。 如果您有一个系统,在该系统中,“汉堡包”,“比萨饼”和“薯条”是术语,则系统存在的原因将确定它们如何量化-例如,如果您想要弄清楚如何在给定金额的情况下获得最佳口感和最少的卡路里,那么恭喜你,你知道了你的指标是什么。(当然,“最好的口感”是主观的,但这是另一组问题。)
这些术语并没有固有的可量化性,因此不能告诉您如何设计分析系统;您需要决定自己的目标,并从那里设计指标。

5
这是AI中知识表达的一个问题之一,主观因素起着重要作用。例如,对于汉堡、披萨和薯条的“相似度”,你和我是否会达成一致?您可能需要一个包含要比较项目的查找矩阵。如果您可以假设可传递性,则可能会减少此矩阵,但即使在您的示例中也会存在不确定性。关键可能在于尝试确定正在比较的特征。例如,如果您正在比较食物项的健康程度,则可能能够得到更客观的结果。

2
如果你看一下"集体智慧", 你会发现他们分配了一个尺度和一个值。这就是Netflix比较电影排名等的方式。
你需要通过制定这个尺度并为每个值分配值来定义“接近程度”。

1

我会向用户展示这些属性的配对,并要求他们定义它们之间的接近程度。你可以向他们展示一个从[同义词..非常陌生]或类似的刻度。通过让多个人这样做,你最终将得到一个被广泛接受的非线性属性值的接近函数。


0

没有一种“最好”的方法来做这件事。最终,您需要想出一个任意的刻度。


0

不错的答案。你可以自己创造一个度量标准,或者如malach所建议的那样,询问一些人。为了真正做到正确,听起来你需要贝叶斯分析


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接