KNN是通过计算距离,获得最近的K个邻居 而完成分类, 所以说,他本质上是要用numeric 来完成分类。 所以可以通过将分类变量转换为numeric 来进行KNN分类:
衣服大小 | 编码 |
S | 1 |
M | 2 |
L | 3 |
如果是这样的转化 没有问题, 因为本身 categorical data 就是有顺序的,(ordinal data), 当你对衣服大小编码时就是没问题的。
1<2 而 显示意义上 S<M, 所以是没问题, 可以直接KNN,结果也是相关的,因为衡量距离也是有意义的
但是如果分类变量是nominal的
职业 | 编码 |
学生 | 1 |
老师 | 2 |
农民 | 3 |
这时候编码就有问题了, 为什么学生会小于老师, 等于为原有的数据添加的而外的信息, 那我如果用不同的编码的话结果就可能很不一样,所以KNN会有问题
对于这些数据 因为没有顺序,所以他们的距离应该是相等的。 所以编码应该是
职业 | 编码 |
学生 | 0,0,1 |
老师 | 0,1,0 |
农民 | 1,0,0 |
这样距离就是相等了, 但是这又会出现另一个问题,对于每一个职业都给了一个单独的binomial变量, 很有可能导致高维的问题 也就是 P>N, 即便K设置的很小很小, 预测的误差还是很大。
总结一句, 再对分类变量进行KNN时, 要仔细想想 KNN的“距离” 在分类变量的意义到底是什么