SSE=sum_ {i=1}^ {K}sum_ {cin C_i}|p-m_i|^2 写成Word形式
时间: 2024-03-30 12:37:32 浏览: 159
SSE可以写成以下Word形式的公式:
![SSE=sum_{i=1}^{K} sum_{c\in C_i} \left\vert p - m_i \right\vert^2](https://www.zhihu.com/equation?tex=SSE%3D%5Csum_%7Bi%3D1%7D%5E%7BK%7D+%5Csum_%7Bc+%5Cin+C_i%7D+%5Cleft%5Cvert+p+-+m_i+%5Cright%5Cvert%5E2)
其中,K表示聚类数目,C_i表示第i个簇,m_i表示第i个簇的中心点,p表示数据点,|p-m_i|^2表示数据点p和簇中心点m_i之间的欧几里得距离的平方,sum_{c\in C_i}表示对于第i个簇中的所有数据点p,计算它们到该簇中心点的距离平方和。最终,SSE表示所有簇中所有数据点到其所属簇的中心点的距离平方和。
相关问题
给我详细解释下面这些代码 k_values = [2,3,4,5,6,7,8,9,10] sse_values = [297451453654,287451453654,97451453654,47451453654,40451453654,40251453654,40051453654,37451453654,30451453654] del sse_values[0] # 删除第一个元素 sse_data = {"k": k_values, "sse": sse_values} min_length = min(len(k_values), len(sse_values)) sse_data = {"k": k_values[:min_length], "sse": sse_values[:min_length]} sse_df = pd.DataFrame(sse_data) for k in k_values: clf = KMeansClassifier(k) clf.fit(data_X) cents = clf._centroids labels = clf._labels sse = clf._sse sse_values.append(sse)
这段代码主要是进行了聚类分析,并且记录了每个聚类数量下的SSE(误差平方和)值,最终将结果保存在一个DataFrame中。
首先,代码定义了k_values和sse_values两个数组,分别存储了聚类数量和对应的SSE值。
然后,代码删除了sse_values的第一个元素,因为该值通常是由单个数据点构成的聚类产生的,不太具有代表性。
接下来,代码使用字典构建了一个名为sse_data的数据结构,其中包含了k和对应的SSE值。
然后,代码计算了k_values和sse_values的长度的最小值,以确保两个数组具有相同的长度,避免在创建DataFrame时出现错误。
接着,代码使用k_values中的每个值循环迭代,每次迭代都创建一个KMeansClassifier对象进行聚类分析,然后记录该聚类数量下的SSE值,并将其追加到sse_values列表中。
最后,代码使用sse_data创建了一个名为sse_df的DataFrame,其中包含了k和对应的SSE值,以便进一步分析和可视化。
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()
这段代码实现了对 iris 数据集进行聚类分析的功能。具体来说,它使用了 MiniBatchKMeans 算法对 iris 数据进行聚类,并使用了肘部法则和轮廓系数法来确定最佳的聚类数量 k。
首先,代码将 iris 数据集导入,然后进行了归一化处理。接着,使用 MiniBatchKMeans 算法对归一化后的数据进行聚类,得到聚类中心和每个数据点所属的聚类类别。最后,使用 matplotlib 绘制聚类散点图,其中每个数据点的颜色、形状表示它所属的聚类类别,聚类中心用星号标出。
在绘制完聚类散点图之后,代码使用肘部法则和轮廓系数法来确定最佳的聚类数量 k。具体来说,肘部法则使用 SSE(Sum of Squared Error)来度量聚类的有效性,它的基本思想是随着聚类数量 k 的增加,SSE 会逐渐减小,但当 k 增加到一定程度时,SSE 的下降速度会明显放缓,这个拐点就是肘部,对应的 k 值就是最佳的聚类数量。轮廓系数法则使用轮廓系数来度量聚类的有效性,它的基本思想是聚类效果越好,同一聚类类别内部的数据点越紧密,不同聚类类别之间的数据点越分散,因此轮廓系数的取值范围在 [-1, 1] 之间,越接近 1 表示聚类效果越好,对应的 k 值就是最佳的聚类数量。肘部法则和轮廓系数法都是常用的聚类分析方法。
总之,这段代码实现了对 iris 数据集进行聚类分析的功能,并使用了肘部法则和轮廓系数法来确定最佳的聚类数量 k。
阅读全文