【机器学习】K近邻(K-Nearest Neighbor)算法入门指南

前言:K近邻(K-Nearest Neighbor,简称KNN )算法是利用数据点之间的距离来进行预测的一种监督学习方法。在本文中将以最简单的图文方式、为初学者提供KNN算法的入门指南,原理介绍、应用场景、Python实现代码、使用KNN算法的优点和局限性。

【机器学习】K近邻(K-Nearest Neighbor)算法入门指南_第1张图片

原理介绍

K近邻(K-Nearest Neighbor,简称KNN )算法是利用数据点之间的距离来进行预测,是一种常用的监督学习算法。

它的工作原理是相似性。它假定在特征空间中相互接近的数据点很可能属于同一类。该算法首先使用标记数据训练模型,然后根据新数据点与现有数据点之间的接近程度预测其类别。

该算法的工作方式如下:
1.计算新数据点与所有现有数据点之间的距离。
2.基于计算出的距离选择K个最近的邻居。
3.确定所选K个邻居的主要类别。
4.将主要类别分配为新数据点的预测类别。
【机器学习】K近邻(K-Nearest Neighbor)算法入门指南_第2张图片

重要参数:

  • K的取值:算法被称为KNN,因为它使用K个最近的邻居来预测新数据点的类别。当K取值不同是,分类结果会有显著不同,
  • 距离计算方式:接近程度使用距离度量,如欧氏距离、曼哈顿距离或闵可夫斯基距离来衡量。

KNN算法的应用

KNN算法可以解决分类和回归问题,因此在各个行业和领域都可以被广泛应用,比如:
1.医疗保健:根据患者的病史预测患病的可能性。
2.金融:根据客户的信用历史预测客户违约贷款的可能性。
3.零售:预测客户行为并向客户推荐产品。
4.社交媒体:根据用户的兴趣推荐朋友和内容。

实例实现(Python)

为了说明如何在Python中实现KNN算法,这里继续使用万金油的鸢尾花数据集。

对鸢尾花数据集有兴趣的可以查看《鸢尾花数据分析项目(附详细代码和结果)》进一步了解更多的可视化和算法技巧。

在这个例子中,我们将数据集分成了80%的训练集和20%的测试集,并将K值设为3。我们训练模型并使用测试集来评估模型的准确度。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 加载数据集
data = pd.read_csv('iris.csv')

# 将数据集分为特征和标签
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 初始化KNN分类器
knn = KNeighborsClassifier(n_neighbors=3)

# 拟合训练数据
knn.fit(X_train, y_train)

# 预测测试数据
y_pred = knn.predict(X_test)

# 计算分类器的准确度
accuracy = knn.score(X_test, y_test)
print("Accuracy:", accuracy)

优点和缺点

使用KNN算法的优点包括:

  1. 简单易懂,易于实现。
  2. 可用于分类和回归问题。
  3. 可以适应新数据,模型可以随时间变化而变化。
    KNN算法也有一些缺点,包括:
  4. 对异常值和无关特征敏感。
  5. 对于大型数据集,可能会计算量较大。
  6. K值的选择需要仔细考虑,以避免过拟合或欠拟合模型。

西瓜书上有写KNN算法“是懒惰学习的著名代表……在训练阶段仅把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理”,但也指出 “虽然简单但是泛化错误率不超过贝叶斯最优分类器错误的两倍”, 说明KNN算法是一种简单而有效的机器学习算法。


优化技巧

  1. 距离度量:尝试不同的距离度量、根据数据的特点选择合适的距离度量方法。
  2. K值:尝试不同的K值来找到最优值。
  3. 减少特征:使用特征选择或降维来减少特征数量,从而降低计算复杂度,例如,PCA主成分分析和降维算法-LDA
  4. 缺失值处理:通过填充或删除缺失值来适当地处理缺失数据。
  5. 交叉验证:使用交叉验证来评估算法的性能并避免过拟合。
  6. 其他参数调整:通过print(help(KNeighborsClassifier))查看可以调整的参数,具体参数解释见官方文档。

参考资料

Scikit-Learn 官方文档

  • 1.6. Nearest Neighbors — scikit-learn 1.2.2 documentation
  • sklearn.neighbors.KNeighborsClassifier — scikit-learn 1.2.2 documentation
  • sklearn.neighbors.KNeighborsRegressor — scikit-learn 1.2.2 documentation
    这文章篇也推荐
  • sklearn中KNN模型参数释义_knn参数_超能小墨的博客-CSDN博客

其他参考资料

  • 西瓜书 第十章 降维与度量学习 10.1 K近邻学习 P225
  • K-Nearest Neighbor. A complete explanation of K-NN | by Antony Christopher | The Startup | Medium
  • K-Nearest Neighbors (kNN) — Explained | by Soner Yıldırım | Towards Data Science

你可能感兴趣的:(机器学习算法,人工智能,python,机器学习)