大家好!我是Python数据分析师,希望通过我的经验分享,帮助大家更好地掌握人工智能技术。因此,我编写了一套名为“人工智能四部曲”的教程,包括《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》和《33天搞定机器学习》。
本文是《33天搞定机器学习》系列的第22篇,我们将探讨K最近邻算法(kNN)。这是一个相对简单的算法,希望读者能够轻松学习。
k近邻法(k-nearest neighbor, kNN)是一种基于实例的学习方法,主要用于分类和回归任务。实践中,它更多地应用于分类问题。kNN的基本思想是:如果两个样本的特征足够相似,那么它们很可能属于同一类别,并具有该类别的典型特征。通俗地说,就是“物以类聚,人以群分”。
kNN的工作原理很简单。给定一个训练集,当需要对新的输入进行分类时,算法会在训练数据中找到与新输入最接近的k个样本,然后根据这k个样本的多数类别来决定新输入的类别。
举个例子,假设有一张图,绿色的圆圈代表新输入的数据点,我们需要判断它是红色三角形还是蓝色方块。如果k=3,由于红色三角形的比例较高(2/3),绿色圆圈将被归类为红色三角形。若k=5,则因为蓝色方块的比例较高(3/5),绿色圆圈将被归类为蓝色方块。
由此可见,k值的选择直接影响kNN算法的结果。
k近邻算法有三个关键要素:距离度量、k值选择和分类决策规则。距离度量已在前文介绍,不再赘述。分类决策规则通常是多数表决,即根据k个最近邻样本的多数类别来决定新输入的类别。
k值的选择至关重要。k值过小会导致算法对噪声敏感,从而降低分类精度;而k值过大则可能导致分类效果不佳。常用的k值选择方法是交叉验证法,这种方法在之前的章节中已经讨论过。
我们可以自己实现kNN算法,也可以利用sklearn
库中的KNeighborsClassifier
类来构建模型。下面是一些关键参数的说明:
```python from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier( nneighbors=5, # k=5 weights='uniform', # 权重均匀分布 algorithm='auto', leafsize=30, p=2, metric='minkowski' ) ```
n_neighbors=5
:表示k=5,即考虑最近的5个样本。weights='uniform'
:表示所有最近邻样本的权重相同;若选择weights='distance'
,则距离越近的样本权重越大。以下是建模的具体步骤:
我们使用Scikit-Learn提供的葡萄酒数据集进行实验。该数据集包含了三种不同类型的葡萄酒的化学分析结果。数据集中有13个特征和一个目标变量(葡萄酒种类)。葡萄酒种类包括:“0类”、“1类”和“2类”。
实验结果表明,当k=1时,模型的准确率最高。
希望以上内容对你有所帮助。如果你有任何疑问或建议,欢迎订阅我们的课程,获取更多代码和数据集。
以上是改写后的文章,内容更加紧凑且减少了原文的相似度,同时保留了关键信息和核心概念。希望对您有帮助!