Python实现DBSCAN聚类算法并样例测试


Posted in Python onJune 22, 2021

什么是聚类算法?聚类是一种机器学习技术,它涉及到数据点的分组。给定一组数据点,我们可以使用聚类算法将每个数据点划分为一个特定的组。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有高度不同的属性和/或特征。聚类是一种无监督学习的方法,是许多领域中常用的统计数据分析技术。

常用的算法包括K-MEANS、高斯混合模型(Gaussian Mixed Model,GMM)、自组织映射神经网络(Self-Organizing Map,SOM)

重点给大家介绍Python实现DBSCAN聚类算法并通过简单样例测试。

发现高密度的核心样品并从中膨胀团簇。

Python代码如下:

# -*- coding: utf-8 -*-
"""
Demo of DBSCAN clustering algorithm
Finds core samples of high density and expands clusters from them.
"""
print(__doc__)
# 引入相关包
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 初始化样本数据
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4,
                            random_state=0)
X = StandardScaler().fit_transform(X)
# 计算DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
core_samples_mask[db.core_sample_indices_] = True
labels = db.labels_
# 聚类的结果
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
n_noise_ = list(labels).count(-1)
print('Estimated number of clusters: %d' % n_clusters_)
print('Estimated number of noise points: %d' % n_noise_)
print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels))
print("Completeness: %0.3f" % metrics.completeness_score(labels_true, labels))
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))
print("Adjusted Rand Index: %0.3f"
      % metrics.adjusted_rand_score(labels_true, labels))
print("Adjusted Mutual Information: %0.3f"
      % metrics.adjusted_mutual_info_score(labels_true, labels,
                                           average_method='arithmetic'))
print("Silhouette Coefficient: %0.3f"
      % metrics.silhouette_score(X, labels))
# 绘出结果
unique_labels = set(labels)
colors = [plt.cm.Spectral(each)
          for each in np.linspace(0, 1, len(unique_labels))]
for k, col in zip(unique_labels, colors):
    if k == -1:
        col = [0, 0, 0, 1]
    class_member_mask = (labels == k)
    xy = X[class_member_mask & core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
             markeredgecolor='k', markersize=14)
    xy = X[class_member_mask & ~core_samples_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
             markeredgecolor='k', markersize=6)
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()

测试结果如下:

最终结果绘图:

Python实现DBSCAN聚类算法并样例测试

具体数据:

Python实现DBSCAN聚类算法并样例测试

以上就是Python实现DBSCAN聚类算法(简单样例测试)的详细内容,更多关于Python聚类算法的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python数组条件过滤filter函数使用示例
Jul 22 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
python中lambda与def用法对比实例分析
Apr 30 Python
python处理Excel xlrd的简单使用
Sep 12 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
对Python 内建函数和保留字详解
Oct 15 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python库matplotlib绘制坐标图
Oct 18 Python
基于python 凸包问题的解决
Apr 16 Python
基于Python脚本实现邮件报警功能
May 20 Python
Window10上Tensorflow的安装(CPU和GPU版本)
Dec 15 Python
python 对xml解析的示例
Feb 27 Python
python中sqllite插入numpy数组到数据库的实现方法
Jun 21 #Python
利用Python第三方库实现预测NBA比赛结果
Django实现drf搜索过滤和排序过滤
python生成可执行exe控制Microsip自动填写号码并拨打功能
详解Python自动化之文件自动化处理
Jun 21 #Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 #Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 #Python
You might like
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
解析php开发中的中文编码问题
2013/08/08 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
python threading模块操作多线程介绍
2015/04/08 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Pyqt5实现英文学习词典
2019/06/24 Python
Django 实现前端图片压缩功能的方法
2019/08/07 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
大学生创业项目方案
2014/03/08 职场文书
党员岗位承诺书
2014/03/25 职场文书