Python机器学习分类算法(五)-- 最近邻算法(k-Nearest Neighbors,KNN)

最近邻算法原理

k-最近邻(k-Nearest Neighbors,KNN)算法是一种基本的机器学习分类和回归算法。在分类问题中,KNN通过测量不同特征值之间的距离来进行分类。它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

使用场景

KNN算法可以用于多种分类问题,包括但不限于文本分类、图像识别、推荐系统等。当数据标签噪音较大时,KNN算法较为健壮,因为它只依赖于最近的k个邻居的类别。此外,由于KNN算法易于理解和实现,它通常被用作机器学习入门的第一个算法。

优缺点

优点

  1. 原理简单,易于理解和实现。
  2. 基于实例的学习,无需建立模型,无需参数估计。
  3. 对异常值不敏感。

缺点

  1. 计算量大,特别是当训练集很大时。
  2. 需要存储所有训练数据,以便进行预测。
  3. 对数据的预处理要求较高,如特征的缩放和标准化。
  4. k值的选择对结果影响很大,通常需要交叉验证来选择合适的k值。

示例代码(使用Python的scikit-learn库)

这里以鸢尾花数据集为例,直接使用Python的scikit-learn库,简单的代码如下,如果要使用此方法,可以自行调整参数:

python 复制代码
from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  
from sklearn.neighbors import KNeighborsClassifier  
from sklearn.metrics import classification_report, confusion_matrix  
  
# 加载鸢尾花数据集  
iris = load_iris()  
X = iris.data  
y = iris.target  
  
# 数据预处理:标准化特征  
scaler = StandardScaler()  
X = scaler.fit_transform(X)  
  
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)  
  
# 创建KNN分类器,设置k=3  
knn = KNeighborsClassifier(n_neighbors=3)  
  
# 训练模型  
knn.fit(X_train, y_train)  
  
# 预测测试集  
y_pred = knn.predict(X_test)  
  
# 打印分类报告和混淆矩阵  
print(classification_report(y_test, y_pred))  
print(confusion_matrix(y_test, y_pred))

在这个示例中,我们使用了鸢尾花数据集,并对其进行了特征标准化,划分了训练集和测试集,并创建了一个KNN分类器(设置k=3),训练了模型,对测试集进行了预测,并打印了分类报告和混淆矩阵来评估模型的性能。

相关推荐
小鸡吃米…23 分钟前
机器学习 - K - 中心聚类
人工智能·机器学习·聚类
沈浩(种子思维作者)1 小时前
真的能精准医疗吗?癌症能提前发现吗?
人工智能·python·网络安全·健康医疗·量子计算
njsgcs2 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
io_T_T2 小时前
迭代器 iteration、iter 与 多线程 concurrent 交叉实践(详细)
python
华研前沿标杆游学2 小时前
2026年走进洛阳格力工厂参观游学
python
Carl_奕然2 小时前
【数据挖掘】数据挖掘必会技能之:A/B测试
人工智能·python·数据挖掘·数据分析
AI小怪兽3 小时前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机
wszy18093 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
Eric.Lee20213 小时前
python实现 mp4转gif文件
开发语言·python·手势识别·手势交互·手势建模·xr混合现实
EntyIU3 小时前
python开发中虚拟环境配置
开发语言·python