在2006年的ICDM会议上,数据挖掘领域评选出了十大经典算法:C4.5、k-Means、SVM、Apriori、EM、PageRank、AdaBoost、kNN、Naïve Bayes与CART。尽管之前接触过这些算法,但对于它们背后的数学原理了解不多。因此,希望通过这篇文章更深入地理解这些算法。
本文主要探讨的是kNN算法,这是一种在监督学习中用于分类的方法。监督学习与非监督学习的区别在于是否提供带有标签的数据。如果有标签,则属于监督学习;反之则是非监督学习。监督学习的目标是通过训练数据建立一个模型,从而能够对新数据进行预测。在监督学习中,输入和输出既可以是连续的,也可以是离散的。如果输入和输出都是连续变量,则称为回归问题;如果是离散变量,则称为分类问题;如果输入和输出都是序列,则称为标注问题。
kNN算法的核心思想十分简单:在训练集中找到与输入数据最近的k个邻居,然后根据这k个邻居中出现频率最高的类别,来决定该数据点的类别。
训练集包含N个样本点,每个样本点都有一个类别标签,总共有K个不同的类别。给定一个新的待预测数据点,需要找出它在训练集中最接近的k个邻居。这些邻居的类别决定了新数据点的类别。
具体来说,设训练集中有N个样本点,每个样本点的类别已知,总共有K个类别。对于一个新的待预测数据点,我们找出其k个最近的邻居。这k个邻居的类别构成了一个集合,其中出现次数最多的类别就是预测的新数据点的类别。
kNN的学习模型可以通过输入数据来确定,输出类别由决策函数给出。假设损失函数采用0-1损失函数,即分类正确时不产生损失,分类错误时损失为1。为了最小化这种损失,选择最大表决规则,即将k个最近邻居中出现次数最多的类别作为最终预测结果。
k值的选择对kNN算法的效果有很大影响。如果k值较小,算法会过于敏感于噪声数据,导致预测不稳定。相反,如果k值较大,虽然可以减少噪声数据的影响,但也会引入一些远离目标点的数据点,从而影响预测准确性。因此,合理选择k值至关重要。
另外,考虑到距离更近的数据点通常具有更高的相似度,因此可以对kNN算法进行改进,通过加权平均的方式,使距离更近的数据点在预测中发挥更大的作用。