分类
K-means均值聚类
层次聚类
谱聚类
层次聚类
凝聚:AGNES
分裂:DIANA
DBSCAN
DBSCAN以一个从未访问过的任意起始数据点开始。这个点的邻域是用距离ε(所有在ε距离的点都是邻点)来提取的。如果在这个邻域中有足够数量的点(根据 minPoints),那么聚类过程就开始了,并且当前的数据点成为新聚类中的第一个点。否则,该点将被标记为噪声(稍后这个噪声点可能会成为聚类的一部分)在这两种情况下,这一点都被标记为访问,允许存在噪声
DBSCAN比其他聚类算法有一些优势。首先,它不需要一个预设定的聚类数量。它还将异常值识别为噪声,而不像均值偏移聚类算法,即使数据点非常不同,它也会将它们放入一个聚类中。此外,它还能很好地找到任意大小和任意形状的聚类。
DBSCAN的主要缺点是,当聚类具有不同的密度时,它的性能不像其他聚类算法那样好。这是因为当密度变化时,距离阈值ε和识别邻近点的minPoints的设置会随着聚类的不同而变化。这种缺点也会出现在非常高维的数据中,因为距离阈值ε变得难以估计。
簇中心的识别
比较大的局部密度和很大的高密距离
如果局部密度小,则为异常点
谱和谱聚类
谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远,以达到常见的聚类的目的。
在聚类算法中可以表示为距离近的点它们之间的相似度比较高,而距离较远的点它们的相似度比较低,甚至可以忽略。这里用三种方式表示相似度矩阵:一是ϵ-近邻法(ϵ-neighborhood graph),二是k近邻法(k-nearest nerghbor graph),三是全连接法(fully connected graph)
无向图 G(V,E)
邻接矩阵(wij)
顶点的度di:权值之和
输入:样本集D=(x1,x2,…,xn),相似矩阵的生成方式, 降维后的维度k1, 聚类方法,聚类后的维度k2
输出: 簇划分C(c1,c2,…c k)
1)根据输入的相似矩阵的生成方式构建样本的相似矩阵S
2)根据相似矩阵S构建邻接矩阵W,构建度矩阵D
3)计算出拉普拉斯矩阵L
4)构建标准化后的拉普拉斯矩阵D−1/2LD−1/2
5)计算D−1/2LD−1/2最小的k1个特征值所各自对应的特征向量f
6)将各自对应的特征向量f组成的矩阵按行标准化,最终组成n×k1维的特征矩阵F
7)对F中的每一行作为一个k1维的样本,共n个样本,用输入的聚类方法进行聚类,聚类维数为k2。
8)得到簇划分C(c1,c2,…ck)
相似度图
拉普拉斯矩阵: L=D-W
随机游走:随机游走是现实生活中常见的一种模型:气体分子的运动、滴入水中的墨水 、气味的扩散、醉汉行走轨迹、花粉的布朗运动、证券的涨跌、抛硬币…
物理学、化学:是扩散过程基础模型。 金融证券涨跌
统计领域:马尔可夫链蒙特卡罗解决近似问题。
信息检索
python实现
import numpy
import scipy
from sklearn.cluster import KMeans
def laplacian(A):
"""Computes the symetric normalized laplacian.
L = D^{-1/2} A D{-1/2}
"""
D = numpy.zeros(A.shape)
w = numpy.sum(A, axis=0)
D.flat[::len(w) + 1] = w ** (-0.5) # set the diag of D to w
return D.dot(A).dot(D)
def k_means(X, n_clusters):
kmeans = KMeans(n_clusters=n_clusters, random_state=1231)
return kmeans.fit(X).labels_
def spectral_clustering(affinity, n_clusters, cluster_method=k_means):
L = laplacian(affinity)
eig_val, eig_vect = scipy.sparse.linalg.eigs(L, n_clusters)
X = eig_vect.real
rows_norm = numpy.linalg.norm(X, axis=1, ord=2)
Y = (X.T / rows_norm).T
labels = cluster_method(Y, n_clusters)
return labels
```