首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习-无监督-聚类2

今天我们来看看聚类的另一个算法,DBSCAN,

回顾一下,聚类是什么,有点什么用呢?

在样本中寻找自然集群,事先是不知道存在哪些集群的,探索数据的结构关系,常用于对客户细分,对文章聚类等。

我们就简单了解一下就行了,以后有机会再细细探究。

DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。

它的使用有什么特点呢?

1、聚类的时候不需要预先指定簇的个数。

2、聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类。

3、聚类簇的形状没有偏倚。

有所长就必有所短,它也是存在一定的短板的。

1、它最终获得的簇的个数也是不能确定的。

2、当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差。

3、算法聚类效果依赖与距离公式选取。

DBSCAN算法将会存在3种基本类型数据点:

——核心点:

在半径eps内含有超过Minpts数目的点

——边界点

在半径eps内点的数量小于Minpts,但是落点在核心领域内。

——噪音点:

不是上述的两种类型的点。

DBSCAN的3个基础概念:

1)密度直达:

给定一个对象集合D,如果p在q的Eps邻域内,而q是一个核心对象,则称对象p从对象q出发时是直接密度可达的;

2)密度可达:

如果存在一个对象链p1,p2,p3..pi…,pn,满足p1 = p和pn = q,pi是从pi+1关于Eps和MinPts直接密度可达的,则对象p是从对象q关于Eps和MinPts密度可达的;

3)密度相连:

如果存在对象O∈D,使对象p和q都是从O关于Eps和MinPts密度可达的,那么对象p到q是关于Eps和MinPts密度相连的

DBSCAN的算法原理:

1)将所有未处理的点进行基础分类,分为上述的三个类型。

2)把处理后的噪音点删除。

3)为距离在eps之内的所有核心点之间赋予一条边。

4)每组连通的核心点形成一个簇

5)将每个边界点指派到一个与之关联的核心点的簇中

在下面的图片中,核心点之间的领域距离小于eps,则存在密度相连,这种密度相连是存在密度的对称性的关系。

实现使用DBSCAN的算法运用,我们用python包引入就行。

首先,我们要建立好项目,并且导入我们所需要的模块。

Import numpy as np

From sklearn.cluster import DBSCAN

DBSCAN的主要参数:

Eps:两个样本被看作邻居节点的最大距离

Min_samples:簇的样本数

Metric:距离计算方法

举个例子:sklearn.cluster.DBSCAN(eps=1.0, min_sample=3, metric=’euclidean’)

DBSCAN的属性:

core_sample_indices_core_sample_indices_:核心样本在原始训练集中的位置。components_components_:核心样本的一份副本。

labels_labels_:每个样本所属的簇标记。对于噪声样本,其簇标记为-1副本。

DBSCAN方法:

fit(X[,y,sample_weight])fit(X[,y,sample_weight]):训练模型。

fit_predict(X[,y,sample_weight])fit_predict(X[,y,sample_weight]):训练模型并预测每个样本所属的簇标记。

用DBSCAN算法进行数据训练,并且用labels添加簇标签

db=sklearn.cluster.DBSCAN(eps=1.0,min_sample=3).fit(X) ### X为数据集

labels= db.labels_

计算标签为-1,也就是噪声数据的比例。

raito=len(labels[labels[:] == -1]) / len(labels)

print('Noise raito:',format(raito, '.2%'))

打印簇的标号和数据

n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)

for i in range(n_clusters_): print('Cluster ',i,':') print(list(X[labels == i].flatten()))

我们下次再见。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190203G0CPYL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券