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. Mediapipe 在RK3399PRO上的初探(二)(自定义Calculator)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. 【CompletableFuture】CompletableFuture测试runAsync()方法调用

    问题 CompletableFuture.runAsync() 返回 CompletableFuture<Void>对象,调用CompletableFuture.allOf(f1,f2). ...

  3. Average Score39届亚洲赛牡丹江站A题

    题意:       A班有n个人,B班有m个人,然后现在给你n-1个A班人的成绩,和m个B班人的成绩,然后题目要求求出A班剩下的没给成绩那个人的成绩范围,要求是这个人从A班转到B班后能使A,B的平均分 ...

  4. POJ 2516 基础费用流

    题意       有n个顾客,m个供应商,k种货物,给你顾客对于每种货物的要求个数,和供应商对于每种货物的现有量,以及供应每种货物的时候供应商和顾客之间的运输单价,问你满足所有顾客的前提下的最小运输费 ...

  5. UVA10905孩子们的游戏

    题意:       给你n个数字,让你用这n个数组组成一个最大的数字并输出来. 思路:       这个题目看完第一反应就是直接按照字符串排序,然后轻轻松松写完,交上去直接wa了,为什么会wa呢?感觉 ...

  6. [BUUCTF-Pwn]刷题记录1

    [BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...

  7. 将项目连接到远程仓库git

    方式一: git clone "git中的项目地址",此时会生成一个新的项目2.该步骤用于生成一个本地仓库 将需要提交的所有文件除了node_module.git以及输出文件dis ...

  8. Catalan数以及相关性质的证明

    \(Catalan\) 数相关证明 Mushroom 2021-5-14 \(Catalan\)数的定义 给定一个凸\(n + 1\)边形, 通过在内部不相交的对角线,把它划分成为三角形的组合,不同的 ...

  9. 传统 BI 如何转大数据数仓

    前几天建了一个数据仓库方向的小群,收集了大家的一些问题,其中有个问题,一哥很想去谈一谈--现在做传统数仓,如何快速转到大数据数据呢?其实一哥知道的很多同事都是从传统数据仓库转到大数据的,今天就结合身边 ...

  10. [bug] Scala eclipse:找不到或无法加载主类

    原因 混合java 和scala 无法编译 解决 右键项目 > properties > scala Compiler >勾选Use Project Setting > Sca ...