AI——K近邻算法

文章目录

  • 一、什么是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 = Nonedef __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 Nonesplit_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.mzph.cn/web/76332.shtml

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

相关文章

transient关键字深度解析

Java transient 关键字深度解析 transient(意思:瞬时的,瞬间的) 1. 核心概念 (1) 基本定义 作用:标记字段不参与序列化 适用场景: 敏感数据(如密码、密钥) 临时计算字段 依赖运行时环境的字段(如Thread对象) (2) 语法示例 java public class User implements Se…

信刻电子档案蓝光光盘刻录安全检测长期归档

信刻一直致力于为档案馆、各行业档案部门&#xff0c;提供跨网数据交换、电子档案数据磁光异质备份归档解决方案。所研制的电子档案光盘智能长期归档系统&#xff0c;满足国产环境下”刻、管、存、检、用”全生命周期管理应用需求&#xff0c;能够提供一份离线归档、一份近线存…

Word 中“母版页”的等效机制

Word 和 PowerPoint 不太一样——**Word 实际上没有像 PowerPoint 那样的“母版页&#xff08;Master Page&#xff09;”**功能。但它有1个和“母版页”功能类似的东西&#xff0c;可能造成你看到的“校徽自动出现在每一页”的现象&#xff1a; ✅ Word 中“母版页”的等效机制…

Go:反射

为什么使用反射 在编程中&#xff0c;有时需编写函数统一处理多种值类型 &#xff0c;这些类型可能无法共享同一接口、布局未知&#xff0c;甚至在设计函数时还不存在 。 func Sprint(x interface{}) string {type stringer interface {String() string}switch x : x.(type) …

SS25001-多路复用开关板

1 概述 1.1 简介 多路复用开关板是使用信号继电器实现2线制的多路复用开关板卡&#xff1b;多路复用开关是一种可以将一个输入连接到多个输出或一个输出连接到多个输入的拓扑结构。这种拓扑通常用于扫描&#xff0c;适合将一系列通道自动连接到公共线路的的设备。多路复用开…

vue3 nprogress 使用

nprogress 介绍与作用 1.nprogress 是一个轻量级的进度条组件&#xff0c;主要用于在页面加载或路由切换时显示一个进度条&#xff0c;提升用户体验。它的原理是通过在页面顶部创建一个 div&#xff0c;并使用 fixed 定位来实现进度条的效果 2.在 Vite Vue 3 项目中&#xf…

Jsp技术入门指南【六】jsp脚本原理及隐式对象

Jsp技术入门指南【六】jsp脚本原理及隐式对象 前言一、JSP 脚本元素1.1 声明1.2 表达式1.3 脚本标签 二、JSP 的隐式对象是什么三、隐式对象详解outrequestsessionapplicationconfigexception 前言 在之前的博客中&#xff0c;我们已经介绍了JSP的环境搭建、编译文件查找以及生…

vue3推荐的移动table库

vxe-table https://gitee.com/js-class/vxe-table#https://gitee.com/link?targethttps%3A%2F%2Fvxetable.cn 文档api https://vxetable.cn/#/component/table/other/bookkeepingVoucher 引入步骤 安装 npm install xe-utils vxe-tablenext 在项目main.js引入 import …

HOOPS Exchange 与HOOPS Communicator集成:打造工业3D可视化新标杆!

一、概述 在工业3D开发、BIM建筑、数字孪生和仿真分析等高端应用场景中&#xff0c;数据格式复杂、模型体量庞大、实时交互体验要求高&#xff0c;一直是困扰开发者的难题。Tech Soft 3D旗下的HOOPS Exchange和HOOPS Communicator&#xff0c;正是解决这类问题的黄金搭档。二者…

《软件设计师》复习笔记(14.3)——设计模式

目录 一、设计模式分类 1. 创建型模式&#xff08;Creational Patterns&#xff09; 2. 结构型模式&#xff08;Structural Patterns&#xff09; 3. 行为型模式&#xff08;Behavioral Patterns&#xff09; 真题示例&#xff1a; 一、设计模式分类 架构模式 高层设计决…

HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多

一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…

55、⾸屏加载⽩屏怎么进⾏优化

答&#xff1a; &#xff08;1&#xff09;使⽤CDN 减⼩代码体积&#xff0c;加快请求速度&#xff1b; (2)SSR通过服务端把所有数据全部渲染完成再返回给客⼾端&#xff1b; (3) 路由懒加载&#xff0c;当⽤⼾访问的时候&#xff0c;再加载相应模块&#xff1b; (4) 使⽤外…

什么是Python单例模式

什么是Python单例模式 Python单例模式是一种创建型设计模式,目的是确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。以下从作用和示例进行介绍: 作用 控制资源使用:避免对系统资源的重复消耗,像数据库连接、文件句柄等稀缺资源,只创建一个实例来管理使用,防…

Java 2025:解锁未来5大技术趋势,Kotlin融合AI新篇

各位Java开发者们好&#xff01;&#x1f680; 2025年的Java世界正在经历一场前所未有的技术变革。作为深耕Java领域多年的技术博主&#xff0c;今天我将带大家深入探索Java生态即将迎来的5大技术趋势&#xff0c;特别是Kotlin的深度融合和AI技术的新篇章。准备好了吗&#xff…

计算机视觉cv2入门之车牌号码识别

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以车牌号码识别这一案例来实操一下。 大致思路 车牌号码识别的大致流程可以分为这三步&#xff1a;图像预处理-寻找车牌轮廓-车牌OCR识别 接下来我们按照这三步来进行讲解。 图像预处理 …

CExercise_13_1排序算法_3快速排序算法,包括单向分区以及双向分区

题目&#xff1a; 请手动实现快速排序算法&#xff0c;包括单向分区以及双向分区&#xff1a; // 单向分区快速排序算法 void quick_sort_one_way(int arr[], int len); //双向分区快速排序算法 void quick_sort_two_way(int arr[], int len); 关键点 分析&#xff1a; &#x…

FPGA-VGA

目录 前言 一、VGA是什么&#xff1f; 二、物理接口 三、VGA显示原理 四、VGA时序标准 五、VGA显示参数 六、模块设计 七、波形图设计 八、彩条波形数据 前言 VGA的FPGA驱动 一、VGA是什么&#xff1f; VGA&#xff08;Video Graphics Array&#xff09;是IBM于1987年推出的…

Linux和Ubuntu的驱动适配情况

旧 一、Linux Yocto3.0 二、Ubuntu 1.驱动 1.rtc正常 2.led正常 3.加密芯片正常 4.硬件看门狗不行&#xff0c;驱动已经适配好&#xff0c;等硬件修复后&#xff0c;直接使用脚本就可以 5.千兆网口可以&#xff0c;两个百兆网口不行 6.USB上面和下面都可以&#xff08;插u盘…

Python 文本和字节序列(处理文本文件)

本章将讨论下述话题&#xff1a; 字符、码位和字节表述 bytes、bytearray 和 memoryview 等二进制序列的独特特性 全部 Unicode 和陈旧字符集的编解码器 避免和处理编码错误 处理文本文件的最佳实践 默认编码的陷阱和标准 I/O 的问题 规范化 Unicode 文本&#xff0c;进行安全的…

【Android学习记录】工具使用

文章目录 一. 精准找视图资源ID1. 准备工作2. 使用 uiautomator 工具2.1. 获取设备的窗口内容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector总结 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 输出内容解析…