一、引言
1、简要介绍
本文主要介绍博主学习完机器学习的第一个算法——KNN之后的实验和心得,主要包括对鸢尾花数据集进行分析和运用KNN算法划分鸢尾花种类的过程。因为是第一次实验,所以是根据《机器学习实战》这本书上的代码实现过程作为参考,并没有调用sklearn库来直接运用KNN算法模型。
2、KNN算法的基本概念
KNN算法(K-Nearest Neighbors),也被称为K-最邻近算法,是一种基本的机器学习算法,用于分类和回归任务。其基本概念基于特征相似度来进行分类或回归预测。在KNN算法中,给定一个训练集,其中包含已知分类标签的样本数据。当需要预测一个新样本的类别时,KNN算法会计算该样本与训练集中每个样本的特征距离,并选择距离最近的K个样本(即K个最近邻)。最后,根据这K个最近邻样本的分类标签,通过多数表决或加权表决来确定新样本的类别。
二、KNN算法原理
1、KNN算法的基本原理
对于一个新的未知样本,通过计算该样本与训练集中所有样本之间的距离,找到与之距离最近的K个样本,然后根据这K个最近邻样本的类别或数值属性来判断新样本的类别或预测其数值。
2、距离度量方法
KNN算法中常用的距离度量方法主要包括以下几种:
欧氏距离(Euclidean Distance):这是最常见的距离度量方式,用于在二维或多维空间中计算两个样本之间的直线距离。在二维空间中,欧氏距离的计算公式为:
其中,(x1, y1)和(x2, y2)分别表示两个样本的坐标。欧氏距离提供了一种直观的相似性度量,特别适用于处理连续的实值特征。
曼哈顿距离(Manhattan Distance):在二维空间中,曼哈顿距离的计算公式为:
这个距离可以看作是两个样本在坐标轴上的距离之和。
闵可夫斯基距离(Minkowski Distance):这是一种通用的距离度量方式,可以根据具体的情况调整为欧氏距离、曼哈顿距离或切比雪夫距离。在二维空间中,闵可夫斯基距离的计算公式为:
其中,p是一个可调的参数。
除了上述三种常用的距离度量方法外,还有切比雪夫距离、马氏距离、巴氏距离等其他的距离度量方法。这些距离度量方法的选择取决于数据的特性和问题的需求。博主在以下分类器中使用的是欧式距离。
3、K值的选择
KNN算法中的K值选择是一个核心且关键的问题,因为它直接影响到算法的性能和预测结果。K值决定了用于分类或预测的最近邻居的数量。
K值过小:较小的K值意味着算法在预测时会更加关注与输入实例较近或相似的训练实例,这样“学习”的近似误差会减小,但估计误差可能会增大。换句话说,模型会变得相对复杂,且容易发生过拟合,即模型对训练数据的拟合度过高,导致对未知数据的预测能力下降。
K值过大:而较大的K值则会使算法在预测时考虑更大范围内的训练实例,这有助于减少估计误差,但可能会导致近似误差增大。这是因为与输入实例较远或不相似的训练实例也可能对预测结果产生影响,从而增加误判的可能性。此时,模型会变得相对简单。
因此,在选择K值时,需要权衡近似误差和估计误差。通常,K值的选择没有固定的规则,而是需要通过交叉验证等方法来确定。交叉验证将数据集划分为训练集和验证集,然后针对不同的K值进行模型训练和验证,选择在验证集上表现最好的K值作为最终的选择。
在实际应用中,K值一般取一个比较小的数值,并通过交叉验证等方法进行优化。这样可以在保证模型复杂度的同时,尽可能提高预测精度。需要注意的是,K值的选择并不是一成不变的,它需要根据具体的数据集和问题进行调整。
三、KNN算法实例 ——使用K-近邻算法根据鸢尾花外形进行分类
1、数据集准备
根据《机器学习实战》这本书,我在附录中找到了一些数据集的超链接,可以在其中找到想要的数据