AI——K近邻算法

news2025/5/14 20:52:28

文章目录

  • 一、什么是K近邻算法
  • 二、KNN算法流程总结
  • 三、Scikit-learn工具
    • 1、安装
    • 2、导入
    • 3、简单使用
  • 三、距离度量
    • 1、欧式距离
    • 2、曼哈顿距离
    • 3、切比雪夫距离
    • 4、闵可夫斯基距离
    • 5、K值的选择
    • 6、KD树

一、什么是K近邻算法

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

二、KNN算法流程总结

  • 1、计算已知类别数据集中的点与当前点之间的距离
  • 2、按距离递增排序
  • 3、选取与当前距离最小的k个点
  • 4、统计前k个点所在的类别出现的频率
  • 5、返回前k个点出现频率最高的类别作为当前点的预测分类

三、Scikit-learn工具

1、安装

pip3 install scikit-learn

2、导入

import sklearn

3、简单使用

在这里插入图片描述

三、距离度量

1、欧式距离

欧式距离是最容易直观理解的距离度量方法,我们小学、初中、高中接触到的两个点在空间中的距离一般都是值欧式距离。
在这里插入图片描述

2、曼哈顿距离

在这里插入图片描述

3、切比雪夫距离

在这里插入图片描述

4、闵可夫斯基距离

在这里插入图片描述

5、K值的选择

在这里插入图片描述

6、KD树

import numpy as np
# 自己实现kd树
# 一、构建kd树
# 1.确定根据哪一个维度进行划分,求方差,方差越大,数据越分散
# 2.以哪个点为切面,求中位数,离中位数越近的点作为根节点
# 3.比中位数的该维度小的放左边,大的放右边
# 4.重复以上步骤,所有的点就都在树中了
class KdNode(object):
    def __init__(self, node_data, split_index, left, right):
        self.node_data = np.array(node_data) # 节点的数据
        self.split_index = split_index # 分割的维度的序号
        self.left = left # 左节点
        self.right = right # 右节点

        
class KdTree(object):
    split_index_list = np.array([])
    data = np.array([])
    rootNode = None
    def __init__(self, data):
        self.k = len(data[0]) # 获取数据的维度
        self.data = np.array(data) # 所有的数据
        # 获取分割的维度顺序数组
        self.getSplitIndexList()
        # 构建树
        self.rootNode = self.createNode(0, self.data)
        
    def getSplitIndexList(self):
        # 获取方差排序后的下标的数组,最后[::-1来反转]
        self.split_index_list = np.argsort([np.var(self.data[:, (i)]) for i in range(self.k)])[::-1]

    def closest_to_median_index(self, array):
        median = np.median(array)
        diff = np.abs(array - median)
        return diff.argmin()  # 返回第一个最小差值的索引
    
    def createNode(self, index, dataList):
        if len(dataList) == 0:
            return None
        
        split_index = self.split_index_list[index]
        split_next = (index + 1) % self.k
        
        # 获取分割维度的中位数下标
        data_index = self.closest_to_median_index(dataList[:,(split_index)])
        # 获取该位置的数据
        rootData = dataList[data_index]
        # 删除找到的这个节点
        dataList = np.delete(dataList, data_index, 0)
        # 获取左侧的所有数据
        leftData = dataList[dataList[:,(split_index)] <= rootData[split_index]]
        # 获取右侧所有的数据
        rightData = dataList[dataList[:,(split_index)] > rootData[split_index]]
        return KdNode(rootData, split_index, self.createNode(split_next, leftData), self.createNode(split_next, rightData))

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

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

相关文章

用 NLP + Streamlit,把问卷变成能说话的反馈

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

TCP/IP和UDP协议的发展历程

TCP/IP和UDP协议的发展历程 引言 互联网的发展史是人类技术创新的辉煌篇章&#xff0c;而在这一发展过程中&#xff0c;通信协议发挥了奠基性的作用。TCP/IP&#xff08;传输控制协议/互联网协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;作为互联网通信的基础…

Function Calling的时序图(含示例)

&#x1f9cd; 用户&#xff1a; 发起请求&#xff0c;输入 prompt&#xff08;比如&#xff1a;“请告诉我北京的天气”&#xff09;。 &#x1f7ea; 应用&#xff1a; 将用户输入的 prompt 和函数定义&#xff08;包括函数名、参数结构等&#xff09;一起发给 OpenAI。 …

若依框架修改左侧菜单栏默认选中颜色

1.variables.sacc中修改为想要的颜色 2.给目标设置使用的颜色

搜广推校招面经七十八

字节推荐算法 一、实习项目&#xff1a;多任务模型中的每个任务都是做什么&#xff1f;怎么确定每个loss的权重 这个根据实际情况来吧。如果实习时候用了moe&#xff0c;就可能被问到。 loss权重的话&#xff0c;直接根据任务的重要性吧。。。 二、特征重要性怎么判断的&…

广搜bfs-P1443 马的遍历

P1443 马的遍历 题目来源-洛谷 题意 要求马到达棋盘上任意一个点最少要走几步 思路 国际棋盘规则是马的走法是-日字形&#xff0c;也称走马日&#xff0c;即x,y一个是走两步&#xff0c;一个是一步 要求最小步数&#xff0c;所以考虑第一次遍历到的点即为最小步数&#xff…

强化学习算法系列(六):应用最广泛的算法——PPO算法

