分享一个朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开


全栈工程师开发手册 (作者:栾鹏)
python数据挖掘系列教程

DBSCAN密度聚类的相关的知识内容可以参考
http://blog.csdn.net/luanpeng825485697/article/details/79438025

DBSCAN

The DBSCAN 算法将聚类视为被低密度区域分隔的高密度区域。由于这个相当普遍的观点, DBSCAN发现的聚类可以是任何形状的,与假设聚类是 convex shaped 的 K-means 相反。 DBSCAN 的核心概念是 core samples, 是指位于高密度区域的样本。 因此一个聚类是一组核心样本,每个核心样本彼此靠近(通过一定距离度量测量) 和一组接近核心样本的非核心样本(但本身不是核心样本)。算法中的两个参数, min_samples 和 eps,正式的定义了我们所说的 dense(稠密)。较高的 min_samples 或者较低的 eps表示形成聚类所需的较高密度。

更正式的,我们定义核心样本是指数据集中的一个样本,存在 min_samples 个其他样本在 eps 距离范围内,这些样本被定为为核心样本的邻居 neighbors 。这告诉我们核心样本在向量空间稠密的区域。 一个聚类是一个核心样本的集合,可以通过递归来构建,选取一个核心样本,查找它所有的 neighbors (邻居样本) 中的核心样本,然后查找 their (新获取的核心样本)的 neighbors (邻居样本)中的核心样本,递归这个过程。 聚类中还具有一组非核心样本,它们是集群中核心样本的邻居的样本,但本身并不是核心样本。 显然,这些样本位于聚类的边缘。

根据定义,任何核心样本都是聚类的一部分,任何不是核心样本并且和任意一个核心样本距离都大于eps 的样本将被视为异常值。

DBSCAN密度聚类过程:

1、构造数据集。
2、使用数据集进行DBSCAN密度聚类算法。
3、可视化聚类效果。

import numpy as np  # 数据结构
import sklearn.cluster as skc  # 密度聚类
from sklearn import metrics   # 评估模型
import matplotlib.pyplot as plt  # 可视化绘图data=[[-2.68420713,1.469732895],[-2.71539062,-0.763005825],[-2.88981954,-0.618055245],[-2.7464372,-1.40005944],[-2.72859298,1.50266052],[-2.27989736,3.365022195],[-2.82089068,-0.369470295],[-2.62648199,0.766824075],[-2.88795857,-2.568591135],[-2.67384469,-0.48011265],[-2.50652679,2.933707545],[-2.61314272,0.096842835],[-2.78743398,-1.024830855],[-3.22520045,-2.264759595],[-2.64354322,5.33787705],[-2.38386932,6.05139453],[-2.6225262,3.681403515],[-2.64832273,1.436115015],[-2.19907796,3.956598405],[-2.58734619,2.34213138],[1.28479459,3.084476355],[0.93241075,1.436391405],[1.46406132,2.268854235],[0.18096721,-3.71521773],[1.08713449,0.339256755],[0.64043675,-1.87795566],[1.09522371,1.277510445],[-0.75146714,-4.504983795],[1.04329778,1.030306095],[-0.01019007,-3.242586915],[-0.5110862,-5.681213775],[0.51109806,-0.460278495],[0.26233576,-2.46551985],[0.98404455,-0.55962189],[-0.174864,-1.133170065],[0.92757294,2.107062945],[0.65959279,-1.583893305],[0.23454059,-1.493648235],[0.94236171,-2.43820017],[0.0432464,-2.616702525],[4.53172698,-0.05329008],[3.41407223,-2.58716277],[4.61648461,1.538708805],[3.97081495,-0.815065605],[4.34975798,-0.188471475],[5.39687992,2.462256225],[2.51938325,-5.361082605],[4.9320051,1.585696545],[4.31967279,-1.104966765],[4.91813423,3.511712835],[3.66193495,1.0891728],[3.80234045,-0.972695745],[4.16537886,0.96876126],[3.34459422,-3.493869435],[3.5852673,-2.426881725],[3.90474358,0.534685455],[3.94924878,0.18328617],[5.48876538,5.27195043],[5.79468686,1.139695065],[3.29832982,-3.42456273]
]
X = np.array(data)db = skc.DBSCAN(eps=1.5, min_samples=3).fit(X) #DBSCAN聚类方法 还有参数,matric = ""距离计算方法
labels = db.labels_  #和X同一个维度,labels对应索引序号的值 为她所在簇的序号。若簇编号为-1,表示为噪声print('每个样本的簇标号:')
print(labels)raito = len(labels[labels[:] == -1]) / len(labels)  #计算噪声点个数占总数的比例
print('噪声比:', format(raito, '.2%'))n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)  # 获取分簇的数目print('分簇的数目: %d' % n_clusters_)
print("轮廓系数: %0.3f" % metrics.silhouette_score(X, labels)) #轮廓系数评价聚类的好坏for i in range(n_clusters_):print('簇 ', i, '的所有样本:')one_cluster = X[labels == i]print(one_cluster)plt.plot(one_cluster[:,0],one_cluster[:,1],'o')plt.show()

