【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
文章目录
- 【机器学习|学习笔记】 K近邻算法(K Nearest Neighbour,KNN )详解,附代码。
- 前言
- 📜 起源与发展
- ⚙️ 原理解析
- 🧠 应用领域
- 🐍 Python实现示例
欢迎铁子们点赞、关注、收藏!
祝大家逢考必过!逢投必中!上岸上岸上岸!upupup
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://blog.csdn.net/2401_89898861/article/details/147567533
前言
K-最近邻(K-Nearest Neighbors,KNN)算法是一种经典的非参数监督学习方法,广泛应用于分类和回归任务。其核心思想是:给定一个新的样本,找到训练集中与其最接近的K个样本,并根据这些邻居的标签来预测该样本的类别或数值。
📜 起源与发展
- 起源:KNN算法最早由Evelyn Fix和Joseph Hodges于1951年在为美国空军进行的研究中提出,旨在进行非参数判别分析。
- 发展:1967年,Thomas Cover和Peter Hart在其论文中进一步扩展了KNN方法,提出了“最近邻模式分类”的概念,使其成为模式识别领域的重要方法。
- 改进:随着研究的深入,KNN算法出现了多种变体,如加权KNN、模糊KNN(Fuzzy KNN)等,以提高其在不同应用场景下的性能。
⚙️ 原理解析
-
距离度量:常用的距离度量包括欧氏距离、曼哈顿距离等,用于衡量样本之间的相似性。
-
选择K值:K值的选择对模型性能有重要影响。较小的K值可能导致模型对噪声敏感,而较大的K值则可能使模型过于平滑,忽略局部结构。
-
预测机制:分类任务:通过多数投票法,即选择K个邻居中出现频率最高的类别作为预测结果。回归任务:取K个邻居的数值平均值作为预测结果。
-
权重分配:为了提高预测精度,可以根据距离对邻居赋予不同的权重,距离越近的邻居权重越大。
🧠 应用领域
- 文本挖掘:用于文本分类、情感分析等任务。
- 图像识别:在手写数字识别、人脸识别等领域表现良好。
- 推荐系统:如Netflix、Amazon等平台利用KNN进行个性化推荐。
- 金融分析:用于信用评分、风险评估等。
- 医疗诊断:辅助疾病预测和诊断。
🐍 Python实现示例
以下是使用scikit-learn
库实现KNN分类的示例代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score# 生成示例数据
X, y = make_classification(n_samples=500, n_features=2, n_informative=2,n_redundant=0, n_clusters_per_class=1, random_state=42)# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)# 创建KNN分类器
k = 5
knn = KNeighborsClassifier(n_neighbors=k)# 训练模型
knn.fit(X_train, y_train)# 预测
y_pred = knn.predict(X_test)# 评估准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型在测试集上的准确率:{accuracy:.2f}")# 可视化决策边界
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormaph = .02 # 网格步长
x_min, x_max = X_scaled[:, 0].min() - 1, X_scaled[:, 0].max() + 1
y_min, y_max = X_scaled[:, 1].min() - 1, X_scaled[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure(figsize=(8,6))
plt.contourf(xx, yy, Z, cmap=ListedColormap(['#FFAAAA', '#AAAAFF']), alpha=0.8)
plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, edgecolor='k', cmap=ListedColormap(['#FF0000', '#0000FF']))
plt.title(f"KNN分类器 (k={k})")
plt.xlabel('特征1')
plt.ylabel('特征2')
plt.show()
- 该代码首先生成一个二维的分类数据集,并对其进行标准化处理。然后,使用KNN算法进行训练和预测,并评估模型在测试集上的准确率。最后,绘制出KNN分类器的决策边界,以可视化模型的分类效果。