2026/4/18 12:03:31
网站建设
项目流程
网站建设带支付源码,企业开发网站用什么技术,上海公共招聘平台,深圳有做网站的吗文章目录K-means聚类和分类的区别K-means基本概念#xff1a;常见的距离图解过程初始状态#xff08;图a#xff09;初始化质心#xff08;图b#xff09;分配数据点到最近的质心#xff08;图c#xff09;重新计算质心并迭代聚类效果的评价方式【参数#xff1a;】【属…文章目录K-means聚类和分类的区别K-means基本概念常见的距离图解过程初始状态图a初始化质心图b分配数据点到最近的质心图c重新计算质心并迭代聚类效果的评价方式【参数】【属性】python实现K-meansK-means 是一种“无监督聚类”算法运行前必须人为指定要把数据分成多少个簇这个数量用 K 表示。K 值直接影响聚类结果。K 太小会把不同类的数据强行合并K 太大会把同类数据拆得过细。聚类和分类的区别分类是“有标签的监督学习”聚类是“无标签的无监督学习”——前者已知“答案”类别标签去学规律后者不知道“答案”只能靠数据本身的相似性分组。K-means基本概念1.聚成多少个簇需要指定K的值K-means里的K是“要分的簇的数量”必须人为提前定好。比如想把用户分成3类K就设为3想分5类K就设为5。2.距离的度量一般采用欧式距离算法要判断“数据点离哪个质心近”就得算距离。最常用的距离是欧式距离3.质心各向量的均值质心是每个簇的“中心点”计算方式是簇内所有数据点的“向量均值”。这是K-means的核心目标最小化**“所有簇内数据点到质心的平方距离之和”**。常见的距离图解过程初始状态图a图中有一些绿色的点代表待聚类的数据集此时还未确定质心。初始化质心图b图中出现了两个“×”这两个“×”就是随机初始化的两个质心用于开始聚类过程。分配数据点到最近的质心图c图中的绿色点被分配到了距离各自最近的质心所在的类别形成了红色的两个簇。同时根据注释“新的质心为所有类中的数据x值平均”接下来会重新计算每个簇的质心。重新计算质心并迭代重新计算质心后算法会再次将数据点分配到距离新的质心最近的类别然后又重新计算质心如此迭代直到质心不再发生明显变化或者达到预设的迭代次数等停止条件为止。聚类效果的评价方式【参数】n_clusters:类中心的个数,就是要聚成几类。【默认是8个】init参初始化的方法默认为’k-means’(1)‘k-means’:用一种特殊的方法选定初始质心从而能加速迭代过程的收敛.(2) ‘random’:随机从训练数据中选取初始质心。**(3) 如果传递的是一个ndarray**则应该形如 (n_clusters, n_features) 并给出初始质心。n_init:整形缺省值10用不同的质心初始化值运行算法的次数最终解是在inertia意义下选出的最优结果。max_iter :执行一次k-means算法所进行的最大迭代数。Tol: 与inertia结合来确定收敛条件。precompute_distances三个可选值‘auto’True 或者 False。预计算距离计算速度更快但占用更多内存。**(1)‘auto’**如果 样本数乘以聚类数大于 12million 的话则不预计算距离。**(2)True**总是预先计算距离。**(3)False**永远不预先计算距离。**verbose**整形默认值0**random_state *随机状态**copy_x**布尔型默认值True当我们precomputing distances时将数据中心化会得到更准确的结果。如果把此参数值设为True则原始数据不会被改变。如果是False则会直接在原始数据 上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算所以数据返回后原始数据和计算前可能会有细小差别。algorithm:‘auto’,‘full’ or ‘elkan’.默认为’auto’full:采用经典的EM算法elkan:通过使用三角不等式从而更有效但不支持稀疏数据auto:数据稀疏选择full模式数据稠密选择elkan模式【属性】cluster_centers_:一个n-clusters*n_features的矩阵表示聚类中心的坐标Labels_:每个点的分类标签。**inertia_**float形每个点到其簇的质心的距离之和。n_iter_ :int迭代次数。python实现importpandasaspdfromsklearn.clusterimportKMeansfromsklearnimportmetrics 可视化网站 https://www.naftaliharris.com/blog/visualizing-k-means-clustering/ #读取文件beerpd.read_table(data.txt,sep ,encodingutf8,enginepython)#传入变量列名Xbeer[[calories,sodium,alcohol,cost]] 根据分成不同的簇自动计算轮廓系数得分 scores[]forkinrange(2,10):#寻找合适的K值labelsKMeans(n_clustersk).fit(X).labels_#从左到右依次进行计算scoremetrics.silhouette_score(X,labels)#轮廓系数scores.append(score)print(scores)#绘制得分结果importmatplotlib.pyplotasplt plt.plot(list(range(2,10)),scores)plt.xlabel(Number of Clusters Initialized)plt.ylabel(Sihouette Score)plt.show()#聚类kmKMeans(n_clusters2).fit(X)#K值为2【分为2类】beer[cluster]km.labels_#对聚类结果进行评分 采用轮廓系数评分 X:数据集 scaled_cluster聚类结果 score非标准化聚类结果的轮廓系数 scoremetrics.silhouette_score(X,beer.cluster)print(score)**寻找最佳簇数 K**用循环测试 K2到9分别训练 K-means 模型。 对每个 K 计算轮廓系数衡量簇内紧凑度与簇间分离度。 记录所有 K 的轮廓系数并绘图直观看出哪个 K 效果最好。**执行最终聚类** 根据图形或业务需求选定一个 K此代码选 K2。 用该 K 训练 K-means得到每个样本的簇标签并保存到原数据表中。**评估聚类效果**用轮廓系数对最终聚类结果打分判断聚类质量。