clustering 是将数据集划分成组的任务,这些组叫做簇,其目标是划分数据,使得一个簇内的数据点非常相似,不通簇内的数据点又非常不同。
K均值算法试图找到代表数据特定区域的簇中心,交替执行以下两个步骤:
1.将每个数据点分配给最近的簇中心,
2.每个簇中心设置为所分配的所有数据点的平均值,如果簇的分配不再发生变化,算法结束
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
# 加载数据
X,y = make_blobs(random_state=1)
plt.scatter(X[:,0],X[:,1])
# 开始训练
Kmeans = KMeans(n_clusters=3)
Kmeans.fit(X)
# print(Kmeans.labels_)
# 开始预测
y_pred = Kmeans.predict(X)
plt.scatter(X[:,0],X[:,1],c=y_pred) # c=y_pred 表示颜色序列
plt.scatter(Kmeans.cluster_centers_[:,0],Kmeans.cluster_centers_[:,1],marker='^',linewidths=6,cmap=plt.cm.get_cmap('RdYlBu')) # 绘制中心点
plt.show()
凝聚聚类:许多基于相同原则构建的聚类算法︰
1.首先每个点都是自己的簇,然后合并两个最相似的簇,直到满足某种停止准则为止,比如停止准则是簇的个数,因此相似的簇被合并,直到剩下指定个数的簇2.用迭代的方式合并两个最近的簇,“最佳”的意思是簇的方差之和最小
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from sklearn.datasets import make_blobs
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans
# 凝聚聚类
from sklearn.cluster import AgglomerativeClustering
X,y = make_blobs(random_state=1)
X_m,y_m = make_moons(n_samples=200,noise=0.05,random_state=1)
agg = AgglomerativeClustering(n_clusters=2)
ass = agg.fit_predict(X)
ass_m = agg.fit_predict(X_m) # 月亮形状数据
# plt.scatter(X[:,0],X[:,1],c = ass)
plt.scatter(X_m[:,0],X_m[:,1],c = ass_m)
DBSCAN原理:识别特征空间的“拥挤”区域的点
1.增大eps从左到右,更多的点会被包含在一个簇中,
2.增大min_samples,核心点会变得更少,更多的点被标记为噪声
2.用迭代的方式合并两个最近的簇,“最佳”的意思是簇的方差之和最小
from sklearn.cluster import DBSCAN
from sklearn.cluster import AgglomerativeClustering
# 加载数据
X,y = make_blobs(random_state=1)
X_m,y_m = make_moons(n_samples=200,noise=0.05,random_state=1)
# 训练并预测 DBSCAN 模型
dbscan = DBSCAN(eps=0.2) # 不同数据需要使用不同 eps,eps的调整极为重要
clusters_m = dbscan.fit_predict(X_m)
plt.scatter(X_m[:,0],X_m[:,1],c = clusters_m)