| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 机器学习算法学习01:利用Numpy编写KNN算法解决手写体数字识别问题 -> 正文阅读 |
|
[人工智能]机器学习算法学习01:利用Numpy编写KNN算法解决手写体数字识别问题 |
机器学习算法学习01:利用Numpy编写KNN算法解决手写体数字识别问题文章目录前言在深度学习未彻底被大众接受前,人们对人工智能的研究是企图研究出一系列巧妙的算法解决相关计算机视觉问题,这里面涌现了无数令人叹为观止的算法(随机森林,遗传算法,SVM,马尔科夫链,KNN等)即使在深度学习逐渐占据解决计算机视觉人工智能问题的算法的今天,不可否认,依旧有许多深度学习算法吸收了这些传统算法的思想,从而来进行改进,所以学习这些传统算法也是非常有必要的🖖🖖🖖。本次我们介绍的是如何利用numpy库来构造KNN算法解决手写体数字识别问题。 本篇博客的代码也已上传到github仓库,不麻烦的话可以点颗星🥰🥰🥰🥰🥰: liujiawen-jpg/KNN-Alogorith: The KNN algorithm is implemented by numpy (github.com) 1.算法介绍KNN算法全称(K-NearestNeighbor)直译为K个最近的邻居,是一种聚类算法。该算法认为我们在判断一个物体的类别可以根据与他非常相似的K个物体的类别(这K个物体的类别是已知的)来决定。 举个例子,假设我们需要鉴别某个水果的类别,我们通过比对发现他和我们拥有的水果中7个物品非常相似,我们发现这七个物品其中6个是西瓜,一个是菠萝,所以我们自然的认为这个物品是西瓜。这就是一个7NN算法。 直观一点,我们可以观察上图。该图之中存在三个类别ω1,ω2 ω3。我们使用5NN寻找五个与X相邻最近的点发现其中四个属于ω1那么我们就可以推断出X属于ω1类别。 看了上面两个例子,相信你应该对KNN算法有了基础的认识了吧,那么我们这里可以先总结出他的流程: 输入:数据x 已知类别的样本z 输出:x的类别y 开始
2.数据集介绍这里我们使用的是sklearn库提供的手写体数据集,该数据集包括了1797张手写的0-10的图片
通过以上的代码我们可以查看图片的内容,我们看出来这些其实就是一系列0-10的图片(如下两张就是0和2)(由于设置的是随机取出,所以可以多运行几次,每次运行的结果都不一样)
3.先决条件:安装numpy,sklearn库python由于他的方便简单,前人开发了无数的易于使用的库,但是这些并不会随着你的安装而自动安装(sklearn库好像会自动安装),所以我们需要自己输入命令来安装,不过也是非常简单的这里如果遇到不知道使用什么命令可以查看这个网站: 利用这个网站查询结果如下,我们复制命令 pip install numpy即可 然后我们如果是在windows系统上直接,同时按下win键和R键,在弹出的窗口中输入cmd并执行,最后在弹出的命令行界面中输入查询到的命令:
等待下载完成即可,如果遇到下载速度非常慢的话可以使用这个博客的方法(解决 ERROR: Could not find a version that satisfies the requirement xxx 的问题_JMU-HZH的博客-CSDN博客) 安装sklearn库也同理。 4.算法代码编写在此次手动实现KNN算法中,我一共写了两个py文件,KNN.py和run.py。其中KNN.py实现了kNN算法,而run.py则为程序启动脚本,让我们来一一介绍吧🕵??♂?🕵??♂?🕵??♂?: KNN.py
run.py:
5.实验结果分析在本次实验中存在三个可供我们调整的变量,分别是测试数据与训练数据的比值,计算距离的方法,选取的近邻个数K。接下来我们使用控制变量法来修改他们观察正确率的变化。 先给定我们的baseline,当测试数据与训练数据数量比为 1 :4,计算距离采用mae平均绝对误差时准确率为0.986 5.1 保持其他变量不变,修改计算距离方式1.计算距离采用mse(均方绝对误差):多次实验正确率为0.994到0.97,取二者平均值计算约为0.986 2 计算距离采用RMSE(均方根误差)方式:多次实验正确率稳定在0.978左右 5.2 保持其他变量不变,修改k的个数k = 3, accuracy = 0.983 k=4, accuracy = 0.986 k = 5 accuracy = 0.986 k=6, accuracy = 0.972 k=7,accuracy = 0.985 k=8,accuracy = 0.978 k=9,accuracy=0.980 k=10, accuracy=0.971 5.3 保持其他变量不变,修改测试数据与训练样本的比值比值为 3:7 , accuracy=0.976 比值为4:6,accuracy = 0.976 比值为1:1, accuracy = 0.971 比值为6:4,accuracy= 0.967 比值为7:3,accuracy=0.965 比值为8:2,accuracy=0.949 比值为9:1,accuracy=0.869 通过以上三个控制变量实验,我们可以发现
结语在本次实验中,我完成了独立编写kNN算法的任务,并通过控制变量法完成了对于kNN中各个变量影响性能的研究。同时我也认识到传统机器学习算法的设计巧妙,即使在深度学习一统江湖的今天,它对我们这些人工智能的后来者依旧具有非常好的启示意义,值得我们去认真学习。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 14:50:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |