0x00 概述

  K近邻算法是机器学习中非常重要的分类算法。可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等。

0x01 原理

  距离接近的事物具有相同属性的可能性要大于距离相对较远的。 这是K邻近的核心思想。

  • K邻近 K-Nearest Neighbor,KNN 算法,KNN指K个最近的邻居,可认为每个样本都能用与它最相近的K个邻居来代表。

算法核心思想

一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并且具有这个类别里样本的特性。

使用场合

类域交叉或重叠较多的待分样本集

KNN算法中细分3个小算法

  • Brute Force
  • K-D Tree
  • Ball Tree

0x02 代码详解

0x02.1 Ball Tree 演示

  • 设置初始数据集 这里自己定义了一个小的数据集

    >>> X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])

  • 调用Scikit-Learn的KNN算法,设置邻居数为2,进行训练

>>> from sklearn.neighbors import NearestNeighbors  # 从调用sklearn库中的neighbors模块调用KNN
>>> import numpy as np # 调用numpy库
>>> X = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]]) # 设置训练的数据集
>>> nbrs=NearestNeighbors(n_neighbors=2,algorithm='ball_tree').fit(X) # 设置邻居数,设置训练的算法。
>>> distances,indices=nbrs.kneighbors(X) # 开始训练,返回结果
>>> print(indices)
>>> print(distances)

有些不理解,查找官方文档

URL-》https://scikit-learn.org/dev/modules/generated/sklearn.neighbors.NearestNeighbors.html?highlight=#sklearn.neighbors.NearestNeighbors



注意是先返回了距离,然后返回了下标,一开始有点懵,为什么自己在和自己比??而不是哪数据集和某个点比

后面仔细看看就明白了

  • 运行结果

直接看不好看懂,但是实际上根据邻居数和官方文档可以这么理解。

邻居数就是一个点周围离它最近的点。

针对一个点 [-1,-1] 与它对应的下标 [0 1] 表示 第1个样本 和第2个样本 距离 对应 [0,1] 表示第一个点与第一个点之间的距离,第一个点与第二个点之间的距离。

其余点都是这种规律。

  • 加入一行代码,直接抽象表示每个点的2个邻居

    >>> nbrs.kneighbors_graph(X).toarray()



可以看到用1去模拟实现了不同点的邻居。

0x02.2 KNN下的监督学习

from sklearn.neighbors import KNeighborsClassifier
x=[[0],[1],[2],[3]]
y=[0,0,1,1]
neigh=KNeighborsClassifier(n_neighbors=3)
neigh.fit(x,y)
print(neigh.predict([[1.1]]))
print(neigh.predict_proba([[0.9]]))

代码审计 - 从sklear的分类算法里选择KNeighborsClassifier

然后设置邻居数 通过.fit函数 对数据集进行拟合

neigh.predict 去预测 [1.1] 会被分成什么类

  • 正常运行结果

  • 修改了数据进行标签预测后



可以看出总共只有2个标签 一个是0 一个是1 然后根据你输入的数据进行分类,通过neigh.predict_proba 输出被分在不同标签中的概率。

机器学习算法之K近邻算法的更多相关文章

  1. 机器学习随笔01 - k近邻算法

    算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. ...

  2. 机器学习03:K近邻算法

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...

  3. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

  4. 机器学习实战笔记--k近邻算法

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  5. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  6. 机器学习 Python实践-K近邻算法

    机器学习K近邻算法的实现主要是参考<机器学习实战>这本书. 一.K近邻(KNN)算法 K最近邻(k-Nearest Neighbour,KNN)分类算法,理解的思路是:如果一个样本在特征空 ...

  7. 《机器学习实战》-k近邻算法

    目录 K-近邻算法 k-近邻算法概述 解析和导入数据 使用 Python 导入数据 实施 kNN 分类算法 测试分类器 使用 k-近邻算法改进约会网站的配对效果 收集数据 准备数据:使用 Python ...

  8. 机器学习:1.K近邻算法

    1.简单案例:预测男女,根据身高,体重,鞋码 import numpy as np import matplotlib import sklearn from skleran.neighbors im ...

  9. 《机器学习实战》——K近邻算法

    三要素:距离度量.k值选择.分类决策 原理: (1) 输入点A,输入已知分类的数据集data (2) 求A与数据集中每个点的距离,归一化,并排序,选择距离最近的前K个点 (3) K个点进行投票,票数最 ...

随机推荐

  1. 1057 Stack

    Stack is one of the most fundamental data structures, which is based on the principle of Last In Fir ...

  2. 【ShardingSphere】ShardingSphere学习(二)-核心概念-SQL

    逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称. 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order. 真实表 在分片的数 ...

  3. Android平台下Dalvik层hook框架ddi的研究

    通过adbi,可以对native层的所有代码进行hook.但对于Android系统来说,这还远远不够,因为很多应用都还是在Dalvik虚拟机中运行的. 那么,有没有什么办法可以对Dalvik虚拟机中跑 ...

  4. CVE-2013-1347:从入门到放弃之调试分析令人崩溃的 Microsoft IE CGenericElement UAF 漏洞

    0x01 2013 年 "水坑" APT 攻击事件 在 2013 年 5 月,美国的劳工部网站被黑,利用的正是 CVE-2013-1347 这个漏洞,在当时导致大量使用 IE8 访 ...

  5. (1) arm 指令格式

    arm 指令的基本格式如下: <opcode>{<cond>}{S}{.W\.N} <Rd>,<Rn>{,<operand2>} opcod ...

  6. Sping AOP

    Sping AOP 1.什么是AOP 面向切面编程(AOP) 是 面向对象编程的补充(OOP) 传统的业务处理代码中,通常会惊醒事务处理.日志处理等操作.虽然可以使用OOP的组合或继承来实现代码重用, ...

  7. CSS&HTML标签

    内容索引: 1. HTML标签:表单标签 2. CSS HTML标签:表单标签 * 表单: * 概念:用于采集用户输入的数据的.用于和服务器进行交互. * form:用于定义表单的.可以定义一个范围, ...

  8. Masm32sdk安装指南

    上一年学习win32汇编时用的masm32sdk不是最新版本的.因为最近准备继续学习win32汇编,所以准备安装最新的masm32sdk软件包.其中遇到了一些问题,从网上找了2个小时才搞定(宝宝心里苦 ...

  9. vmware快捷键大全

    初学linux的朋友往往需要使用VMware这个软件 与其打交道多了 越来越觉得快捷键的重要性 特将搜集到的快捷键记录以便查阅记忆 Ctrl-Alt-Enter 进入全屏模式 ctrl+alt+ins ...

  10. 如何访问pod --- service(7)

    一.通过service访问pod 我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller ...