KNN分类与分类数据

时间:2012-11-29 12:28:17

标签: matlab octave classification knn ordinal

我正在忙着一个涉及k-最近邻回归的项目。我混合了数字和分类领域。分类值是序数(例如银行名称,帐户类型)。例如,数字类型是工资和年龄。还有一些二元类型(例如,男性,女性)。

如何将分类值纳入KNN分析?

据我所知,人们不能简单地将每个分类字段映射到数字键(例如,银行1 = 1;银行2 = 2等),因此我需要一种更好的方法来使用分类字段。我听说可以使用二进制数 - 这是一种可行的方法吗? 建议将不胜感激。

3 个答案:

答案 0 :(得分:13)

您需要找到适用于您的数据的距离函数。二进制指示符变量的使用隐含地解决了这个问题。这样做的好处是可以让你继续使用这种数据进行基于矩阵的实现,但更简单的方法 - 适用于大多数基于距离的方法 - 就是使用修改后的距离函数。

有无数个这样的组合。您需要尝试哪种方法最适合您。基本上,您可能希望对数值使用一些经典度量(通常应用规范化;但是也可以将此规范化移动到距离函数中),加上其他属性上的距离,进行适当缩放。

在基于距离的算法的大多数实际应用领域中,这是最困难的部分,优化您的特定于域的距离函数。您可以将此视为预处理的一部分:定义相似性。

很多不仅仅是欧几里德距离。在您的情况下,有各种集合理论措施可能更合适。例如,Tanimoto系数,Jaccard相似度,Dice系数等。余弦也可能是一种选择。

整个会议专门讨论相似性搜索的主题 - 没有人声称除了欧几里德向量空间之外的任何事情都是微不足道的(实际上,甚至不存在):http://www.sisap.org/2012

答案 1 :(得分:1)

将分类数据转换为数字的最直接方法是使用指标向量。请参阅我之前评论中发布的参考文献。

答案 2 :(得分:0)

我们可以使用Locality Sensitive Hashing(LSH)+编辑距离并假设每个bin代表不同的类别吗?我知道分类数据没有显示任何顺序,LSH中的bin根据哈希函数排列。找到给出有意义数量的二进制数的哈希函数对我来说就像学习度量空间一样。