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计算已经过去多少个周末的方法
Jul 25 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Python2与python3中 for 循环语句基础与实例分析
Nov 20 Python
python之从文件读取数据到list的实例讲解
Apr 19 Python
python异步存储数据详解
Mar 19 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
Python之多进程与多线程的使用
Feb 23 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 Python
Python+DeOldify实现老照片上色功能
Jun 21 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
mysql5的sql文件导入到mysql4的方法
2008/10/19 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP实现执行外部程序的方法详解
2017/08/17 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
利用JS重写Cognos右键菜单的实现代码
2010/04/11 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
详解puppeteer使用代理
2018/12/27 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
解析Python中的二进制位运算符
2015/05/13 Python
python基础教程之匿名函数lambda
2017/01/17 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
python打开使用的方法
2019/09/30 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
python实现简单文件读写函数
2021/02/25 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
最新销售员个人自荐信
2013/09/21 职场文书
出纳员岗位责任制
2014/02/11 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
移交协议书
2014/08/19 职场文书
自愿离婚协议书范文2014
2014/10/12 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python