[机器学习]聚类算法
1 聚类算法简介
# 导包
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score
# 构建数据
x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.2,0.3],random_state=22)plt.scatter(x[:,0],x[:,1])
plt.show()
# 聚类
model=KMeans(n_clusters=3,random_state=22)
model.fit(x)
y_pred=model.predict(x)
# 可视化
plt.scatter(x[:,0],x[:,1],c=y_pred)
plt.show()
# 评估
print(calinski_harabasz_score(x,y_pred))
2 KMeans实现流程
3 模型评估方法
3.1 SSE聚类评估指标
import os
os.environ['OMP_NUM_THREADS'] = '1'
# 导包
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score
# 构建数据
x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.2,0.3],random_state=22)sse=[]
# 计算不同K值下的SSE,来获取K值
for k in range(1,51):km=KMeans(n_clusters=k,max_iter=100,random_state=22)km.fit(x)sse.append(km.inertia_)plt.plot(range(1,51),sse)
plt.grid()
plt.show()
3.2 SC聚类评估指标
# 计算SC系数
import os
os.environ['OMP_NUM_THREADS'] = '1'
# 导包
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score,silhouette_score
# 构建数据
x,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.2,0.3],random_state=22)sc=[]
# 计算不同K值下的SSE,来获取K值
for k in range(2,51):km=KMeans(n_clusters=k,max_iter=100,random_state=22)y_pred=km.fit_predict(x)sc_=silhouette_score(x,y_pred)sc.append(sc_)plt.plot(range(2,51),sc)
plt.grid()
plt.show()