机器学习模型从理论到实战|【004-K最近邻算法(KNN)】基于距离的分类和回归


### 文章目录

  • [@[TOC]](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [前言](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [一、什么是 KNN 算法?](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [二、距离度量方式:欧氏距离、曼哈顿距离](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [1.欧氏距离](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [2.曼哈顿距离](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [三.优化与缺点:大数据集的性能问题](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [四. 实战案例:手写数字识别](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [步骤1:数据预处理](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [步骤2:训练模型](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [步骤3:评估模型](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [全部代码](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)
  • [总结](#文章目录 @[TOC] 前言 一、什么是 KNN 算法? 二、距离度量方式:欧氏距离、曼哈顿距离 1.欧氏距离 2.曼哈顿距离 三.优化与缺点:大数据集的性能问题 四. 实战案例:手写数字识别 步骤1:数据预处理 步骤2:训练模型 步骤3:评估模型 全部代码 总结)

前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、什么是 KNN 算法?

KNN(K-Nearest Neighbors)算法是一种基于距离的分类和回归方法。它的核心思想是:在一个有标签的数据集中,对于一个新的实例,根据距离度量找到与之最近的K个训练实例,然后基于这K个邻居的信息来预测新实例的标签。在分类问题中,最常见的做法是采用多数投票法,即K个最近邻中出现次数最多的类别将被赋予新实例。而在回归问题中,通常是计算K个最近邻的目标值的平均值作为预测结果。

二、距离度量方式:欧氏距离、曼哈顿距离

1.欧氏距离

欧氏距离是最常用的距离度量方式,它来源于欧几里得几何学,计算公式为:

其中,x 和 y 是两个点,n 是维度的数量。

2.曼哈顿距离

曼哈顿距离,也称为城市街区距离,计算公式为:

三.优化与缺点:大数据集的性能问题

KNN算法的优点在于它的简单性和易于理解,但它也有一些明显的缺点。最主要的问题是在大数据集上的性能问题,尤其是在维度很高的数据集上,计算每个点之间的距离会非常耗时。此外,KNN对异常值也比较敏感,因为距离度量方式会受到异常值的影响。

为了优化KNN算法,可以采取以下措施:

  • 使用更高效的数据结构,如KD树或球树,来减少距离计算的复杂度。
  • 选择合适的K值,通过交叉验证来找到最佳的K值。
  • 归一化或标准化数据,以减少不同特征尺度的影响。

四. 实战案例:手写数字识别

步骤1:数据预处理

首先,我们需要导入必要的库,并加载MNIST数据集。

python 复制代码
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import numpy as np

# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist["data"], mnist["target"]

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

# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

步骤2:训练模型

使用KNN算法,选择一个合适的K值,例如K=5。

python 复制代码
# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=5)

# 训练模型
knn.fit(X_train, y_train)

步骤3:评估模型

使用测试集评估模型的准确率。

python 复制代码
# 预测测试集
y_pred = knn.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率:{accuracy:.2f}")

全部代码

python 复制代码
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import numpy as np

# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist["data"], mnist["target"]

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

# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=5)

# 训练模型
knn.fit(X_train, y_train)
# 预测测试集
y_pred = knn.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率:{accuracy:.2f}")#模型准确率:0.94

总结

KNN算法以其简单性和有效性在机器学习领域占有一席之地。尽管它在处理大规模数据集时可能面临性能挑战,但通过适当的优化和参数调整,KNN仍然能够提供准确的预测结果。随着技术的不断进步,KNN算法也在不断发展,例如通过集成学习和其他高级技术来提高其性能和鲁棒性。

相关推荐
renhongxia16 小时前
ORACLE-SWE:量化Oracle 信息信号对SWE代理的贡献
人工智能·深度学习·学习·语言模型·分类
小陈工13 小时前
2026年4月8日技术资讯洞察:边缘AI推理框架竞争白热化,Python后端开发者的机遇与挑战
开发语言·数据库·人工智能·python·微服务·回归
小陈工15 小时前
Python Web开发入门(十八):跨域问题解决方案——从“为什么我的请求被拦了“到“我让浏览器乖乖听话“
开发语言·python·机器学习·架构·数据挖掘·回归·状态模式
Dfreedom.18 小时前
【实战篇】神经网络在回归任务中的应用
人工智能·神经网络·算法·机器学习·回归
沅_Yuan19 小时前
基于RIME-CNN-SVM的多输入单输出回归预测模型【MATLAB】
神经网络·支持向量机·matlab·回归·cnn·svm·rime
大连好光景20 小时前
模型的评价指标(分类+回归)
人工智能·分类·回归
KKKlucifer1 天前
非结构化 / 半结构化数据的深度语义解析与精准分类分级技术
大数据·分类·数据挖掘
沅_Yuan1 天前
基于核密度估计的Transformer-LSTM-KDE多输入单输出回归模型【MATLAB】
matlab·回归·lstm·transformer·核密度估计·kde
QQ676580082 天前
AI人工智能图像识别 兔子动物分类研究 宠物行业物种鉴别及畜牧业兔种监测 兔种监测识别 YOLO图像数据集 兔类物种的计算机视觉识别模型训练 第10363期
人工智能·yolo·目标检测·目标跟踪·分类·宠物·宠物行业鉴别
听风吹等浪起2 天前
基于Swin Transformer的MIT-BIH心电信号分类系统:创新设计与优异性能
深度学习·分类·transformer