强化学习算法 &#xff08;一&#xff09;动态规划方法——策略迭代算法(PI)和值迭代算法(VI) &#xff08;二&#xff09;Model-Free类方法——蒙特卡洛算法(MC)和时序差分算法(TD) &#xff08;三&#xff09;基于动作值的算法——Sarsa算法与Q-Learning算法 &#xff08;四…

AI Agents系列之AI代理架构体系

1. 引言 智能体架构是定义智能体组件如何组织和交互的蓝图,使智能体能够感知其环境、推理并采取行动。本质上,它就像是智能体的数字大脑——集成了“眼睛”(传感器)、“大脑”(决策逻辑)和“手”(执行器),用于处理信息并采取行动。 选择正确的架构对于构建有效的智能…

2025海外代理IP测评:Bright Data,ipfoxy,smartproxy,ipipgo,kookeey,ipidea哪个值得推荐?

近年来&#xff0c;随着全球化和跨境业务需求的不断扩大“海外代理IP”逐渐成为企业和个人在多样化场景中的重要工具。无论是进行数据采集、广告验证、社交媒体管理&#xff0c;还是跨境电商平台运营&#xff0c;选择合适的代理IP服务商都显得尤为重要。然而&#xff0c;市场上…

Android守护进程——Vold (Volume Daemon)

简介 介绍&#xff1a;Vold 是用来管理 android 系统的存储设备&#xff0c;如U盘、SD卡、磁盘等移动设备的热插拔、挂载、卸载、格式化 框架结构&#xff1a;Vold 在系统中以守护进程存在&#xff0c;是一个单独的进程。处于Kernel和Framework之间&#xff0c;是两个层级连接…

vue3+vite 实现.env全局配置

首先创建.env文件 VUE_APP_BASE_APIhttp://127.0.0.1/dev-api 然后引入依赖&#xff1a; pnpm install dotenv --save-dev 引入完成后&#xff0c;在vite.config.js配置文件内加入以下内容&#xff1a; const env dotenv.config({ path: ./.env }).parsed define: { // 将…

AI 组件库是什么?如何影响UI的开发?

AI组件库是基于人工智能技术构建的、面向用户界面&#xff08;UI&#xff09;开发的预制模块集合。它们结合了传统UI组件&#xff08;如按钮、表单、图表&#xff09;与AI能力&#xff08;如机器学习、自然语言处理、计算机视觉&#xff09;&#xff0c;旨在简化开发流程并增强…

OpenCV day6

函数内容接上文&#xff1a;OpenCV day4-CSDN博客 , OpenCV day5-CSDN博客 目录 平滑&#xff08;模糊&#xff09; 25.cv2.blur()&#xff1a; 26.cv2.boxFilter(): 27.cv2.GaussianBlur()&#xff1a; 28.cv2.medianBlur(): 29.cv2.bilateralFilter()&#xff1a; 锐…

【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)

背景&#xff1a; 终极目标&#xff1a;通过python调用大模型&#xff0c;获得结果&#xff0c;然后根据返回信息&#xff0c;控制AutoIT操作电脑软件&#xff0c;执行具体工作。让AI更具有执行力。 已完成部分&#xff1a; 关于python调用大模型的&#xff0c;可以参考之前的…

MARA/MARC表 PSTAT字段

最近要开发一个维护物料视图的功能。其中PSTAT字段是来记录已经维护的视图的。这里记录一下视图和其对应的字母。 MARA还有个VPSTA&#xff08;完整状态&#xff09;字段&#xff0c;不过在我试的时候每次PSTAT出现一个它就增加一个&#xff0c;不知道具体是为什么。 最近一直…

学习型组织与系统思考

真正的学习型组织不是只关注个人的学习&#xff0c;而是关注整个系统的学习。—彼得圣吉 在这两年里&#xff0c;越来越多的企业开始询问是否可以将系统思考的内容内化给自己的内训师&#xff0c;进而在公司内部进行教学。我非常理解企业这样做的动机&#xff0c;毕竟内部讲师…

支持mingw g++14.2 的c++23 功能print的vscode tasks.json生成调试

在mingw14.2版本中, print库的功能默认没有开启, 生成可执行文件的tasks.json里要显式加-lstdcexp, 注意放置顺序. tasks.json (支持mingw g14.2 c23的print ) {"version": "2.0.0","tasks": [{"type": "cppbuild","…

守护者进程小练习

守护者进程含义 定义&#xff1a;守护进程&#xff08;Daemon&#xff09;是运行在后台的特殊进程&#xff0c;独立于控制终端&#xff0c;周期性执行任务或等待事件触发。它通常以 root 权限运行&#xff0c;名称常以 d 结尾&#xff08;如 sshd, crond&#xff09;。 特性&a…

opencv函数展示3

一、图像平滑&#xff08;模糊&#xff09; 线性滤波&#xff08;速度快&#xff09;&#xff1a; 1.cv2.blur() 2.cv2.boxFilter() 3.cv2.GaussianBlur() 非线性滤波&#xff08;速度慢但效果好&#xff09;&#xff1a; 4.cv2.medianBlur() 5.cv2.bilateralFilter() 二、锐…

遥感技术赋能电力设施监控:应用案例篇

目前主流的电力巡检手段利用无人机能够通过设定灵活航线进行低空飞行、搭载不同的采集设备&#xff0c;能够从不同角度对输电线进行贴近拍摄&#xff0c;但缺陷是偏远山区无人机飞行技术要求高&#xff0c;成本高&#xff0c;且飞行的无人机也可能会对输电线产生破坏。 星图云开…