首页 > 编程语言 >机器学习之K近邻算法实现

机器学习之K近邻算法实现

时间:2024-06-08 14:33:13浏览次数:24  
标签:count distances 机器 近邻 labels dataset 算法 sorted class

import operator

from numpy import array, tile


def create_dataset():
    _dataset = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
    _labels = ['A', 'A', 'B', 'B']
    return _dataset, _labels


def classify(x: list, dataset: array, labels, k):
    """
    训练步骤:
          (1)计算输入点与样本数据点的距离
          (2)按照距离排序
          (3)获取距离最小的前k个点
          (4)确定前k个点在类别中出现的频率
          (5)返回前k个点出现频率最高的类别作为输入点的预测分类
    :param x: 用于训练的的数据,两个元素的列表
    :param dataset: 样本数据集
    :param labels: 标签向量
    :param k: 最近邻居数
    :return:
    """
    # 获取数据形状
    dataset_size = dataset.shape[0]
    # 求差
    diff_mat = tile(x, (dataset_size, 1)) - dataset
    # 求平方差
    sq_diff_mat = diff_mat ** 2
    # 求平方差的和
    sq_distance = sq_diff_mat.sum(axis=1)
    # 求距离
    distances = sq_distance ** 0.5
    # 排序
    sorted_distances = distances.argsort()
    # 分类统计,用于计算前k个最近距离
    class_count = {}
    for i in range(k):
        # 获取标签
        vote_label = labels[sorted_distances[i]]
        # 累加统计标签个数
        class_count[vote_label] = class_count.get(vote_label, 0) + 1
    # 对标签出现的次数排序
    sorted_class_count = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True)
    return sorted_class_count[0][0]


if __name__ == '__main__':
    dataset, labels = create_dataset()
    print(classify([0, 0], dataset, labels, 3))

  

标签:count,distances,机器,近邻,labels,dataset,算法,sorted,class
From: https://www.cnblogs.com/navysummer/p/18238603

相关文章

  • QGIS配准工具的变换算法(翻译自QGIS官方文档)
    QGIS配准工具的变换算法配准工具中有多种变换算法可用,具体取决于输入数据的类型和质量、您愿意在最终结果中引入的几何变形的性质和数量,以及地面控制点(GCP)的数量。目前,可以使用以下变换类型:线性算法用于创建坐标定位文件,与其他算法不同,它实际上不会变换栅格像素。它......
  • 初级算法02
    用时:2.5minclassSolution{publicvoidreverseString(char[]s){/**遍历左右指针交换字符*/intl=0,r=s.length-1;while(l<r){chart=s[l];s[l]=s[r];s[r]=t;l++;......
  • 机器学习笔记(3): 神经网络初步
    神经网络应该由若干神经元组成。前面的每一个神经元都会给到一个参数,将传递的所有参数看作一个向量\(\vecx\),那么此神经元的净输入为:\[z=x\omega+b\]其中\(\omega\)称为权重向量。这里认为\(x\)是行向量,而\(\omega\)是列向量。神经元还有一个激活函数\(f(\c......
  • (算法)水果成篮——<滑动窗口>
    1.题⽬链接:904.⽔果成篮2.题⽬描述: 3.解法(滑动窗⼝): 算法思路:研究的对象是⼀段连续的区间,可以使⽤「滑动窗⼝」思想来解决问题。让滑动窗⼝满⾜:窗⼝内⽔果的种类只有两种。做法: 右端⽔果进⼊窗⼝的时候,⽤哈希表统计这个⽔果的频次。这个⽔果进来后,判断哈希表的......
  • 数据结构学习笔记-迪杰斯特拉算法
    最短路径问题的经典解法-dijsktra算法问题描述:求从一个顶点到另一个顶点的最短路径【算法设计思想】Dijkstra算法的设计思想基于以下关键概念和步骤,旨在找出图中从一个给定的源顶点到其他所有顶点的最短路径。这个算法适用于有向和无向图,只要图的边权重为非负值。1.初始化......
  • Llama模型家族之拒绝抽样(Rejection Sampling)(五)蒙特卡罗算法在拒绝抽样中:均匀分布与
    LlaMA3系列博客基于LlaMA3+LangGraph在windows本地部署大模型(一)基于LlaMA3+LangGraph在windows本地部署大模型(二)基于LlaMA3+LangGraph在windows本地部署大模型(三)基于LlaMA3+LangGraph在windows本地部署大模型(四)基于LlaMA3+LangGraph在w......
  • 【纯干货】深度学习各算法的优缺点和适用场景!建议收藏。(上篇)
    ..纯 干 货.目录前馈神经网络1、梯度下降(GradientDescent)2、随机梯度下降(StochasticGradientDescent,SGD)3、小批量梯度下降(Mini-batchGradientDescent)4、动量(Momentum)5、AdaGrad、RMSprop、Adam等自适应学习率算法卷积神经网络1、LeNet-52、AlexNet3、V......
  • 初级算法01
    用时:42minclassSolution{publicintremoveDuplicates(int[]nums){/***双指针,右指针遍历整个数组,左指针记录有效值*/intl=0,r=0;Set<Integer>s=newHashSet<Integer>();for(;r<nums.l......
  • 【因果推断】【Introduction to Causal Inference from a Machine Learning Perspecti
    第一章动机:为什么你可能关心1.1辛普森悖论考虑一个纯粹假设的未来,有一种被称为COVID-27的新疾病在人类中流行。在这个纯粹假设的未来,有两种治疗方法已经被开发出来:治疗A和治疗B。治疗B比治疗A更稀缺,因此目前接受治疗A和治疗B的比例大致为73%/27%。在一个只关心最大限度......
  • 覆盖路径规划经典算法 The Boustrophedon Cellular Decomposition 详解
    2000年一篇论文CoverageofKnownSpaces:TheBoustrophedonCellularDecomposition横空出世,解决了很多计算机和机器人领域的覆盖路径问题,今天我来详细解读这个算法。TheBoustrophedonCellularDecomposition算法详解这篇论文标题为"CoveragePathPlanning:TheB......