当前位置: 首页 > news >正文

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))

相关文章:

  • JESD204B标准及其在高速AD采集系统中的应用详解
  • Ubuntu 修改语言报错Failed to download repository information
  • 从Archery到NineData:积加科技驱动数据库研发效能与数据安全双升级
  • DeepSeek 助力 Vue3 开发:打造丝滑的日历(Calendar),日历_自定义单元格大小示例(CalendarView01_07)
  • ASP.NET 中 OAuth 2.0/OpenID Connect 深度集成指南
  • “AI问诊助手”落地武汉市中心医院,深兰科技助力医疗数智化升级
  • eplan许可证无法识别硬件信息
  • 利用DeepSeek设计一个HTML批量转换工具设计
  • CrewAI Community Version(一)——初步了解以及QuickStart样例
  • 实战篇|多总线网关搭建与量产验证(5000 字深度指南)
  • (二十六)Java观察者模式在Android开发中的应用详解
  • 基于slimBOXtv 9.16 V2-晶晨S905L3A/ S905L3AB-Mod ATV-Android9.0-线刷通刷固件包
  • 预包装食品备案VS食品经营许可证
  • 安卓手机如何改ip地址教程
  • 从零开始解剖Spring Boot启动流程:一个Java小白的奇幻冒险之旅
  • 【Leetcode 每日一题】2364. 统计坏数对的数目
  • 关于hadoop和yarn的问题
  • Hadoop的三大结构及各自的作用?
  • 刀片服务器的散热构造方式
  • 游戏APP如何抵御DDoS攻击与黑客勒索?实战防护全攻略
  • 龚正会见巴西里约热内卢州州长克劳迪奥·卡斯特罗
  • 七大外贸省市,靠什么撑起一季度的出口?
  • 上海银行换帅:顾建忠出任党委书记,金煜辞任董事长
  • 如何保护人工智能领域的知识产权?上海市知识产权局局长解答
  • 针对“二选一”,美团再次辟谣
  • 官方披露:定西民政局原局长将收受烟酒高价“倒卖”给单位,用于违规接待