BGLL社团划分|DBSCAN密度聚类|Python复杂网络( 三 )


2.2基本概念
直观效果上看 , DBSCAN算法可以找到样本点的全部密集区域 , 并把这些密集区域当做一个一个的聚类簇 。
当邻域半径R内的点的个数大于最少点数目minpoints时 , 就是密集 。
邻域半径R内样本点的数量大于等于minpoints的点叫做核心点 。 不属于核心点但在某个核心点的邻域内的点叫做边界点 。 既不是核心点也不是边界点的是噪声点 。
如果P为核心点 , Q在P的R邻域内 , 那么称P到Q密度直达 。 任何核心点到其自身密度直达 , 密度直达不具有对称性 , 如果P到Q密度直达 , 那么Q到P不一定密度直达 。
如果存在核心点P2 , P3 , …… , Pn , 且P1到P2密度直达 , P2到P3密度直达 , …… , P(n-1)到Pn密度直达 , Pn到Q密度直达 , 则P1到Q密度可达 。 密度可达也不具有对称性 。
如果存在核心点S , 使得S到P和Q都密度可达 , 则P和Q密度相连 。 密度相连具有对称性 , 如果P和Q密度相连 , 那么Q和P也一定密度相连 。 密度相连的两个点属于同一个聚类簇 。
如果两个点不属于密度相连关系 , 则两个点非密度相连 。 非密度相连的两个点属于不同的聚类簇 , 或者其中存在噪声点 。
2.3 算法的流程
DBSCAN的算法步骤分成两步 。
a)寻找核心点形成临时聚类簇 。 扫描全部样本点 , 如果某个样本点R半径范围内点数目>=MinPoints , 则将其纳入核心点列表 , 并将其密度直达的点形成对应的临时聚类簇 。
b)合并临时聚类簇得到聚类簇 。 对于每一个临时聚类簇 , 检查其中的点是否为核心点 , 如果是 , 将该点对应的临时聚类簇和当前临时聚类簇合并 , 得到新的临时聚类簇 。 重复此操作 , 直到当前临时聚类簇中的每一个点要么不在核心点列表 , 要么其密度直达的点都已经在该临时聚类簇 , 该临时聚类簇升级成为聚类簇 。 继续对剩余的临时聚类簇进行相同的合并操作 , 直到全部临时聚类簇被处理 。
Python数据分析及代码如下:
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
原图的结果是
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
参数是eps = 0.1,min_samples=20 , 结果很差 , 没有完全分开 。
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
划分后的结果 , 参数是(eps = 0.2,min_samples=20)最优 。
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
蓝色表示离群点
准确率97.9%
可视化作图优化
原来的:
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
可视化作图优化:
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图
BGLL社团划分|DBSCAN密度聚类|Python复杂网络文章插图