matlab 基于分类数据的KNN分类

shstlldc  于 2022-11-15  发布在  Matlab
关注(0)|答案(3)|浏览(205)

我正忙着做一个涉及k近邻(KNN)分类的项目。我有混合的数值和分类字段。类别值是序号(例如,银行名称、帐户类型)。数字类型是,例如,工资和年龄。也有一些二进制类型(例如,男性、女性)。
如何将类别值纳入KNN分析?
就我所知,不能简单地将每个类别字段Map到数字键(例如,BANK 1=1;BANK 2=2,等等),因此我需要一种使用类别字段的更好方法。我听说人们可以使用二进制数。这是一个可行的方法吗?

pvcm50d1

pvcm50d11#

您需要找到适用于您的数据的距离函数。二进制指示符变量的使用隐含地解决了这个问题。这样做的好处是允许您继续使用此类数据进行可能基于矩阵的实现,但一种简单得多的方法--适用于大多数基于距离的方法--就是只使用修改后的距离函数。
这样的组合有无数种。你需要试验哪一种最适合你。从本质上讲,您可能希望对数值使用一些经典的度量(通常应用了归一化;但将此归一化也移到距离函数中可能是有意义的),并在其他属性上加上适当缩放的距离。
在大多数基于距离的算法的实际应用领域中,这是最困难的部分,优化特定于领域的距离函数。您可以将其视为预处理的一部分:定义相似性。
除了欧几里得距离,还有“更多”的东西。有各种设定的理论方法,它们可能更适合您的情况。例如,田本系数、贾卡德相似系数、迪斯系数等。余弦可能也是一个选择。
有很多会议致力于相似性搜索的主题--除了欧几里得向量空间之外,没有人声称这是微不足道的(实际上,甚至在那里也不是):http://www.sisap.org/2012

k5ifujac

k5ifujac2#

将分类数据转换为数字的最直接的方法是使用指标向量。请参阅我在上一条评论中发布的参考资料。

umuewwlo

umuewwlo3#

我们可以使用位置敏感散列(LSH)+编辑距离,并假设每个bin代表一个不同的类别吗?我知道分类数据没有显示任何顺序,LSH中的垃圾箱是根据散列函数排列的。对我来说,找到能够提供大量存储桶的散列函数听起来就像学习度量空间一样。

相关问题