龙空技术网

学点高端技术:基于密度的聚类算法——FDBSCAN算法

Atstudy网校 251

前言:

而今大家对“对文章进行分类的算法”大约比较关切,姐妹们都想要学习一些“对文章进行分类的算法”的相关资讯。那么小编也在网上搜集了一些关于“对文章进行分类的算法””的相关文章,希望我们能喜欢,朋友们一起来学习一下吧!

机器学习、人工智能各类KNN算法层出不穷,DBSCAN具有强代表性,它是一个基于密度的聚类算法,最大的优点是能够把高密度区域划分为簇,能够在高噪声的条件下实现对目标的精准识别,但该算法当前已远不能满足人们对于高效率、高精准度的算法要求,由此FDBSCAN算法应运而生。

01

FDBSCAN聚类算法在KD-树的加持下,时间复杂度达到了O(nlogn),目标识别效率已指数级别上升。

02

Kd-树:它是一种树形结构,主要应用于多维空间关键数据的搜索。由于他的增加、删除、查询时间复杂度都是O(logn),所以才造就了FDBSCAN算法的高效率。

想必大家对于树形结构也不是特别陌生,但是对于四维及以上的树形结构,就难以体现其具体的结构了。kd-树的三维立体空间如下图所示:

03

FDBSCAN算法的高效就体现在它使用了KD树作为自己遍历数据的工具,通过树形结构,能够最大限度的提高遍历效率。在算法执行之前,首先对待处理数据创建Kd-树,使用KD树自有的空间搜索算法来进行数据划分。可以看到整个数据划分流程图:

04

下面对FDBSCAN算法伪代码进行展示:

FDBSCAN算法伪代码:

DBSCAN(D, eps, MinPts)

C = 0 //类别标示

for each unvisited point P in dataset D //遍历

mark P as visited //已经访问

NeighborPts = regionQuery(P, eps) //计算这个点的邻域

if sizeof(NeighborPts) < MinPts //不能作为核心点

mark P as NOISE //标记为噪音数据

else //作为核心点,根据该点创建一个类别

C = next cluster

expandCluster(P, NeighborPts, C, eps, MinPts) //根据该核心店扩展类别

expandCluster(P, NeighborPts, C, eps, MinPts)

add P to cluster C //扩展类别,核心店先加入

for each point P' in NeighborPts //然后针对核心店邻域内的点,如果该点没有被访问

if P' is not visited

mark P' as visited //进行访问

NeighborPts' = regionQuery(P', eps) //如果该点为核心点,则扩充该类别

if sizeof(NeighborPts') >= MinPts

NeighborPts = NeighborPts joined with NeighborPts'

if P' is not yet member of any cluster //如果邻域内点不是核心点,并且无类别,比如噪音数据,则加入此类别

add P' to cluster C

regionQuery(P, eps) //计算邻域

return all points within P's eps-neighborhood

kdtree (list of points pointList, int depth) {

var tree_node node;

node.location := median;

node.leftChild := kdtree(points in pointList before median, depth+1);

node.rightChild := kdtree(points in pointList after median, depth+1);

return node;

}

05

机器学习、深度学习、图像识别、人工智能、大数据、区块链、互联网+等各种新兴技术层出不穷,人们对于算法的效率、精度要求也是越来越严格。各位大佬们,传统DBSCAN聚类算法对于一个高分辨率,数以千百万级的像素点的图像来说,是远远不够的,那就让FDBSCAN算法来助你一臂之力吧!

最后:

1)关注+私信回复:“测试”,可以免费领取一份10G软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Mysql数据库、抓包工具、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试等。

2)关注+私信回复:"入群" 就可以邀请你进入软件测试群学习交流~~

标签: #对文章进行分类的算法 #scan算法例题讲解 #r密度聚类算法 #密度聚类的优点 #密度峰值聚类算法代码