
中的k-means聚类模型详解聚类分析, 是一种方法, 主要用于发现数据当中相似的对象。在数据挖掘领域, 聚类分析被广泛应用。在机器学习领域, 聚类分析同样被广泛应用。k-means聚类, 是聚类方法当中较为常见的一种。它能够划分数据集中的样本, 把样本划分成k个簇。并且每个簇的内部差异是最小的。而簇与簇之间的差异是最大的。本文将会详细介绍其中的k-means聚类模型。k-means聚类的原理具有迭代特性的聚类方法之中, 存在 k-means 聚类算法, 该算法核心步骤有质心需初始化, 距离要计算, 质心得更新, 停止条件进行判定等。一开始, 要去指定聚类数k。接着随机挑k个数据样本当作初始质心, 对于剩余的每个样本, 把它分到它距离最近的质心所在的簇当中。随后算每个簇里所有数据点和该簇的质心的距离平方和, 当作这个簇的误差。然后更新每个簇的质心, 把它移到这个簇所有样本的中心处。反复进行上述步骤直到误差小于某一阈值或者达到迭代次数上限。实现k-means聚类在其中, 存在一个库, 该库提供了一个k - means聚类函数, 此函数乃是运用k - means聚类算法的最为简单的方法。紧接着, 下面以iris数据集作为示例, 来展示怎样去予以实现k - means聚类。from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris load_iris() X iris.data[:, :2] # 为了便于可视化只取前两个特征 y iris.target kmeans KMeans(n_clusters3) # 聚成3类 kmeans.fit(X) centroids kmeans.cluster_centers_ # 质心 labels kmeans.labels_ # 样本分类 # 绘制图形 import matplotlib.pyplot as plt colors [red, green, blue] for i in range(len(X)): plt.scatter(X[i][0], X[i][1], ccolors[labels[i]]) for c in centroids: plt.scatter(c[0], c[1], markerx, s300, linewidths3, colorblack) plt.show()执行以上代码即可生成类似以下图像呈现于图片里, 红色的点, 绿色的点, 还有蓝色的点各自代表着不一样的簇, 黑色的“x”符号表明的是每一个簇的质心。如何选择最优的k值以确切判定最优的k值, 这在k-means聚类算法里属于颇为棘手的问题当中的一个。接下来要讲述两种常见的办法: 手肘办法以及轮廓系数办法。首先, 把k值给予设置成较小的整数, 继而计算每个簇的误差平方和SSE, 这是手肘法的第一步 , 随着k值开始增加, 误差平方和会跟着减少 , 当k值增加到一定程度之后 , SSE就不再大幅下降 , 此时 , 把k值与SSE之间的关系绘制成曲线图 , 必定会呈现出肘部线段 , 该线段在此处的“肘”的位置 , 对应的k值就是最优的聚类数。代码示例sse [] for i in range(1, 11): kmeans KMeans(n_clustersi).fit(X) sse.append(kmeans.inertia_) # ineria_属性表示模型的误差平方和 plt.plot(range(1, 11), sse) plt.xlabel(K) plt.ylabel(SSE) plt.show()轮廓系数法, 是一种方法, 它综合考虑两个因数, 一个是簇内不相关性, 另一个是簇间相似度, 轮廓系数就是这样得来的。轮廓系数它有这样的结果, 轮廓系数值越大, 也就意味着, 代表的聚类效果越好。轮廓系数法还有这样的情况, 它的计算过程是如下这样的:3.14.3微软官方所拥有的扩展, 乃是VS Code之中安装量处于最高水平的扩展209M以上。其集成了多种功能, 涵盖了通过特定方式进行的操作、调试借助特定手段、代码检查、格式化、重构以及单元测试等方面。另外, 它还支持相关特性、虚拟环境管理以及多版本切换。下载针对每一个样本, 去计算它跟处于同一簇的全部样本的平均距离, 此平均距离称作a, 并且还要计算它跟距离最近的其他簇中的所有样本的平均距离, 这个平均距离唤作b啦。算出每一个样本所对应的轮廓系数s, 其中\[s\frac{b - a}{\max(a,b)}\]。整个的模型的轮廓系数是所有样本轮廓系数的均值。代码示例from sklearn.metrics import silhouette_score sil_scores [] for k in range(2, 11): kmeans KMeans(n_clustersk).fit(X) sil_score silhouette_score(X, kmeans.labels_) # 计算轮廓系数 sil_scores.append(sil_score) plt.plot(range(2, 11), sil_scores) plt.xlabel(K) plt.ylabel(Silhouette Coefficient) plt.show()k-means聚类注意事项k-means聚类有以下注意事项初始值对于最终结果所产生的影响较为显著, 要是一开始所设定的数值状况欠佳, 那么极有可能会得出具有一定缺陷的结果。依赖于所选择的距离度量的聚类结果, 具体像欧几里得距离、曼哈顿距离等, 是需要依据实际情形来予以选择的。数据集中异常值容易被错误的簇吸引应考虑去除异常值。样本类分布不平衡时常见问题是得到具有极度偏斜属性的簇。总结k均值聚类是一种被广泛运用的聚类算法, 在此算法里, 运用程式库所提供的函数能够实现快速达成状态, 与此同时, 还能够运用手肘方法或者轮廓系数方法去确定最为合适优化的聚类数量, 同时, 在实际应用期间需要留意k值的挑选、初始质心的数据设置等相关问题。