【机器学习】十大算法之一 “KNN”

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: KNN(k-nearest neighbors)算法是一种监督学习算法,也是机器学习中比较基础的算法之一。它主要应用于分类和回归。KNN算法的基本思想是在训练集中搜索k个距离测试样本最近的样本,并对这些邻居样本中的大多数进行分类或回归。KNN算法是一种非参数算法,不需要对数据分布进行任何假设,具有很强的鲁棒性和普适性。KNN算法可以用于图像识别、语音识别、推荐系统等常见的机器学习应用领域。KNN算法在实际应用中具有很高的可扩展性,几乎可以应用于任何领域。

机器学习是目前科技领域中最热门的领域之一,其核心技术之一即为机器学习算法。人们经过长期的探索和研究,发现了许多有效的机器学习算法,其中kNN算法就是其中之一。

本文将详细讲解机器学习十大算法之一 “KNN”

image.png
一、简介
KNN(k-nearest neighbors)算法是一种监督学习算法,也是机器学习中比较基础的算法之一。它主要应用于分类和回归。KNN算法的基本思想是在训练集中搜索k个距离测试样本最近的样本,并对这些邻居样本中的大多数进行分类或回归。KNN算法是一种非参数算法,不需要对数据分布进行任何假设,具有很强的鲁棒性和普适性。KNN算法可以用于图像识别、语音识别、推荐系统等常见的机器学习应用领域。

    KNN算法在实际应用中具有很高的可扩展性,几乎可以应用于任何领域。由于它不需要复杂的模型和训练过程,因此KNN算法的很容易理解和实现,是入门机器学习的一个很好的选择。

二、发展史
KNN算法最初是由留日学者Fix在1962年提出的。当时,在统计学和模式识别领域,已经有其他一些基于实例的学习算法,如自组织映射(self-organizing map, SOM),但Fix认为这些算法并不完善,存在一些问题。他提出了一种改进的基于实例的算法,即KNN算法。

    在KNN算法的提出后的几十年里,人们在KNN算法的基础上做了很多改进和扩展。其中最重要的一次改进是在1991年,Cover和Hart发表了《Nearest Neighbor Pattern Classification》一文,提出了KDT(k-dimensional tree)和LRU(least recently used)两个算法,去加速KNN算法的速度,并且证明:KNN算法在处理高维度的数据时,其速度会非常慢,而使用KDT和LRU,可以大大提高算法的效率。

三、算法公式
KNN算法的数学表达式非常简单。它的核心思想是寻找离测试样本最近的k个训练数据点,并基于这些邻居的信息进行分类或回归预测。根据不同的问题,KNN算法有不同的公式表达方式。

    对于KNN分类问题,假设测试样本为x,其所属类别为y,训练样本为(xi​,yi​)∣i=1,2,...,N。则KNN算法的数学表达式如下:

image.png
其中,cj​代表候选类,k代表近邻的个数,I为指示函数。在KNN算法中,我们通常使用欧几里德距离来衡量两个数据点之间的距离。假设xi​和xj​是两个数据点,我们可以使用以下公式计算它们之间的距离:
image.png
其中,d代表数据维度。

    对于KNN回归问题,假设测试样本为x,其真实值为y,训练样本为(xi​,yi​)∣i=1,2,...,N。则KNN算法的数学表达式如下:

image.png
其中,k代表近邻的个数。
四、算法原理详解
KNN算法的基本原理是“近朱者赤,近墨者黑”,即利用相似对象的分类结果推断新对象的分类。具体来说,KNN算法分为以下几个步骤:

1.获取数据集:包含了训练数据和测试数据;

2.计算距离:通过不同的距离函数计算新对象与训练数据之间的距离;

3.确定K值:K指的是在距离最近的K个数据对象中,占比最多的标签代表新对象的标签。K的大小是一个超参数,需要在算法中设定;

4.分类预测:根据最后统计出的K中标签的占比,得出新对象的预测标签。

    其中,距离函数的选择是KNN的核心问题。常用距离函数包括欧氏距离、曼哈顿距离、明可夫斯基距离等。具体的距离计算方法如下:

image.png
其中,xi​和xj​分别是两个数据对象,m为数据属性个数。
image.png
其中,p为一个超参数,当p=1时为曼哈顿距离,p=2时为欧氏距离。
五、算法功能详解
KNN算法主要包括KNN分类和KNN回归两种算法。接下来具体讲解这两种算法的功能。

    1. KNN分类算法
    在KNN分类算法中,给定一个测试样例,该算法会在训练集中寻找和测试样例距离最近的K个训练样例。通过统计这K个样例的类别,KNN算法最终将测试样例归入其中出现最多的类别中。

    KNN分类算法的工作流程如下:

首先,将新的数据点标记为要预测的类别;
然后,计算新的数据点和训练数据集中每个数据点之间的距离;
选取距离最近的K个训练数据点,并找出它们的类别;
统计这K个数据点中各类别出现的次数;
返回出现次数最多的类别作为预测结果。

    2. KNN回归算法
    KNN回归算法与KNN分类算法的区别在于:

在KNN回归算法中,给定一个测试样例x,该算法寻找和测试样例距离最近的K个训练样例,并假设这K个训练样例的输出为y1,y2,…,yk;
KNN回归算法使用这K个训练样例的输出变量的平均值来预测测试样例的输出变量。
KNN回归算法的工作流程如下:

首先,将新的数据点标记为要预测的目标变量;
然后,计算新的数据点和训练数据集中每个数据点之间的距离;
选取距离最近的K个训练数据点;
计算这K个数据点目标变量的平均值;
返回平均值作为预测结果。

    3. KNN算法的优缺点
    KNN算法的优点:

1、无需训练时间,训练效果好;

2、适用于各类数据源,可以用来解决许多问题;

3、准确率高,尤其应用于简单分类问题时效果很好。

    KNN算法的缺点:

1、计算量大,在处理大数据时速度会变慢;

2、决策不可解释;

3、对数据维数较高时,容易出现维数灾难问题。

六、示例代码

    1. KNN分类算法
    使用sklearn库实现KNN分类算法,以鸢尾花(iris)数据集为例:

# -*- coding: utf-8 -*-
# 引入所需的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()

# 分割数据集,划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)

# 定义KNN分类器
knn = KNeighborsClassifier(n_neighbors=3)

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

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

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

运行结果:Accuracy: 0.9666666666666667

    2. KNN回归算法
    使用sklearn库实现KNN回归算法,以波士顿房价(boston)数据集为例:

# -*- coding: utf-8 -*-
# 引入所需的库
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error

# 加载波士顿房价数据集
boston = load_boston()

# 分割数据集,划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2)

# 定义KNN回归器
knn = KNeighborsRegressor(n_neighbors=3)

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

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

# 计算均方差(MSE)
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)

运行结果:MSE: 36.23794117647059
以上代码示例中,均采用默认的距离度量算法(欧式距离),实际应用中可以根据具体情况选择其他距离度量算法。

七、总结
KNN算法是一种简单而有效的算法,可以用于各种分类和回归问题。它的核心思想是找到距离测试数据最近的k个训练数据点,然后使用它们的标签或真实值来预测未知的标签或值。在KNN算法中,我们使用欧几里德距离来衡量数据点之间的距离。在处理大型数据集时,KNN分类和回归问题的计算复杂度比较高,因为需要计算测试数据与每个训练数据点的距离。但是,KNN算法的简单性和可解释性,以及良好的准确性,在实际应用中,使其成为一个重要的算法。
image.png

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
12天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
43 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
59 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
21天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
35 0
|
1月前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
9天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
17天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
18天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
19天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
下一篇
无影云桌面