K-NN 适用于二进制变量吗?

数据挖掘 机器学习 多类分类 k-nn
2021-10-10 03:56:18

我需要帮助,因为我刚接触机器学习,我不知道是否可以使用 k-最近邻算法来确定下表中学生 11 的适当程序。

学校科目(数学、英语等)是特征,而“程序”列具有类标签 A、B 和 C。二进制值表示学生对科目的兴趣。K-NN算法可以根据表中的二元变量找到相似的学生吗?

二进制数据

2个回答

是的,你只需要找到一个合适的距离度量,而不是使用默认的欧几里得距离。欧几里得距离会起作用,但在非欧几里得空间上使用时会失去很多正点。

对于您的特定情况,Jaccard 距离基本上测量两个实例上有多少个 1 相等,忽略两者都是 0 的维度。这给出了类似“如果一个程序有课程,但另一个没有,那么它们是不同的”的解释。Jaccard 索引在高维布尔矩阵中非常有用,例如由 one-hot 编码生成的。

另一个更直观的选择是完美匹配距离,它可以简单地测量两个实例有多少维度不同,并且可以通过下式轻松计算 一世=1n|X一世-一世|. 在这种情况下,解释变得类似于“如果两个程序都有课程,或者两个程序都没有课程,那么它们是相似的”。

但是,请注意 K-NN 的 K 值。您只有两个 B 类实例,因此您必须为 K 的值选择 1 或 2(技术上最多 3)。

哇,给定五个分数,有一种简单的方法可以找到正确的程序。

样本空间是 2^5 = 32(就像抛硬币五次一样)。这些中的每一个都必须映射到一个程序 AC,并且因为 32 > 3,一个以上的可能组合被映射到至少一个程序。

在其他条件相同的情况下,大多数程序由大约 10 种组合映射。但是必须有一个规则将每个组合与一个程序相关联,不是吗?

因此,您所需要的只是一个键值哈希表。可能最简单的做法是将主题连接成五个字母字符串('11011')以用作键,因此 Python 中的最小字典看起来像

sorting_hat = {'11011': 'C'}