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中操作字典之update()方法的使用
May 22 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
python视频按帧截取图片工具
Jul 23 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
Python操作redis和mongoDB的方法
Dec 19 Python
python数据预处理 :数据抽样解析
Feb 24 Python
如何在Python 游戏中模拟引力
Mar 27 Python
Python中的xlrd模块使用原理解析
May 21 Python
Python几种常见算法汇总
Jun 02 Python
Python Selenium自动化获取页面信息的方法
Aug 31 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
上海无线电三厂简史修改版
2021/03/01 无线电
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
Javascript基础教程之switch语句
2015/01/18 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
微信小程序 (地址选择1)--选取搜索地点并显示效果
2019/12/17 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python编程中的反模式实例分析
2014/12/08 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
Python双链表原理与实现方法详解
2020/02/22 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
Python调用飞书发送消息的示例
2020/11/10 Python
超市促销实习自我鉴定
2013/09/23 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
中文专业求职信
2014/06/20 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
关于做家务的心得体会
2016/01/23 职场文书