机器学习学习笔记之一:K最近邻算法(KNN)

假定数据有M个特征,则这些数据相当于在M维空间内的点

[X = \begin{pmatrix} x_{11} & x_{12} & … & x_{1M} \ x_{21} & x_{22} & … & x_{2M} \ . & . & & .\ . & . & & .\ . & . & & .\ x_{N1} & x_{N2} & … & x_{NM} \end{pmatrix}]

同时我们有标注集向量

[\vec{y} = \begin{pmatrix} y_1 \ y_2 \ . \ . \ . \ y_M \end{pmatrix}]

那么对于一个新的数据点

[\vec{x_z} = \begin{pmatrix} x_{z1} & x_{z2} & … & x_{zM} \end{pmatrix}]

我们通过计算其与其他所有点的欧氏距离

[D_j=\sqrt{(x_{z1}-x_{j1})^2+(x_{z2}-x_{j2})^2+…+(x_{zM}-x_{jM})^2} ]

得到与所有点的距离向量(并按从小到大排序)

[\vec{D} = \begin{pmatrix} D_1 \ D_2 \ . \ . \ . \ D_M \end{pmatrix}]

取前k个点即为最近邻的k个点。

[\vec{D_k} = \begin{pmatrix} D_1 \ D_2 \ . \ . \ . \ D_k \end{pmatrix}]

根据这k个点所对应的标注,统计这些标注出现的次数(n_k)

[\vec{y’}=\begin{pmatrix} y_1 & n_1 \ y_2 & n_2 \ . & .\ . & .\ . & .\ y_k & n_k \end{pmatrix}]

取数量最大的标注作为(\vec{x_z})的标注。

[y_z = \max_n{\vec{y’}} ]

算法实现(Python)

from numpy import *

def KNNclassify(inX, dataset, labels, k):
"""
    K-Nearest Neighbour algorithm
    :param inX: Input vector X
    :param dataset: Training Dataset
    :param labels: Labels vector
    :param k: the number of nearest neighbours
    :return: The class of input
"""
    dataset_size = dataset.shape[0]
    diffMat = tile(inX, (dataset_size, 1)) - dataset  # Use inX to fill a matrix of dataset_size
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)  # Sum according to rows of matrix
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()  # Get the index of all distances
    classCount = {}
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

算法优点

算法缺点

Original: https://www.cnblogs.com/ryuasuka/p/7368078.html
Author: 飞鸟_Asuka
Title: 机器学习学习笔记之一:K最近邻算法(KNN)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/610472/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • CMU15-445 数据库导论 Storage01

    CMU15-445 01 Storage 1. 参考资料: [1] CMU15-445:Database Systems [Andy Pavlo] https://15445.co…

    Linux 2023年6月6日
    0101
  • Visual Studio远程调试

    在工作中有时候需要在服务器的环境下远程调试,例如调试微信相关服务的时候。 1. 下载远程调试工具 网址:https://visualstudio.microsoft.com/zh-…

    Linux 2023年6月7日
    0111
  • Linux基线加固

    bash;gutter:true; 1、修改vsftp回显信息 (1)检查办法 修改vsftp回显信息: 需在安装VSFTP的情况下检查,未安装可忽略或禁用该项。 查看ftpd_b…

    Linux 2023年6月13日
    089
  • 6.18(反射和注解—>反射机制的作用)

    反射 获取Class对象三种方式第一种方式:类.class第二种方式:对象.getClass()第三种方式:Class.forName 在&#x4E0…

    Linux 2023年6月7日
    0125
  • JavaScript快速入门-04-运算符

    4 运算符 4.1 算术运算符 4.1.1 概述 JavaScript 提供的算术运算符如下所示: 类型 符号 示例 加法运算符 + a+b 减法运算符 – a-b 乘…

    Linux 2023年6月7日
    077
  • ssl证书的选型,你知道多少?

    介绍 目前互联网常用的HTTP协议是非常不安全的明文传输协议。而SSL协议及其继任者TLS协议,是一种实现网络通信加密的安全协议,可在客户端(浏览器)和服务器端(网站)之间建立一条…

    Linux 2023年6月6日
    082
  • Ubuntu18.04安装/卸载NVIDIA显卡驱动

    1 显卡驱动下载 官网:NVIDIA 搜索适合本机的驱动 获取最新版本驱动 立即下载 文件 上面,显卡驱动程序下载已完成。 [En] Above, the video card d…

    Linux 2023年5月27日
    0235
  • Redis的slot迁移

    1) 在目标节点B 上执行,从节点A 导入slot 到节点B : CLUSTER SETSLOT8 IMPORTING src– A-node-id 对于迁移的slot…

    Linux 2023年5月28日
    071
  • Dockerfile

    Docker可以通过Dockerfile构建镜像。Dockerfile是一个文本文档,它包含用户可以在命令行上调用的所有命令来组装镜像。使用 docker build用户可以创建一…

    Linux 2023年6月13日
    090
  • 记vs2019 The view ‘xxx’ was not found.

    版本:Visual Studio 2019 16.8.2/16.8.4.net core 3.1 1.检测是否是拼写错误2.检查.csproj为文件中是否包含有下面的content…

    Linux 2023年6月7日
    0121
  • 【论文笔记】(2017,BIM)Adversarial Machine Learning at Scale

    本文主要是给出了两类多个对抗攻击方法:one-step 攻击和 multi-step 攻击,并在大型模型和大型数据集上对这些方法进行对比实验,实验结果发现使用 one-step 样…

    Linux 2023年6月7日
    091
  • 【Javaweb】JSP标准标签库

    JSTL 1.什么是JSTL 2.版本 3.标签函数库 4.优点 JSTL基本概念 标签(Tag) 标签库(Tag library) 标签库描述文件(Tag Library Des…

    Linux 2023年6月14日
    0157
  • 三、Linux基础命令

    查看文件[root@node01 ~]# lsanaconda-ks.cfg Desktop Documents Downloads initial-setup-ks.cfg Mu…

    Linux 2023年6月7日
    075
  • Linux命令篇-awk 命令

    gawk – pattern scanning and processing language; awk:gawk是Unix中原始awk程序的GNU版本,强大之处在于可…

    Linux 2023年6月13日
    095
  • 聊聊消息中心的设计与实现逻辑

    厌烦被消息打扰,又怕突然间的安静; 一、业务背景 微服务的架构体系中,会存在很多基础服务,提供一些大部分服务都可能需要的能力,比如文件管理、MQ队列、缓存机制、消息中心等等,这些服…

    Linux 2023年6月14日
    095
  • 使用idea操作git(ssh协议)

    问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from rems…

    Linux 2023年6月6日
    0138
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球