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解决鸡兔同笼问题的方法
Dec 20 Python
python开发之文件操作用法实例
Nov 13 Python
matplotlib设置legend图例代码示例
Dec 19 Python
Python数据结构之图的应用示例
May 11 Python
详解Python:面向对象编程
Apr 10 Python
pycharm显示远程图片的实现
Nov 04 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
Python连接字符串过程详解
Jan 06 Python
TensorFlow 显存使用机制详解
Feb 03 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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
PHP 文件缓存的性能测试
2010/04/25 PHP
php 面向对象的一个例子
2011/04/12 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jQuery插件开发全解析
2012/10/10 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python编写屏幕截图程序方法
2015/02/18 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
加工操作管理制度
2014/01/19 职场文书
办公室岗位职责
2014/02/12 职场文书
创意婚礼策划方案
2014/05/18 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技