机器学习算法:K近邻(k-nearest neighbors)分类实战

简介: 机器学习算法:K近邻(k-nearest neighbors)分类实战

2.4.2 莺尾花数据集--kNN分类

Step1: 库函数导入

1importnumpyasnp# 加载莺尾花数据集fromsklearnimportdatasets# 导入KNN分类器fromsklearn.neighborsimportKNeighborsClassifierfromsklearn.model_selectionimporttrain_test_split

Step2: 数据导入&分析

1

# 导入莺尾花数据集iris=datasets.load_iris()
X=iris.datay=iris.target# 得到训练集合和验证集合, 8: 2X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=0.2)

Step3: 模型训练

这里我们设置参数k(n_neighbors)=5, 使用欧式距离(metric=minkowski & p=2)

1# 训练模型clf=KNeighborsClassifier(n_neighbors=5, p=2, metric="minkowski")
clf.fit(X_train, y_train)

[3]:

KNeighborsClassifier()

KNeighborsClassifier

n_neighbors : int,optional(default = 5)

默认情况下kneighbors查询使用的邻居数。就是k-NN的k的值,选取最近的k个点。

weights : str或callable,可选(默认=‘uniform’)

默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。

algorithm : {‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选

快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。ball tree是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。

leaf_size : int,optional(默认值= 30)

默认是30,这个是构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小。需要根据问题的性质选择最优的大小。

p : 整数,可选(默认= 2)

距离度量公式。在上小结,我们使用欧氏距离公式进行距离度量。除此之外,还有其他的度量方法,例如曼哈顿距离。这个参数默认为2,也就是默认使用欧式距离公式进行距离度量。也可以设置为1,使用曼哈顿距离公式进行距离度量。

metric : 字符串或可调用,默认为’minkowski’

用于距离度量,默认度量是minkowski,也就是p=2的欧氏距离(欧几里德度量)。

metric_params : dict,optional(默认=None)

距离公式的其他关键参数,这个可以不管,使用默认的None即可。

n_jobs : int或None,可选(默认=None)

并行处理设置。默认为1,临近点搜索并行工作数。如果为-1,那么CPU的所有cores都用于并行工作。




Step4:模型预测&可视化

1# 预测X_pred=clf.predict(X_test)
acc=sum(X_pred==y_test) /X_pred.shape[0]
print("预测的准确率ACC: %.3f"%acc)


预测的准确率ACC: 0.933

我们用表格来看一下KNN的训练和预测过程。这里用表格进行可视化:

  1. 训练数据[表格对应list]

feat_1

feat_2

feat_3

feat_4

label

5.1

3.5

1.4

0.2

0

4.9

3.

1.4

0.2

0

4.7

3.2

1.3

0.2

0

4.6

3.1

1.5

0.2

0

6.4

3.2

4.5

1.5

1

6.9

3.1

4.9

1.5

1

5.5

2.3

4.

1.3

1

6.5

2.8

4.6

1.5

1

5.8

2.7

5.1

1.9

2

7.1

3.

5.9

2.1

2

6.3

2.9

5.6

1.8

2

6.5

3.

5.8

2.2

2

  1. knn.fit(X, y)的过程可以简单认为是表格存储

feat_1

feat_2

feat_3

feat_4

label

5.1

3.5

1.4

0.2

0

4.9

3.

1.4

0.2

0

4.7

3.2

1.3

0.2

0

4.6

3.1

1.5

0.2

0

6.4

3.2

4.5

1.5

1

6.9

3.1

4.9

1.5

1

5.5

2.3

4.

1.3

1

6.5

2.8

4.6

1.5

1

5.8

2.7

5.1

1.9

2

7.1

3.

5.9

2.1

2

6.3

2.9

5.6

1.8

2

6.5

3.

5.8

2.2

2

  1. knn.predict(x)预测过程会计算x和所有训练数据的距离 这里我们使用欧式距离进行计算, 预测过程如下

step1: 计算x和所有训练数据的距离

feat_1

feat_2

feat_3

feat_4

距离

label

5.1

3.5

1.4

0.2

0.14142136

0

4.9

3.

1.4

0.2

0.60827625

0

4.7

3.2

1.3

0.2

0.50990195

0

4.6

3.1

1.5

0.2

0.64807407

0

6.4

3.2

4.5

1.5

3.66333182

1

6.9

3.1

4.9

1.5

4.21900462

1

5.5

2.3

4.

1.3

3.14801525

1

6.5

2.8

4.6

1.5

3.84967531

1

5.8

2.7

5.1

1.9

4.24617475

2

7.1

3.

5.9

2.1

5.35070089

2

6.3

2.9

5.6

1.8

4.73075047

2

6.5

3.

5.8

2.2

5.09607692

2

step2: 根据距离进行编号排序

距离升序编号

feat_1

feat_2

feat_3

feat_4

距离

label

1

5.1

3.5

1.4

0.2

0.14142136

0

3

4.9

3.

1.4

0.2

0.60827625

0

2

4.7

3.2

1.3

0.2

0.50990195

0

4

4.6

3.1

1.5

0.2

0.64807407

0

6

6.4

3.2

4.5

1.5

3.66333182

1

8

6.9

3.1

4.9

1.5

4.21900462

1

5

5.5

2.3

4.

1.3

3.14801525

1

7

6.5

2.8

4.6

1.5

3.84967531

1

9

5.8

2.7

5.1

1.9

4.24617475

2

12

7.1

3.

5.9

2.1

5.35070089

2

10

6.3

2.9

5.6

1.8

4.73075047

2

11

6.5

3.

5.8

2.2

5.09607692

2

step3: 我们设置k=5,选择距离最近的k个样本进行投票

距离升序编号

feat_1

feat_2

feat_3

feat_4

距离

label

1

5.1

3.5

1.4

0.2

0.14142136

0

3

4.9

3.

1.4

0.2

0.60827625

0

2

4.7

3.2

1.3

0.2

0.50990195

0

4

4.6

3.1

1.5

0.2

0.64807407

0

6

6.4

3.2

4.5

1.5

3.66333182

1

8

6.9

3.1

4.9

1.5

4.21900462

1

5

5.5

2.3

4.

1.3

3.14801525

1

7

6.5

2.8

4.6

1.5

3.84967531

1

9

5.8

2.7

5.1

1.9

4.24617475

2

12

7.1

3.

5.9

2.1

5.35070089

2

10

6.3

2.9

5.6

1.8

4.73075047

2

11

6.5

3.

5.8

2.2

5.09607692

2

step4: k近邻的label进行投票

nn_labels = [0, 0, 0, 0, 1] --> 得到最后的结果0。


相关文章
|
13天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
43 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
7天前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
21 2
|
11天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
28 4
|
2月前
|
机器学习/深度学习 算法 数据挖掘
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
8个常见的机器学习算法的计算复杂度总结
|
14天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
20 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
28天前
|
机器学习/深度学习 数据采集 算法
数据挖掘和机器学习算法
数据挖掘和机器学习算法
|
1月前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
163 1
|
2月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
58 1
|
2月前
|
机器学习/深度学习 存储 算法
强化学习实战:基于 PyTorch 的环境搭建与算法实现
【8月更文第29天】强化学习是机器学习的一个重要分支,它让智能体通过与环境交互来学习策略,以最大化长期奖励。本文将介绍如何使用PyTorch实现两种经典的强化学习算法——Deep Q-Network (DQN) 和 Actor-Critic Algorithm with Asynchronous Advantage (A3C)。我们将从环境搭建开始,逐步实现算法的核心部分,并给出完整的代码示例。
87 1
|
2月前
|
机器学习/深度学习 存储 算法
图解最常用的 10 个机器学习算法!
图解最常用的 10 个机器学习算法!
下一篇
无影云桌面