脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - python机器学习之K近邻算法

python机器学习之K近邻算法

2023-10-23 16:26青枫浦上看桃花 Python

K近邻算法(英文为K-Nearest Neighbor,简称KNN算法)是 非常经典的机器学习算法。K近邻算法的原理非常简单:对于一个新样本,K近邻算法的目的就是在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K 个数据,如果这

前言

       当有多种类别数据时,我们常常面临着对新加入的数据进行  分类  的问题,例如,根据口味和色泽划分新的葡萄酒的类别,根据内容形式划分新上映电影的类别,根据过往人脸特征进行人脸识别等。这些问题都 可以采用机器学习中非常经典的K近邻算法来解决。

一、 K近邻算法的原理和代码实现       

K近邻算法(英文为K-Nearest Neighbor,简称KNN算法)是 非常经典的机器学习算法。

1.K近邻算法的基本原理

       K近邻算法的原理非常简单:对于一个新样本,K近邻算法的目的就是在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K 个数据,如果这K个数据大多数属于某个类别,则该样本也属于这个类别。

       以下图为例,假设五角星代表爱情片,三角形代表科幻片。此时加 入一个新样本正方形,需要判断其类别。当选择以离新样本最近的3个近邻点(K=3)为判断依据时,这3个点由1个五角星和2个三角形组成,根据“少数服从多数”原则,可以认为新样本属于三角形的类别,即 新样本是一部科幻片。同理,当选择离新样本最近的5个近邻点(K= 5)为判断依据时,这5个点由3个五角星和2个三角形组成,根据“少数 服从多数”原则,可以认为新样本属于五角星的类别,即新样本是一部 爱情片。

python机器学习之K近邻算法

       明白了K的含义后,下面来学习如何判断2个数据的相似度,或者 说2个数据的距离。这里采用最为常见的欧氏距离来定义向量空间内2个 点的距离,对于二维空间而言,样本A的2个特征值为(X1,Y1),样 本B的2个特征值为(X2,Y2),那么2个样本的距离计算公式如下。

python机器学习之K近邻算法

这个其实就是常见的两点间距离公式,如下图所示,其适用于只有 2个特征变量的情况。

python机器学习之K近邻算法

      实际应用中,数据的特征通常有n个,此时可将该距离公式推广到n 维空间,如n维向量空间内A点坐标为(X1,X2,X3,…,Xn),B点 坐标为(Y1,Y2,Y3,…,Yn),那么A、B两点间的欧氏距离计算公 式如下。

python机器学习之K近邻算法

2.K近邻算法的计算步骤

2.1 样本数据

       这里通过一个简单的例子“如何判断葡萄酒的种类”来讲解K近邻算 法的计算步骤。商业实战中用于评判葡萄酒的指标有很多,为方便演 示,这里只根据“酒精含量”和“苹果酸含量”2个特征变量将葡萄酒分为2 类,并且原始样本数据只有5组,见下表。

python机器学习之K近邻算法

       其中“酒精含量”代表葡萄酒中酒精的含量,“苹果酸含量”代表葡萄 酒中苹果酸的含量,“分类”取值为0代表葡萄酒A,取值为1代表葡萄酒 B。 现在需要使用K近邻算法对一个新样本进行分类,该新样本的特征 数据见下表,那么这个新样本是属于葡萄酒A还是葡萄酒B呢?

python机器学习之K近邻算法

2.2计算距离

       此时可以利用距离公式来计算新样本与已有样本之间的距离,即不 同样本间的相似度。例如,新样本与样本1的距离计算公式如下。

python机器学习之K近邻算法

同理可以计算新样本与其他原始样本的距离,结果见下表。

python机器学习之K近邻算法

2.3.根据K值判定类别

计算出各个原始样本与新样本的距离后,再根据距离由近到远排 序,结果见下表。

python机器学习之K近邻算法

       如果令K值等于1,也就是以离新样本最近的原始样本的种类作为 新样本的种类,此时新样本离样本2最近,则新样本的分类为0,也就是 葡萄酒A。 如果令K值等于3,也就是以离新样本最近的3个原始样本的多数样 本的种类为判断依据,此时最近的3个原始样本是样本2、样本1、样本 4,它们中以分类0居多,所以判定新样本的分类为0,也就是葡萄酒 A

二、K近邻算法分类模型代码实现

1.实现过程

# 忽略警告信息
import warnings
warnings.filterwarnings('ignore')

# 读取数据

import pandas as pd
df = pd.read_excel('./葡萄酒.xlsx')
X_train = df[['酒精含量','苹果酸含量']]
y_train = df['分类']

# 建模

from sklearn.neighbors import KNeighborsClassifier as KNN
knn = KNN(n_neighbors=3)#邻近参数n_neighbors,也就是K值,设置其值为3,即选取最近的3个样本
knn.fit(X_train, y_train)

# 测试
X_test = [[7, 1]] # X_test为测试集的特征变量
answer = knn.predict(X_test)

print(answer)

引入Scikit-Learn库中的K近邻算法分类模型并简写为 KNN;第2行代码创建模型并设置邻近参数n_neighbors,也就是K值, 这里设置其值为3,即选取最近的3个样本,如果不设置则取默认值5;

2.实现结果

python机器学习之K近邻算法

打印结果为0, 表示葡萄酒A,与前面计算的结果是一致的。

接着在测试数据中增加一个新样本,例如,增加一个和样本4(分 类1)一样的样本(8%的酒精含量、3%的苹果酸含量),代码如下。

X_test1 = [[7, 1], [8, 3]] # 这行代码能帮助理解为什么要写成二维数组形式
answer1 = knn.predict(X_test1)
print(answer1)

此时得到的预测结果answer1如下所示,可以看到新增样本的确被预 测为和样本4一样的分类1。python机器学习之K近邻算法

三、K近邻算法回归模型

       前面的代码是用K近邻算法中的K近邻算法分类模型 (KNeighborsClassifier)进行分类分析,K近邻算法还可以做回归分 析,对应的模型为K近邻算法回归模型(KNeighborsRegressor)

       K近 邻算法分类模型将离待预测样本点最近的K个训练样本点中出现次数最多的分类作为待预测样本点的分类,K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值作为待预测样本点的分类。

1.K近邻算法回归模型代码演示

from sklearn.neighbors import KNeighborsRegressor
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 2, 3, 4, 5]
model = KNeighborsRegressor(n_neighbors=2)
model.fit(X, y)
print(model.predict([[5, 5]]))

        第2行代码中的X是特征变量,共有2个特征;第3行代码中的y是目 标变量;第4行代码创建模型,并设置超参数n_neighbors(K值)为2; 第5行代码用fit()函数训练模型;第6行代码用predict()函数进行预测。预 测结果如下。

python机器学习之K近邻算法

到此这篇关于python机器学习之K近邻算法的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/qq_58546982/article/details/132716351

延伸 · 阅读

精彩推荐