机器学习小石头

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

      将密度足够大的相邻区域连接,能有效处理异常数据,主要用于对空间数据的聚类。只要靠近区域的密度超过某个阀值,就继续聚类。将密度足够大的相邻区域连接起来。在一个给定范围的区域内必须至少包含某个数目的点。该类方法将每个簇看作是数据空间中被低密度区域分割开的高密度对象区域,也就是将簇看作是密度相连的点最大集合。具有较大的优越性和灵活性,有效地克服噪声的影响,并且只需要对数据进行一次扫描。代表算法DBSCAN、DENCLUE和OPTICS等。

setp1:输入数据集合s,随机找出一个点,并找出这个点所有密度相连点

setp2:遍历所有epslon领域内的点,并寻找这些点相连的点

setp3:扫描数据集,寻找没有被聚类的核心点。返回setp2

setp4:输出划分的类,并输出异常值点(不和其他点密度相连)

优点:应用最为广泛;收敛速度快;能扩展以用于大规模的数据集,与K-means方法相比,DBSCAN不需要事先知道要形成的簇类的数量。 与K-means方法相比,DBSCAN可以发现任意形状的簇类。同时,DBSCAN能够识别出噪声点。

 缺点:倾向于识别凸形分布、大小相近、密度相近的聚类;中心选择和噪声聚类对结果影响大。 DBSCAN不能很好反映高维数据, DBSCAN不能很好反映数据集以变化的密度。

    DBSCAN(Density-Based Spatial Clustering of Application with Noise)是一个基于高密度连接区域的密度聚类方法。DBSCAN通过检查数据库中每个点的ε-邻域来寻找聚类。如果一个点p的ε-邻域包含多于MinPts个点,则创建一个以p作为核心对象的新簇。然后,DBSCAN反复地寻找从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并[9]。当没有新的点可以被添加到任何簇时,该过程结束。

python代码如下:

from sklearn.cluster import DBSCAN
from sklearn import datasets
from dask.array.learn import predict
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(y)
clf=DBSCAN()
predicted=clf.fit_predict(X)
#设置区间
print(predicted)
k2y = np.array([0,1,2])
print(k2y[predicted])
print((k2y[predicted] == y).astype(int).mean())

我们可以看出聚类精度0.687

MeanShift

from sklearn.cluster import MeanShift
from sklearn import datasets
from dask.array.learn import predict
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(y)
clf=MeanShift()
predicted=clf.fit_predict(X)
#设置区间
print(predicted)
k2y = np.array([1,0])
print(k2y[predicted])
print((k2y[predicted] == y).astype(int).mean())

聚类精度0.66

posted on 2017-08-18 16:02  机器学习小石头  阅读(3303)  评论(0编辑  收藏  举报