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),训练了模型,对测试集进行了预测,并打印了分类报告和混淆矩阵来评估模型的性能。

相关推荐
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
_.Switch3 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
测开小菜鸟5 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
Power20246665 小时前
NLP论文速读|LongReward:基于AI反馈来提升长上下文大语言模型
人工智能·深度学习·机器学习·自然语言处理·nlp
数据猎手小k5 小时前
AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。
人工智能·分类·数据挖掘
数据猎手小k5 小时前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
sp_fyf_20246 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
萧鼎6 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸6 小时前
【一些关于Python的信息和帮助】
开发语言·python