我正忙于一个涉及 k-最近邻回归的项目。我混合了数值和分类字段。分类值是有序的(例如银行名称、帐户类型)。数字类型是,例如薪水和年龄。还有一些二进制类型(例如,男性、女性)。
如何将分类值纳入 KNN 分析?
据我所知,不能简单地将每个分类字段映射到数字键(例如银行 1 = 1;银行 2 = 2 等),因此我需要一种更好的方法来使用分类字段。我听说可以使用二进制数 - 这是一种可行的方法吗?建议将不胜感激。
我正忙于一个涉及 k-最近邻回归的项目。我混合了数值和分类字段。分类值是有序的(例如银行名称、帐户类型)。数字类型是,例如薪水和年龄。还有一些二进制类型(例如,男性、女性)。
如何将分类值纳入 KNN 分析?
据我所知,不能简单地将每个分类字段映射到数字键(例如银行 1 = 1;银行 2 = 2 等),因此我需要一种更好的方法来使用分类字段。我听说可以使用二进制数 - 这是一种可行的方法吗?建议将不胜感激。
您需要找到适用于您的数据的距离函数。二元指标变量的使用隐含地解决了这个问题。这样做的好处是允许您使用这种数据继续您可能基于矩阵的实现,但更简单的方法 - 并且适用于大多数基于距离的方法 - 是只使用修改后的距离函数。
这样的组合数不胜数。您需要尝试最适合您的方法。本质上,您可能希望对数值使用一些经典度量(通常应用归一化;但也可以将此归一化移动到距离函数中),加上其他属性的距离,并适当缩放。
在基于距离的算法的大多数实际应用领域中,这是最困难的部分,优化您的特定领域的距离函数。您可以将其视为预处理的一部分:定义相似性。
不仅仅是欧几里得距离。有多种集合论测量方法可能更适合您的情况。例如,谷本系数、Jaccard 相似度、Dice 系数等。余弦也可能是一种选择。
有专门讨论相似性搜索主题的整个会议 - 除了欧几里得向量空间之外,没有人声称这在任何事情上都是微不足道的(实际上,甚至没有):http ://www.sisap.org/2012
将分类数据转换为数字的最直接方法是使用指示符向量。请参阅我在之前的评论中发布的参考资料。
我们可以使用局部敏感哈希 (LSH) + 编辑距离并假设每个 bin 代表不同的类别吗?我知道分类数据没有显示任何顺序,并且 LSH 中的箱是根据散列函数排列的。对我来说,找到给出有意义数量的 bin 的哈希函数听起来就像学习度量空间。