赞
踩
k近邻(k-nearest neighbors,KNN)算法是一种基本的监督学习算法,用于分类和回归问题。k值的选择、距离度量及分类决策规则是k近邻法的三个基本要素。
给定一个训练数据集,KNN算法通过计算待分类样本与训练数据集中各个样本的距离,选取距离最近的k个样本,然后根据这k个样本的类别进行投票(分类问题)或者求平均值(回归问题),以确定待分类样本的类别或者值。
注:分类问题中常使用多数表决作为决策规则,回归问题中常使用平均或加权平均作为决策规则
距离度量在机器学习和数据挖掘领域中是一项基础且至关重要的工作。它用于衡量数据集中样本之间的相似性或差异性。在KNN算法中,距离度量被用来衡量待分类样本与训练数据集中各个样本之间的距离,以便确定最近的邻居。KNN算法常用的距离度量方法包括欧氏距离和曼哈顿距离。
选择适当的 k 值对 K 近邻算法的性能至关重要。选择 k 值时,需要权衡模型的复杂度和泛化能力,通常通过交叉验证等方法来确定。
下面是一些常见的选择 k 值的方法:
在实践中,选择 k 值时需要考虑数据集的大小、类别分布、特征的数量和类型等因素。较大的 k 值会使模型更加平滑,减少噪声的影响,但可能导致模型欠拟合;而较小的 k 值可能会使模型更加复杂,容易受到局部极值点的影响,但也更容易受到噪声的干扰。因此,选择合适的 k 值需要在模型的泛化能力和准确性之间进行权衡。
优点:
缺点:
适用场景:
以《动手学机器学习》中高斯数据集的分类为例(官方项目地址),高斯数据集包含一些平面上的点,分别由两个独立的二维高斯分布随机生成。
首先,导入数据集并分析数据结构
可以看到,数据一共有200个样本,每个样本包含x,y坐标和对应的类别。然后对数据进行可视化:
将整个数据集作为训练集,将平面上其他点作为测试集。由于平面上的点是连续的,因此采用均匀网格采样获取离散点作为测试样本:
通过np.meshgrid
函数生成了409*390个网格点,xx和yy分别为横坐标和纵坐标,将两者reshape和拼接后得到的grid_data作为测试集。使用sklearn中的KNN对测试集进行分类:
从分类结果中可以看到,随着K的增大,分类边界逐渐平滑,但同时错分概率也逐渐变大。
总的来说,KNN算法是一种简单而有效的分类和回归方法,尤其适用于小型数据集和低维特征空间。然而,在大规模数据集和高维特征空间下,KNN算法的计算复杂度和内存消耗可能会成为问题,因此在实际应用中需要谨慎选择。
TODO
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。