knn算法python代码iris_史上最全面K近邻算法/KNN算法详解+python实现

本文详细介绍了K近邻(KNN)算法的核心思想,包括其简单的实现步骤、使用sklearn库的代码讲解、从零开始的Python实现、决策边界及可视化,并通过交叉验证选择合适的K值。KNN算法适用于分类问题,依赖于样本间的距离计算,而特征缩放能解决算法潜在的隐患。
摘要由CSDN通过智能技术生成

本文根据贪心学院付费课程学习笔记整理而来,参见课程网址:AI教AI。

本文github源代码网址:https://github.com/ZhiHuDaShiJie/Fundamentals-of-Machine-Learning/blob/main/2.1%20KNN.ipynb​github.comhttps://github.com/ZhiHuDaShiJie/Fundamentals-of-Machine-Learning/blob/main/2.2%20KNN%20decision%20boundary%20visualization.ipynb​github.comZhiHuDaShiJie/Fundamentals-of-Machine-Learning​github.com

本文目录:

1. KNN算法的核心思想

2. 用sklearn实现KNN代码讲解

3. KNN具体的实现步骤详解

4. 用python从零开始实现一个KNN算法

5. K近邻的决策边界以及决策边界的python可视化实现

6.用交叉验证选择超参数K

7. 用特征缩放解决KNN算法的潜在隐患

8. KNN 算法总结

以下为正文

1.KNN算法的核心思想

KNN是一个极其简单的算法,中文叫K近邻算法。

算法虽然简单,但非常有效,即便深度学习横行的今天,很多的问题其实都可以使用KNN来解决。KNN主要用于分类问题,但这不意味着不能解决回归问题,只不过回归不是它的主战场罢了

对于KNN,可以用两句话来做个总结。首先,它是最容易理解的机器学习算法。学习编程语言的第一步通常是学习编写"Hello World",那对于机器学习来说,KNN就像是一个Hello World算法。

其次,KNN是最容易实现的算法,即便从零开始实现我们完全可以通过少于五行代码来编写KNN,特别简单。

下面的图片讲述了KNN的核心思想。

总结起来,给定一个预测目标(上图中的是否给张三offer),接下来计算预测预测目标和所有样本之间的距离或者相似度(根据已有的特征,如上图中的应聘者之前工作经验年限和之前的工资水平),然后选择距离最近的前K个样本,然后通过这些样本来投票决策。

这个好比一个人如果跟很多AI工程师有交集,即可以预测这个人也是从事AI工作的。

是否可以选择不同的K值?K个数是人为定义的,可以通过一些技巧来选择合适的K值。

不同的K值会对算法有影响吗?K值当然对算法是有影响的,所以也是KNN里最为重要的一个参数。下面来看一下K值的不一样对预测产生什么样的影响。

K设置为奇数的主要好处是什么吗?一般对于二分类问题来说,把K设置为奇数是容易防止平局的现象。但对于多分类来说,设置为奇数未必一定能够防平局。

2. 用sklearn实现KNN代码讲解

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.neighbors import KNeighborsClassifier

import numpy as np

第一个import是用来导入一个样本数据。sklearn库本身已经提供了不少可以用来测试模型的样本数据,所以通过这个模块的导入就可以直接使用这些数据了。 第二个import是用来做数据集的分割,把数据分成训练集和测试集,这样做的目的是为了评估模型。第三个是导入了KNN的模块,是sklearn提供的现成的算法。

iris = datasets.load_iris()

X = iris.data

y = iris.target

print (X, y)

这几行代码是用来导入数据集的。在这里我们导入的数据集叫做iris数据集,也是开源数据中最为重要的数据集之一。这个数据包含了3个类别,所以适合的问题是分类问题。另外,具体数据集的描述可以参考:https://archive.ics.uci.edu/ml/datasets/Iris/ 从print(x,y)结果可以看到X拥有四个特征,并且标签y拥有0,1,2三种不同的值。

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2003)

在这里X存储的是数据的特征,y存储的每一个样本的标签或者分类。我们使用 train_test_split来把数据分成了训练集和测试集。主要的目的是为了在训练过程中也可以验证模型的效果。如果没有办法验证,则无法知道模型训练的好坏。

这里的random_state就像随机生成器中的seed。通过不同的值采样的训练数据和测

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值