run哥带你手写KNN

一个老师布置的任务 玩玩

既然要手写KNN,那么首先我们不能用框架,其次尽量少的参考别人的代码

首先要找一个数据集来用 找哪个好呢?

这时我想大家可能猜到了 – 鸢尾花 okk

okk let‘s do it!

KNN算法学习

首先来了解一下三种距离

闵可夫斯基距离,欧式距离,曼哈顿距离

懒得写了 自己查吧

加载数据集

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

加载数据

1
from sklearn.datasets import load_iris

查看数据

1
2
3
iris = load_iris()
x = iris.data
y = iris.target

image-20220908143015152

数据集划分

1
2
from sklearn.model_selection import train_test_split
x_train , x_test ,y_train , y_test = train_test_split(x, y, test_size=0.2, random_state=2333)

看一下成功没

image-20220908144021968

okk 我们已经处理好了了数据集

接下来就是算法的实现了

算法实现

核心就是一个距离的计算

首先来确定一个K 这里我们选 7 这强大的数字

然后就是

计算待预测点与已知点之间的关系 这里我们选择较为简单的欧氏距离来计算

将计算的结果进行从小到大排序,取前K个点,再将待预测点归类为多数的那一个类别,这便是对于未知点的类别预测结果了。

由于我们有四个特征 所以应该计算的是四维的距离

先把计算距离的代码给搓出来 也就是计算x_test 中每组特征与x_train 中每组特征的距离 然后取前7组

这里要用到numpy

计算方法可参考 (159条消息) 如何使用NumPy计算欧几里得距离?_asdfgh0077的博客-CSDN博客_numpy 欧式距离

这里我们随便选择一种即可

较为简陋的一次尝试

image-20220908150732251

ok 接下来让我们来选择前7个来判断他到底属于那一类

我这里十分详细了 十分照顾对python不熟练的童鞋

https://blog.csdn.net/qq_45619551/article/details/122884071

然后去 y_train 中找其对应的 label

简单的改了一下 发现已经给算出来了

image-20220908153135130

然后我们简单计算一下准确率

我超 全队 爽

image-20220908153420809