KNN算法及Python实现

news2024/11/23 13:25:32

0 建议学时

2学时

1 KNN算法

1.1 KNN原理

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

  • K值的选取非常重要;
    在这里插入图片描述
  • 距离公式的选择,比如欧几里得距离。
    d ( x , y ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ⋯ + ( x n − y n ) 2 = ∑ i = 1 n ( x i − y i ) 2 d(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 operator

def 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) + 1

    print("///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) 
2

a = [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.coloradmin.cn/o/365923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山东大学电磁场与电磁波期末试题

文章目录一、电磁场的基本规律二、静态电磁场及其边值问题的解三、分离变量法四、均匀平面波的反射与透射五、时变电磁场与均匀平面波在无界空间中的传播六、导行电磁波七、电磁辐射往年真题回忆复习建议一、电磁场的基本规律 设在 x<0x<0x<0 处为真空&#xff0c;x&…

LeetCode分类刷题----回溯算法

回溯1.回溯问题77.组合216.组合总和|||17.电话号码的字母组合39.组合总和40.组合总和||131.分割回文串93.复原IP地址78.子集90.子集||491.递增子序列46.全排列47.全排列||51.N皇后37.解数独1.回溯问题 77.组合 思路&#xff1a; 回溯的本质是用一棵树来描述&#xff0c;用pat…

Gitee码云 操作

1&#xff1a;Git团队协作机制1.1&#xff1a;团队内协作1.2&#xff1a;跨团队协作2&#xff1a;Gitee码云 操作码云网址&#xff1a; https://githee.com/2.1&#xff1a;创建远程仓库2.2&#xff1a;远程仓库操作命令名称作用git remote -v查看当前所有远程地址别名git remo…

Java缓存面试题——Redis应用

文章目录1、为什么要使用Redis做缓存&#xff1f;2、为什么Redis单线程模型效率也能那么高&#xff1f;3、Redis6.0为什么要引入多线程呢&#xff1f;4、Redis常见数据结构以及使用场景字符串&#xff08;String&#xff09;哈希(Hash)列表&#xff08;list&#xff09;集合&am…

【机器学习】马尔可夫链与隐马尔可夫模型(HMM)

1.马尔可夫链(Markov Chain) 马尔可夫链&#xff08;Markov chain&#xff09;&#xff0c;又称离散时间马尔可夫链&#xff08;discrete-time Markov chain&#xff09;&#xff0c;因俄国数学家安德烈马尔可夫&#xff08;A.A.Markov&#xff09;得名。描述的是状态空间中经过…

Win11系统user profile service服务登录失败解决方法

Win11系统user profile service服务登录失败解决方法分享。有用户在使用电脑的时候遇到了一些问题&#xff0c;系统的user profile service服务无法登录了。出现这个问题可能是系统文件损坏&#xff0c;或者中了病毒。接下来我们一起来看看如何解决这个问题的操作方法分享吧。 …

【unity细节】基于unity子对象(如相机)为什么无法进行z轴的拖拽移动和z轴自动归位的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐基于unity子对象为什么无法进行z轴的拖拽移动和z轴自动归位⭐ 文章目录⭐基于u…

学习系统编程No.5【虚拟地址空间】

引言: 北京时间&#xff1a;2023/2/22&#xff0c;离补考期末考试还有5天&#xff0c;不慌&#xff0c;刚午觉睡醒&#xff0c;闹钟2点20&#xff0c;拖到2点50&#xff0c;是近以来&#xff0c;唯一一次有一种睡不醒的感觉&#xff0c;但是现在却没有精神&#xff0c;因为听了…

【Spring Cloud Alibaba】007-Nacos 配置*

【Spring Cloud Alibaba】007-Nacos 配置* 文章目录【Spring Cloud Alibaba】007-Nacos 配置*一、概述1、概述2、对比 spring cloud config二、基本使用1、在管理界面新建配置2、启动权限3、 搭建 nacos-config 服务第一步&#xff1a;引入依赖第二步&#xff1a;修改 yaml 配置…

交叉编译 MQTT/Mosquitto

交叉编译 MQTT/Mosquitto 概述 Eclipse Mosquitto 是一个开源&#xff08;EPL/EDL许可&#xff09;消息代理&#xff0c;它实现了 MQTT 协议版本 5.0、3.1.1 和 3.1。Mosquitto 重量轻&#xff0c;适用于从低功耗单板计算机到全服务器的所有设备。 MQTT 协议提供了一种使用发…

【Linux】-- 开发工具(vim、gcc、g++、make/Makefile)

目录 Linux编辑器-vim使用 vim的基本概念 vim的简单配置 vim的基本操作 vim进阶命令集 插入模式 从插入模式切换为命令模式 移动光标 删除文字 复制 替换 撤销上一次操作 更改 跳至指定的行 vim底行模式命令集 列出行号 跳到文件中的某一行 查找字符 保存文…

黑马程序员 Java 项目《瑞吉外卖》

教程链接&#xff1a;https://www.bilibili.com/video/BV13a411q753 Gitee 仓库&#xff1a;https://gitee.com/weixinyang1980/reggie_take_out 运行视频&#xff1a; 瑞吉外卖后台运行视频 瑞吉外卖用户端运行视频 目录开发环境搭建数据库环境搭建Maven 项目搭建后台登录功能…

通过连接另一个数组的子数组得到一个数组

给你一个长度为 n 的二维整数数组 groups &#xff0c;同时给你一个整数数组 nums 。 你是否可以从 nums 中选出 n 个 不相交 的子数组&#xff0c;使得第 i 个子数组与 groups[i] &#xff08;下标从 0 开始&#xff09;完全相同&#xff0c;且如果 i > 0 &#xff0c;那么…

Python四大主题之一【 Web】 编程框架

目前Python的网络编程框架已经多达几十个&#xff0c;逐个学习它们显然不现实。但这些框架在系统架构和运行环境中有很多共通之处&#xff0c;本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架&#xff1a;Django、Tornado、Flask、Twisted。 …

论文复现:风电、光伏与抽水蓄能电站互补调度运行(MATLAB-Yalmip全代码)

论文复现:风电、光伏与抽水蓄能电站互补调度运行(MATLAB-Yalmip全代码) 针对风电、光伏与抽水蓄能站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用于工程界优化问题和…

JVM知识最强总结

类加载运行全过程1.java.exe调用底层jvm.dll创建java虚拟机&#xff0c;2.创建引导类加载器实例&#xff0c;3.完成实例的创建后需要一个启动器&#xff0c;这个是通过sun.misc.launcher类实现&#xff0c;通过该类的getLaunch()方法启动&#xff0c;4.然后调用该类的getClassL…

梳理数字资产,亚马逊云科技助力致盛咨询带来药物研发新福音

作为医疗保健领域的咨询公司&#xff0c;ZS需要保证服务可靠性、敏捷性和安全性的同时&#xff0c;获得经济效益。亚马逊云科技丰富的云服务产品简化了ZS基础架构的搭建&#xff0c;为ZS节省了大量的人力与资金成本。同时&#xff0c;缩短了ZS扩展基础设施的周转时间&#xff0…

一篇文章读懂Android Framework

本文旨在将Framework的框架描绘出来&#xff0c;希望抛砖引玉&#xff0c;对于读者有一定的帮助。前言写在前面&#xff1a;1、有没有必要学习linux内核&#xff1f;我认为是很有必要的。学习linux内核有助于我们加深对一些概念的理解&#xff0c;比如“进程”、“线程”。推荐…

JVM18运行时参数

4. JVM 运行时参数 4.1. JVM 参数选项 官网地址&#xff1a;https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 4.1.1. 类型一&#xff1a;标准参数选项 > java -help 用法: java [-options] class [args...](执行类)或 java [-options] -jar …

图解LeetCode——剑指 Offer 47. 礼物的最大价值

一、题目 在一个 m*n 的棋盘的每一格都放有一个礼物&#xff0c;每个礼物都有一定的价值&#xff08;价值大于 0&#xff09;。你可以从棋盘的左上角开始拿格子里的礼物&#xff0c;并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值&…