Open iLovEing opened 1 year ago
Clustering中的经典算法,其主要思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果
K:聚类数量
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
算法比较简单,就是界定邻居+寻找邻居的过程,有点类似于晶格生长。给张图感受一下
领域半径:Eps的选取方法(k-distance函数)
MinPts的选取方法 MinPts的取值为上述k值加1,即: $MinPts = k + 1$
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import DBSCAN
from sklearn.cluster import KMeans
from sklearn.neighbors import NearestNeighbors
X1, y1=datasets.make_circles(n_samples=5000, factor=.6,
noise=.05)
X2, y2 = datasets.make_blobs(n_samples=1000, n_features=2, centers=[[1.2,1.2]], cluster_std=[[.1]],
random_state=9)
X = np.concatenate((X1, X2))
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()
nbrs = NearestNeighbors(n_neighbors=4).fit(X)
distances, indices = nbrs.kneighbors(X)
dis = distances[:, 3]
dis = -np.sort(-dis)
fig, ax = plt.subplots()
ax.plot(np.array(range(len(dis))), dis, linewidth=2.0)
plt.show()
y_pred1 = DBSCAN(eps = 0.09, min_samples = 4).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred1)
plt.show()
np.unique(y_pred1)
层次聚类,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。层次聚类的好处是不需要指定具体类别数目的,其得到的是一颗树,聚类完成之后,可在任意层次横切一刀,得到指定数目的簇。
按照 层次分解是自下而上,还是自顶向下,层次的聚类方法可以进一步分为以下两种:
AGNES 算法步骤:
DIANA 算法步骤:
距离度量选择:
聚类算法
记录传统学习中常用聚类算法