K近邻算法(K-Nearest Neighbors,简称KNN)是一种基本的监督学习算法,用于分类和回归问题。它的工作原理很简单,基于实例之间的距离度量,将新样本的类别标签预测为其K个最近邻居中最常见的类别。
如果K = 3,少数从属于多数,基于统计的方法,判定?的这个待分类点属于-的三角形一类。
如果K = 5,还是少数从属于多数,基于统计的方法,判定?的这个待分类点属于+的正方形一类。
K 值的选择,距离度量和分类决策规则是该算法的三个基本要素。K值的选择一般低于样本数据的平方根,一般是不大于20的整数。距离度量常用的有欧式距离,曼哈顿距离,余弦距离等,一般使用欧氏距离,对于文本分类,常用余弦距离。分类决策就是“少数服从多数”的策略。
KNN算法的基本步骤如下:
1. 准备训练数据:收集带有类别标签的训练样本,其中每个样本包含多个特征。
2. 选择K值:确定用于预测的最近邻居的数量K。
3. 计算距离:对于要预测的新样本,计算其与训练集中每个样本之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离、余弦相似度等。
4. 选择最近邻:从训练集中选择K个与新样本最近的样本作为最近邻。
5. 预测分类:根据K个最近邻的类别标签,确定新样本的类别。在分类问题中,可以采用多数表决的方式,即选择K个最近邻中最常见的类别作为预测结果。在回归问题中,可以采用平均值的方式,即选择K个最近邻的平均值作为预测结果。
以下是使用MATLAB实现K近邻算法的简单示例:
假设我们有一个包含两个特征(x1和x2)和对应类别标签(y)的训练数据集,我们想要使用K近邻算法对新样本进行分类。
% 训练数据
X_train = [1 1; 1 2; 2 2; 4 4; 5 5; 4 5]; % 特征矩阵
y_train = [1; 1; 1; 2; 2; 2]; % 类别标签
% 新样本
X_test = [3 3]; % 特征矩阵
% K近邻算法
K = 3; % 设置K值
% 计算距离
distances = sqrt(sum((X_train - X_test).^2, 2));
% 选择K个最近邻的索引
[~, indices] = mink(distances, K);
% 统计K个最近邻的类别标签
nearest_labels = y_train(indices);
% 多数表决,确定预测结果
prediction = mode(nearest_labels);
在上述示例,我们定义了训练数据集 `X_train` 和对应的类别标签 `y_train`。然后,我们定义了要预测的新样本 `X_test`。接下来,我们通过计算新样本与训练数据集中每个样本之间的距离,选择最近的K个样本。然后,我们统计这K个样本的类别标签,并使用多数表决的方式确定预测结果。
上述示例仅是K近邻算法的基本实现,实际应用中可能需要进行更多的数据预处理、参数调优和模型评估。此外,MATLAB还提供了更多强大的机器学习工具箱和函数,可以更方便地实现K近邻算法和其他机器学习算法。
KNN算法的优点包括简单易理解、无需训练过程、适用于多分类和回归问题。然而,它也有一些缺点,如计算复杂度高、对于高维数据和样本不平衡的情况效果可能较差。
在应用KNN算法时,需要注意选择合适的K值、合适的距离度量和适当的数据预处理(如归一化)。此外,KNN算法对于数据集的分布和特征之间的关系敏感,因此在使用之前应对数据进行探索性分析和特征工程。