再来一个案例

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# #############################################################################
# 产生样本数据
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) # StandardScaler作用:去均值和方差归一化。且是针对每一个特征维度来做的,而不是针对样本。# #############################################################################
# 调用密度聚类  DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
# print(db.labels_)  # db.labels_为所有样本的聚类索引,没有聚类索引为-1
# print(db.core_sample_indices_) # 所有核心样本的索引
core_samples_mask = np.zeros_like(db.labels_, dtype=bool)  # 设置一个样本个数长度的全false向量
core_samples_mask[db.core_sample_indices_] = True #将核心样本部分设置为true
labels = db.labels_# 获取聚类个数。(聚类结果中-1表示没有聚类为离散点)
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)# 模型评估
print('估计的聚类个数为: %d' % n_clusters_)
print("同质性: %0.3f" % metrics.homogeneity_score(labels_true, labels))  # 每个群集只包含单个类的成员。
print("完整性: %0.3f" % metrics.completeness_score(labels_true, labels))  # 给定类的所有成员都分配给同一个群集。
print("V-measure: %0.3f" % metrics.v_measure_score(labels_true, labels))  # 同质性和完整性的调和平均
print("调整兰德指数: %0.3f" % metrics.adjusted_rand_score(labels_true, labels))
print("调整互信息: %0.3f" % metrics.adjusted_mutual_info_score(labels_true, labels))
print("轮廓系数: %0.3f" % metrics.silhouette_score(X, labels))# #############################################################################
# Plot result
import matplotlib.pyplot as plt# 使用黑色标注离散点
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:  # 聚类结果为-1的样本为离散点# 使用黑色绘制离散点col = [0, 0, 0, 1]class_member_mask = (labels == k)  # 将所有属于该聚类的样本位置置为truexy = 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机器学习库sklearn——DBSCAN密度聚类相关推荐

  1. python机器学习库sklearn——k均值聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 k均值聚类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/de ...

  2. Python机器学习库sklearn的安装

    Python机器学习库sklearn的安装 scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口 ...

  3. python机器学习库sklearn——决策树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 决策树的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/deta ...

  4. python机器学习库sklearn与graphlab与opencv的安装

    1.安装python 首先安装python3.5 Link 然后安装python2.7 Link 注意选择合适的版本(记得之后安装的GraphLab只能用64位,也只能使用python2) 2.安装使 ...

  5. python机器学习库sklearn——BIRCH聚类

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 BIRCH聚类的相关的知识内容可以参考 https://blog.csdn.net/luanpeng825485697/article ...

  6. python机器学习库sklearn——特征提取

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 注意:特征特征提取与 特征选择 有很大的不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征.后者是将这些特征应用到 ...

  7. python机器学习库sklearn——集成方法(Bagging、Boosting、随机森林RF、AdaBoost、GBDT)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  8. python机器学习库sklearn——生成样本数据

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  9. python机器学习库sklearn——模型评估

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 各类模型评估详细意思参考:https://blog.csdn.net/luanpeng825485697/article/detail ...

最新文章

  1. mysql zerofill 性能_比较详细的MySQL字段类型说明
  2. HSSFWorkbook 与 XSSFWorkbook
  3. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)
  4. 一个民工的数字化生活
  5. TImage 的一些操作
  6. php提交之前验证数据ajax提示,在通过Ajax请求提交之前使用jQuery进行表单验证
  7. tcount在哪个文件里_办公软件技巧:一键获取文件名称
  8. Ubuntu中升级Firefox及flash player
  9. SQL基本操作(三):存储过程和触发器
  10. 潘多拉系统虚拟服务器,潘多拉服务器节点配置
  11. 计算机硬件 试题,计算机硬件试题150完整版
  12. 计算机网络管理员高级操作技能考核试卷,计算机网络管理员(高级)操作技能试题样题(2)...
  13. 中文文本纠错论文解读——Adaptable Filtering using Hierarchical Embeddings for Chinese Spell Check
  14. spring和jump区别_JUMP与 SKIP 的区别
  15. 易语言 超文本浏览框
  16. 画思维导图一定要用计算机来完成吗,一起来画思维导图
  17. 垃圾分类小程序,识别和站点查询,答题,用户后台管理集一体的小程序
  18. 分词 - 准确率评测
  19. get(obj, “a.b[0].c“, 0)
  20. java.lang.IllegalStateException: Web app root system property already set to different value: 'webap

热门文章

  1. 连续数字及数字串识别技术
  2. Temporal注解笔记
  3. vue element序号翻页连续排序
  4. vue+echarts 实时跟新数据 仪表盘多个渲染
  5. vue-drag-resize + html2canvas合成图片并下载
  6. 【模拟】牛客网:区间表达
  7. 【Java笔记】四种权限修饰符总结
  8. 【计算机组成原理笔记】计算机的基本组成
  9. python perl 日本的应用_将Python,Perl,Ruby或Shell脚本转换为适用于Mac OS X的自包含应用程序 | MOS86...
  10. 轻量级锁_Java高级架构师-Java锁的升级策略 偏向锁 轻量级锁 重量级锁