欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

聚类案例

程序员文章站 2022-03-03 14:06:30
...
import pandas as pd
beer=pd.read_csv('data.txt',sep=' ')
# print(bear)
#取出四列数据
X=beer[['calories','sodium','alcohol','cost']]

#导入kmeans
from sklearn.cluster import KMeans

km=KMeans(n_clusters=3).fit(X)
km2=KMeans(n_clusters=2).fit(X)
#查看km聚类完每个数据属于那个类别
print(km.labels_)

beer['cluster']=km.labels_
beer['cluster2']=km2.labels_
beer=beer.sort_values('cluster')
# print(beer)

from pandas.plotting import scatter_matrix
cluster_centers=km.cluster_centers_
cluster_centers_2=km2.cluster_centers_

beer_mean=beer.groupby('cluster').mean()
print(beer_mean)

#找出中心点
centers=beer.groupby('cluster').mean().reset_index()
import matplotlib.pyplot as plt
plt.rcParams['font.size']=14

import numpy as np

colors=np.array(['red','green','blue','yellow'])

plt.scatter(beer["calories"], beer["alcohol"],c=colors[beer["cluster"]])

plt.scatter(centers.calories, centers.alcohol, linewidths=3, marker='+', s=300, c='black')

plt.xlabel("Calories")
plt.ylabel("Alcohol")
plt.show()
#3个簇的结果
scatter_matrix(beer[["calories","sodium","alcohol","cost"]],s=100, alpha=1, c=colors[beer["cluster"]], figsize=(10,10))
plt.suptitle("With 3 centroids initialized")
plt.show()

#前面没有对数据做标准化的处理
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
X_scaled=scaler.fit_transform(X)
# print(X_scaled)
km1=KMeans(n_clusters=3).fit(X_scaled)
beer['scaled_cluster']=km1.labels_
beer=beer.sort_values('scaled_cluster')
print(beer)


#聚类评估轮廓系数
from sklearn import metrics
score_scaled = metrics.silhouette_score(X,beer.scaled_cluster)
score = metrics.silhouette_score(X,beer.cluster)
print(score_scaled, score)

#簇系数
scores = []
for k in range(2,20):
    labels = KMeans(n_clusters=k).fit(X).labels_
    score = metrics.silhouette_score(X, labels)
    scores.append(score)

print(scores)

plt.plot(list(range(2,20)), scores)
plt.xlabel("Number of Clusters Initialized")
plt.ylabel("Sihouette Score")
plt.show()


#DBSCAN  算法
from sklearn.cluster import DBSCAN
db=DBSCAN(eps=10,min_samples=2).fit(X)
labels = db.labels_
beer['cluster_db'] = labels
beer=beer.sort_values('cluster_db')
print(beer)
#重复上面步骤可以看到标准化过后的数据情况


聚类评估:轮廓系数(Silhouette Coefficient )

聚类案例

计算样本i到同簇其他样本的平均距离ai。ai 越小,说明样本i越应该被聚类到该簇。将ai 称为样本i的簇内不相似度。
计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik}
si接近1,则说明样本i聚类合理
si接近-1,则说明样本i更应该分类到另外的簇
若si 近似为0,则说明样本i在两个簇的边界上。