5 KNN算法及Python实现

news/2024/4/19 7:31:49/文章来源:https://blog.csdn.net/search_129_hr/article/details/129175032

0 建议学时

2学时

1 KNN算法

1.1 KNN原理

KNN:K Nearest Neighbors,即K个最近的邻居;
预测一个新值xxx,根据距离最近的K个点的类别来判断xxx属于哪一类。
在这里插入图片描述
算法核心要点:

  • K值的选取非常重要;
    在这里插入图片描述
  • 距离公式的选择,比如欧几里得距离。
    d(x,y)=(x1−y1)2+(x2−y2)2+⋯+(xn−yn)2=∑i=1n(xi−yi)2d(x, y) =\sqrt{\left(x_{1}-y_{1}\right)^{2}+\left(x_{2}-y_{2}\right)^{2}+\cdots+\left(x_{n}-y_{n}\right)^{2}}=\sqrt{\sum_{i=1}^{n}\left(x_{i}-y_{i}\right)^{2}} d(x,y)=(x1y1)2+(x2y2)2++(xnyn)2=i=1n(xiyi)2

1.2 KNN应用于建筑工程质量评价

建筑工程施工质量优良评价分哪两个阶段进行?两者关系是什么?

  • 分为工程结构和单位工程两个阶段进行。
  • 工程结构施工质量优良评价应在地基及桩基工程、结构工程以及附属的地下防水层完工。且主体工程质量验收合格的基础上进行。
  • 单位工程优良评价应在工程结构优良的基础上,在竣工验收合格之后进行。
  • 工程结构达不到优良,单位工程不能评价为优良。

如何科学的进行多维质量评价?
在这里插入图片描述
训练数据如下:
在这里插入图片描述

import numpy as np
import operatordef knn(trainData, testData, labels, k):rowSize = trainData.shape[0] # 计算训练样本的行数diff = np.tile(testData, (rowSize, 1))-trainData    # 计算训练样本和测试样本的差值sqrDiff = diff ** 2    # 计算差值的平方和sqrDiffSum = sqrDiff.sum(axis=1)distances = sqrDiffSum ** 0.5   # 计算距离sortDistance = distances.argsort()     # 对所得的距离从低到高进行排序count = {}for i in range(k):vote = labels[sortDistance[i]]count[vote] = count.get(vote, 0) + 1print("///sortDistance")print(sortDistance)print(vote)sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True) # 对类别出现的频数从高到低进行排序return sortCount[0][0] # 返回出现频数最高的类别trainData = np.array([[5, 1], [3, 4], [4, 4], [2, 3]])
labels = ['A类', 'B类', 'A类', 'B类']
testData = [3, 2]
X = knn(trainData, testData, labels, 3)
print(X)

K值的选取
在这里插入图片描述

2 课后延伸

思考题:KNN与传统的权重方式的评价方式的使用范围?优缺点?

附录

Tile函数

  • 原型:numpy.tile(A, reps)
    tile共有2个参数,A指待输入数组,reps则决定A重复的次数。整个函数用于重复数组A来构建新的数组。
    假设reps的维度为d,那么新数组的维度为max(d,A.ndim)。

  • ndarray.ndim
    指数组的维度,即数组轴(axes)的个数,其数量等于秩(rank)。通俗地讲,我们平时印象中的数组就是一维数组,维度为1、轴的个数为1、秩也等于1;最常见的矩阵就是二维数组,维度为2、轴的个数为2(可以理解为由x轴、y轴组成)、秩等于2;我们所知的空间就相当于三维数组,维度为3、轴的个数为3(x、y、z轴)、秩等于3;以此类推。

import numpy as np
A=[[8,9]]
diff = np.tile(A, (2, 1))  #行复制,np.tile(A,(2,1))第一个参数为Y轴扩大倍数,第二个为X轴扩大倍数,X轴扩大一倍便为不复制。
print(diff)[[8 9][8 9]]
import numpy as np
A=[[8,9]]
diff = np.tile(A, (1, 2))  # 列复制
print(diff)[[8 9 8 9]]

operator.itemgetter函数

import operator
# operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为序号
a = [1,2,3] 
>>> b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值
>>> b(a) 
2a = [1,2,3] 
>>> b=operator.itemgetter(1,0)  //定义函数b,获取对象的第1个域和第0个的值
>>> b(a) 
>>> (2, 1)
import operator
students = [('john', 'A', 15),  ('jane', 'B', 12),  ('dave', 'B', 10)]根据第二个域进行排序
sorted(students, key=operator.itemgetter(2))

argsort函数

np.argsort(a, axis=-1, kind=‘quicksort’, order=None)
函数功能:将a中的元素从小到大排列,提取其在排列前对应的index(索引)输出

