机器学习实战k-邻近算法(kNN)简单实施代码解读

机器学习实战k近邻算法(kNN)应用之手写数字识别代码解读 一.背景简要说明 书中假设待识别的数字已经使用图形处理软件将其处理为32*32的黑白图像,并将图片转换为文本格式。如下图代表数字0: 每个数字的训练样本大概有200个,每个数字的测试样本大概有100个,分别放在trainingDigits和testDigits中。 二.模块代码及注释 from numpy import * from os import 阅读详情

一.概念

k-邻近算法是最简单的机器学习算法之一。

k-邻近算法采用测量不同特征值之间的距离(具体说是欧氏距离)的方法进行分类。

输入待分类的数据后,计算输入特征与样本集数据对应特征的距离,选择样本集中与输入特征距离最小的前k个样本,统计这k个样本数据中出现次数最多的类别作为新数据的分类。

二.kNN的简单实施代码及注释

from numpy import *
import operator

def creatDataSet():
    dataSet = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return dataSet,labels

def classify0(inX,dataSet,labels,k):

    #求出样本集的行数,也就是labels标签的数目
    dataSetSize = dataSet.shape[0]

    #构造输入值和样本集的差值矩阵
    diffMat = tile(inX,(dataSetSize,1)) - dataSet

    #计算欧式距离
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5

    #求距离从小到大排序的序号
    sortedDistIndicies = distances.argsort()

    #对距离最小的k个点统计对应的样本标签
    classCount = {}
    for i in range(k):
        #取第i+1邻近的样本对应的类别标签
        voteIlabel = labels[sortedDistIndicies[i]]
        #以标签为key,标签出现的次数为value将统计到的标签及出现次数写进字典
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1

    #对字典按value从大到小排序
    sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

    #返回排序后字典中最大value对应的key
    return sortedClassCount[0][0]

三.详细解读

这里创建的是一个名为kNN.py的模块。

首先导入了两个模块,一个是科学计算包numpy,另一个是运算符模块,书中有提到。

接着是一个创建数据集的无参函数creatDataSet(),一共4个样本,每个样本有2个特征和1个分类标签。特征集以4*2的数组形式表示,类别标签集以列表的形式表示。

接下来是一个有4个参数的分类函数classify0(inX,dataSet,labels,k):
inX表示待分类的输入特征向量,
dataSet为样本集的特征,
labels为样本集对应每一个样本的分类标签,
k为选择最近距离的样本的数目。
其中dataSet和labels由creatDataSet()函数返回。

★ dataSetSize = dataSet.shape[0]
求出样本集的行数,即样本个数,也是分类标签labels列表里元素的个数。

shape用于返回一个矩阵或数组的大小,返回的是一个元组,即(行数,列数)。如下:

>>> import kNN
>>> dataSet,labels=kNN.creatDataSet()
>>> dataSet.shape
(4, 2)
>>> dataSet
array([[ 1. ,  1.1],
       [ 1. ,  1. ],
       [ 0. ,  0. ],
       [ 0. ,  0.1]])
>>> dataSet.shape
(4, 2)
>>> dataSet.shape[0]
4
>>> dataSet.shape[1]
2
>>> type(dataSet.shape)
<class 'tuple'>

故这里,
shape[0]即得到shape元组的第一个元素,dataSet的行数;
shape[1]即得到shape元组的第二个元素,dataSet的列数;

当有 n 个特征时,欧式距离

d=(A0−B0)2+(A1
【机器学习】k-近邻算法以及算法实例 机器学习中常常要用到分类算法,在诸多的分类算法中有一种算法名为k-近邻算法,也称为kNN算法。 一、kNN算法的工作原理 二、适用情况 三、算法实例及讲解   ---1.收集数据   ---2.准备数据   ---3.设计算法分析数据   ---4.测试算法   一、kNN算法的工作原理 官方解释:存在一个样本数据集,也称作训练样本集,并且样本中每个数据都存在标签,即我们知道样 阅读详情

相关推荐

机器学习代码实现

机器学习,里面有贝叶斯分类器代码,决策树,哈希代码,k平均代码,knn分类,逻辑回归分类,smo代码,数据集和样本点都在里面,可以让初学者更好连接算法的作用,是python就可以跑。

一段简单机器学习代码

一段简单机器学习代码,便于了解机器学习,A simple machine learning code for easy machine learning

机器学习热门算法代码实现python,附简易数据集

机器学习热门算法代码实现python,附简易数据集,拿到代码就能实战,你还在等什么。

简单机器学习

该C++程序将根据您的评价,判断执行结果 "1+1=2"。实际上仅用了最简单的 if else for 语句。这就是一个机器学习的例子,通过环境影响来进行学习。通过本例我们不难看出,在人工错误的引导下,机器会给出错误的答案 1+1不等于2。所以此类学习方法,一定要在正确引导下实践,否则会得到最坏的结果。学习完毕后,计算机会记录本次学习结果,存入数据库,下次执行相应任务时,再将结果调出执行。

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2481

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。通过ADB可以操作、管理设备上的应用。

公众号|软件测试老吴 3万+

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 320

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 85

SolidWorks 小车底盘 装配体

通过制作小车底盘了解solidworks装配体的部分知识

及时总结 2229

YOLOv11改进 | Mamba-YOLOv11-L:基于SSM的高效全局建模,精度与效率的双重突破

摘要: 本文提出Mamba-YOLOv11-L,通过集成状态空间模型(SSM)改进YOLOv11的全局建模能力。针对YOLOv11在复杂场景中全局依赖缺失、精度-效率矛盾等问题,SSM以$O(N)$计算复杂度实现长程语义捕捉。改进后的模型在工业缺陷检测(Recall↑12%)、边缘设备部署(内存↓16%)、多尺度目标检测(小目标mAP↑9%)等场景表现优异,推理速度保持>40 FPS。核心创新包括轻量化SSM模块设计(稀疏状态转移+局部上下文融合)及与YOLOv11骨干的深度集成,代码实现展示了SSM

走向CTO的路上... 570

57、各向异性材料力学问题的分析与求解

本文系统分析了各向异性材料在扭转和平面变形问题中的力学行为,介绍了基于应力和位移的求解方法,包括应力函数推导、位移场假设、艾里应力函数法等。通过具体示例,如椭圆截面杆的扭转和各向异性板的均匀拉伸,展示了求解过程,并讨论了各向异性材料在工程应用中的意义及未来研究方向。

7h6j5k4l3的博客 204

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: Andrew Ng机器学习(ML)入门学习笔记(三)
下一篇: windows下python科学计算包numpy无脑安装
SCUT_Arucee
博客等级 码龄12年 115粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值