import pandas as pd from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np from sklearn.preprocessing import StandardScaler from sklearn import metrics beer=pd.read_csv('data.txt',encoding='gbk',sep='') X=beer[["calories","sodium","alcohol","cost"]] km=KMeans(n_clusters=3).fit(X) beer['cluster']=km.labels_ centers=km.cluster_centers_ plt.rcParams['font.size']=14 colors=np.array(['red','green','blue','yellow']) plt.scatter(beer["calories"], beer["alcohol"], c=colors[beer["cluster"]]) plt.scatter(centers[:,0], centers[:,2], linewidths=3,marker='+',s=300,c='black') plt.xlabel("Calories") plt.ylable("Alcohol") plt.suptitle("Calories and Alcohol") pd.plotting.scatter_matrix(beer[["calories", "sodium","alcohol","cost"]],s=100,alpha=1,c=colors[beer["cluster"]],figsize=(10,10)) plt.suptitle("original data") scaler=StandardScaler() X_scaled=scaler.fit_transform(X) km=KMeans(n_clusters=3).fit(X_scaled) beer["scaled_cluster"]=km.labels_ centers=km.cluster_centers_ pd.plotting.scatter_matrix(X, c=colors[beer.scaled_cluster],alpha=1,figsize=(10,10),s=100) plt.suptitle("standard data") 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) for i in range(len(scores)): print((i+2,scores[i])) print(max(scores[i])) plt.figure() plt.plot(list(range(2,20)), scores,"ro") plt.xlabel("Number of Clusters Initialized") plt.ylabel("Sihouette Score") plt.suptitle("K parameter optimize") plt.show() scores=[] for k in range(2,20): labels=KMeans(n_clusters=k).fit(X_scaled).labels_ score=metrics.silhouette_score(X_scaled, labels) scores.append(score) for i in range(len(scores)): print((i+2,scores[i]))
时间: 2024-04-20 09:23:49 浏览: 18
这段代码是用于进行聚类分析和评估聚类结果的。首先,它导入了一些必要的库,包括`pandas`用于数据处理,`sklearn.cluster.KMeans`用于聚类分析,`matplotlib.pyplot`用于数据可视化,`numpy`用于数值计算,以及`sklearn.preprocessing.StandardScaler`和`sklearn.metrics`用于数据标准化和聚类评估。
接下来,它使用`pd.read_csv()`函数读取名为`data.txt`的数据文件,并选择了其中的一些特征作为聚类分析的输入。然后,使用`KMeans`算法对数据进行聚类,并将聚类结果存储在`beer` DataFrame中的`cluster`列中,聚类中心存储在`centers`变量中。
然后,它使用`matplotlib.pyplot.scatter()`函数绘制了原始数据中的两个特征(卡路里和酒精含量)的散点图,并根据聚类结果对数据点进行了着色。使用`plt.scatter()`函数绘制了聚类中心点,并使用`plt.xlabel()`,`plt.ylabel()`,`plt.suptitle()`函数设置了坐标轴标签和图表标题。
接下来,使用`pd.plotting.scatter_matrix()`函数绘制了原始数据中四个特征(卡路里,钠,酒精含量和成本)两两之间的散点图,并根据聚类结果对数据点进行了着色。
然后,使用`StandardScaler`对数据进行标准化处理,并使用标准化后的数据进行聚类分析。将聚类结果存储在`beer` DataFrame中的`scaled_cluster`列中,聚类中心存储在`centers`变量中。然后,使用`pd.plotting.scatter_matrix()`函数绘制了标准化后的数据中四个特征之间的散点图,并根据聚类结果对数据点进行了着色。
接下来,使用`metrics.silhouette_score()`函数计算了原始数据和标准化数据的轮廓系数,并输出了计算结果。
然后,对聚类数量进行了优化,从2到19尝试不同的聚类数量,并计算每个聚类数量对应的轮廓系数。最后,使用`plt.plot()`函数绘制了聚类数量与轮廓系数的折线图。
如果你有任何关于这段代码的具体问题,或者需要进一步解释,请随时提问。