import numpy as np from sklearn.cluster import MiniBatchKMeans from sklearn.datasets import load_iris from sklearn import preprocessing import matplotlib.pyplot as plt from pylab import mpl from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score from scipy.spatial.distance import cdist # 设置显示中文字体 mpl.rcParams["font.sans-serif"] = ["SimHei"] # 设置正常显示符号 mpl.rcParams["axes.unicode_minus"] = False np.random.seed(5) iris = load_iris() X = iris.data y = iris.target min_max_scaler = preprocessing.MinMaxScaler() X_minmax = min_max_scaler.fit_transform(X) batch_size = 15 num_cluster = 3 clf = MiniBatchKMeans(n_clusters=num_cluster, batch_size=batch_size, init='random') clf.fit(X_minmax) centers = clf.cluster_centers_ pre_clu = clf.labels_ vmarker = {0: '^', 1: 's', 2: 'D', } mValue = [vmarker[i] for i in pre_clu] for _marker, _x, _y in zip(mValue, X_minmax[:, 1], X_minmax[:, 2]): plt.scatter(_x, _y, marker=_marker,c='grey') plt.scatter(centers[:, 1], centers[:, 2], marker='*',s=200,c='black') plt.show() #手肘法则最佳k值 def sse_k(): K = range(1, 10) sse_result = [] for k in K: kmeans = KMeans(n_clusters=k) kmeans.fit(iris.data) sse_result.append(sum(np.min(cdist(iris.data, kmeans.cluster_centers_, 'euclidean'), axis=1)) / iris.data.shape[0]) plt.plot(K, sse_result, 'gx-') plt.xlabel('k') plt.ylabel(u'平均畸变程度') plt.title(u'肘部法则确定最佳的K值') plt.show() # 轮廓系统法最佳k值 def sc_k(): K = range(2, 10) score = [] for k in K: kmeans = KMeans(n_clusters=k) kmeans.fit(iris.data) score.append(silhouette_score(iris.data, kmeans.labels_, metric='euclidean')) plt.plot(K, score, 'r*-') plt.xlabel('k') plt.ylabel(u'轮廓系数') plt.title(u'轮廓系数确定最佳的K值') plt.show() sse_k() sc_k()
时间: 2024-04-01 10:31:01 浏览: 36
这段代码实现了对 iris 数据集进行聚类分析的功能。具体来说,它使用了 MiniBatchKMeans 算法对 iris 数据进行聚类,并使用了肘部法则和轮廓系数法来确定最佳的聚类数量 k。
首先,代码将 iris 数据集导入,然后进行了归一化处理。接着,使用 MiniBatchKMeans 算法对归一化后的数据进行聚类,得到聚类中心和每个数据点所属的聚类类别。最后,使用 matplotlib 绘制聚类散点图,其中每个数据点的颜色、形状表示它所属的聚类类别,聚类中心用星号标出。
在绘制完聚类散点图之后,代码使用肘部法则和轮廓系数法来确定最佳的聚类数量 k。具体来说,肘部法则使用 SSE(Sum of Squared Error)来度量聚类的有效性,它的基本思想是随着聚类数量 k 的增加,SSE 会逐渐减小,但当 k 增加到一定程度时,SSE 的下降速度会明显放缓,这个拐点就是肘部,对应的 k 值就是最佳的聚类数量。轮廓系数法则使用轮廓系数来度量聚类的有效性,它的基本思想是聚类效果越好,同一聚类类别内部的数据点越紧密,不同聚类类别之间的数据点越分散,因此轮廓系数的取值范围在 [-1, 1] 之间,越接近 1 表示聚类效果越好,对应的 k 值就是最佳的聚类数量。肘部法则和轮廓系数法都是常用的聚类分析方法。
总之,这段代码实现了对 iris 数据集进行聚类分析的功能,并使用了肘部法则和轮廓系数法来确定最佳的聚类数量 k。
相关问题
import pandas as pd import numpy as np from sklearn.cluster import DBSCAN import matplotlib.pyplot as plt from sklearn.cluster import KMeans
这段代码导入了pandas、numpy、matplotlib.pyplot和sklearn.cluster库,其中sklearn.cluster库中包括了DBSCAN和KMeans聚类算法。pandas和numpy库常用于数据处理和科学计算,matplotlib.pyplot库常用于数据可视化。你可以通过这些库来进行数据分析和聚类操作。
解释这段代码:import cv2 from pylab import * import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt
这段代码是导入了一些Python库和模块,具体解释如下:
- `import cv2`: 导入了OpenCV库,用于图像处理和计算机视觉任务。
- `from pylab import *`: 从pylab模块中导入所有的函数和变量,pylab是一个Python科学计算的库,它集成了matplotlib、numpy等模块。
- `import numpy as np`: 导入了NumPy库,用于科学计算和数据处理。
- `from sklearn.cluster import KMeans`: 从sklearn库中导入了KMeans聚类算法,用于对数据进行聚类分析。
- `import matplotlib.pyplot as plt`: 导入了Matplotlib库中的pyplot模块,用于绘制数据图表。其中plt是pyplot模块的别名,方便使用。