import numpy as np
x=np.array([1,4,3])
y=x.argsort()
print(y)[0 2 1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74123.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学不好,英语不行,非本专业,可以学IT吗?

很多小伙伴,都会问小青一些比较类似的问题。比如:不是计算机专业的,可以学编程吗?数学一直就不好,可以转行学IT吗?学编程开发,对英语的的要求会不会很高?01计算机不是计算机专业的&a…

【Arduino 无刷电机控制教程】

【Arduino 无刷电机控制教程】 1. 概述2. 试验准备3. 实验原理4. Arduino 无刷电机控制 – 电路图4.1 实验组件4.2 用于 BLDC 电机控制的 Arduino 代码5. 实验验证5.1 电位计控制无刷电机速度5.2 电调校准在本教程中,我们将学习如何使用 Arduino 和 ESC 控制无刷电机。如果您想…

(三)代表性物质点邻域的变形分析

本文主要内容如下:1. 伸长张量与Cauchy-Green 张量2. 线元长度的改变2.1. 初始/当前构型下的长度比2.2. 主长度比与 Lagrange/Euler 主方向2.3. 初始/当前构型下任意方向的长度比3. 线元夹角的改变4. 面元的改变5. 体元的改变1. 伸长张量与Cauchy-Green 张量 由于变…

ABAP 辨析CO|CN|CA|NA|CS|NS|CP|NP

1、文档说明 本篇文档将通过举例,解析字符的比较运算符之间的用法和区别,涉及到的操作符:CO|CN|CA|NA|CS|NS|CP|NP 2、用法和区别 用法总览 以下举例,几乎都使用一个字符变量和一个硬编码字符进行对比的方式,忽略尾…

刚上岸字节测试开发岗,全网最真实的大厂面试真题

首先我来解释一下为什么说是全网最真实的面试题,相信大家也发现软件测试面试题在网上流传也已不少,但是经过仔细查看发现了两个很重要的问题。 第一,网上流传的面试题的答案并不能保证百分百正确。也就是说各位朋友辛辛苦苦花了很多时间准备…

【数据结构趣味多】Map和Set

1.概念及场景 Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。 在此之前,我还接触过直接查询O(N)和二分查询O(logN),这两个查询有很多不足之出,直接查询的速率太低,而二分查…

Servlet笔记(11):Servletcontext对象

1、什么是ServletContext ServletContext是一个全局储存空间,随服务器的生命周期变化, Cookie,Session,ServletContext的区别 Cookie: 存在于客户端的本地文本文件 Session: 存在于服务器的文本文件&#…

在外包公司熬了 3 年终于进了字节,竭尽全力....

其实两年前校招的时候就往字节投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里这两年除了工作以外,也会坚持写博客,也因此结识了很多优秀的小伙伴,从他们身上学到了特别…

使用kubeadm 部署kubernetes 1.26.1集群 Calico ToR配置

目录 机器信息 升级内核 系统配置 部署容器运行时Containerd 安装crictl客户端命令 配置服务器支持开启ipvs的前提条件 安装 kubeadm、kubelet 和 kubectl 初始化集群 (master) 安装CNI Calico 集群加入node节点 机器信息 主机名集群角色IP内…

FreeRTOS的Delay函数

两个Delay函数有两个延时函数vTaskDelay:至少等待指定个数的Tick Interrupt才能变为就绪态xTaskDelayUtil:等待到指定的绝对时刻,才能变为就绪态个人感觉这两个延时函数就是,比如一个我等3个小时,一个是我等到下午3点的…

回归预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络数据回归预测

回归预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络数据回归预测 目录回归预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络数据回归预测效果一览基本介绍模型搭建程序设计参考资料效果一览 基本介绍 基于贝叶斯优化卷积双向长短期记忆网络(…

会声会影2023专业版视频处理制作软件功能详细介绍

会声会影是一款专业的视频处理和制作软件,也是目前影楼制作结婚和一般视频特效制作的必备软件,他是一款专为个人及家庭所设计的数码影片编辑软件,可将数 字或模拟摄像机所拍下来的如成长写真、国外旅游、个人MTV、生日派对、毕业典礼等精彩生…

惠普m1136打印机驱动程序安装教程

惠普m113打印机是一款功能强大的多功能打印机,它能够打印、复印、扫描和传真等。如果你要使用这款打印机,你需要下载并安装驱动程序,以确保它能够在你的计算机上正常工作。在本文中,我们将介绍如何下载和安装惠普m1136打印机驱动程…

loki 日志管理的安装部署使用

loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。 不对日志进行…

STM32——窗口看门狗

什么是窗口看门狗? 窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测 程序运行时间的场合。 窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器。 产生复位条件: 当递减…

关于死锁的一些基本知识

目录 死锁是什么? 死锁的三种经典情况 1.一个线程,一把锁,连续加锁两次,如果锁是不可重入锁就会死锁。 不可重入锁与可重入锁: 2.两个线程两把锁,t1和t2各自针对于锁A和锁B加锁,再尝试获取…

MongoDB-怎么将csv数据导入mongodb数据库的某张表中

背景介绍 背景就是开发突然问我能不能往数据库导数据,然后只需要某几列的数据。我的第一想法是:用python脚本读取csv文件,将内容拼接成json格式的文本,然后用脚本的方式导入。后来发现我用的GUI工具就可以直接导入数据到数据库中。…

OSS存储使用之centOS系统ossfs挂载

以CentOS7系统为例 下载CentOS系统支持的ossfs工具的版本,以下载CentOS 7.0 (x64)版本为例,可以通过wget命令进行安装包的下载 wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm 也可以通过yum命令来进行安装包的下载 sud…

操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 注:阅读本编文章前,请先阅读系列文章,以免造成看不懂的情况!! MSF和CS绕过UAC提权 CS绕过UAC提权 拿到一个普通管理员的SHELL,在CS中没有*号代表有…

排序基础之选择排序法

目录 前言 一、什么是选择排序 二、实现选择排序 三、使用泛型扩展 四、使用自定义类型测试 前言 今天天气不错,这么好的天气不干点啥实在是有点可惜了,于是乎,拿出键盘撸一把! 来,今天来学习一下排序算法中的选…