k-means是什么算法,k-means函数

  k-means是什么算法,k-means函数

  本文主要介绍了k-means和k-means在python中的原理和实现。通过示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考价值。有需要的朋友下面跟边肖学习。

  00-1010前言k-means原理k-means原理k-means和k-means代码实现k-means实现参考文档

  

目录

 

  K-means算法是一种无监督的聚类算法,实现起来相对简单。k-means可以理解为k-means的增强版,在初始化中心点方面比k-means更友好。

  

前言

 

  k-means的实现步骤如下:

  从样本中随机选取k个点作为聚类中心。对于任意一个样本点,计算其到K个聚类中心的距离,然后将样本点分类到距离最短的聚类中心,直到所有样本点都被分类(分组为K类),计算每个聚类的平均值,然后分别将K个平均值作为新的聚类中心,重复2或3步,直到中心点的位置不变或中心点的位置变化小于阈值。优势:

  原理简单,易于实现,收敛速度更快,聚类效果更好;

  初始点的选择是随机的,这可能导致不好的初始值。

  

k-means原理

 

  k-means++是k-means的增强版,它初始选取的聚类中心点尽可能的分散开来,这样可以有效减少迭代次数,加快运算速度,的实施步骤如下:

  从样本中随机选取一个点作为聚类中心,计算每个样本点与所选聚类中心的距离,用D(X)表示:D(X)越大,选择下一个聚类中心的概率越大。用轮盘赌法选择下一个聚类中心(D(X)越大,选择聚类中心的概率越大),重复步骤2,直到选择k个聚类中心。这里必须解释使用标准k-means算法进行聚类。在一些文献中,与已选择的聚类中心最大距离的点选作下一个中心点并不准确,但它是与已选择的聚类中心最大距离的点被选作下一个中心点的概率最大,但不一定是改变点,因为取最大值并不总是好的(当遇到特殊数据时,例如一个点远离一个簇中的所有点)。

  一般部分,总要随便给点。因为数据是随机的。

  虽然计算初始点需要额外的时间,但是在迭代过程中,K-means本身可以快速收敛,所以算法实际上减少了计算时间。

  现在,关键点是使用轮盘法.选择下一个聚类中心。我们用一个例子来说明K-means如何选择初始聚类中心。

  如果数据集中有8个样本,分布和相应的序列号如下图所示:

  首先,我们使用k-means的步骤1来选择第6个点作为第一个聚类中心,然后进行步骤2来计算从每个样本点到所选聚类中心的距离D(X ),如下所示:

  D(X)是每个样本点与所选聚类中心(即第一个聚类中心)之间的距离P(x)每个样本被选为下一个聚类中心的概率和是概率P(X)的累积和,用于通过轮盘赌方法选择第二个聚类中心。然后,进行k-means的第三步:轮盘法.选择下一个聚类中心方法是随机产生出一个0~1之间的随机数,判断它属于哪个区间,那么该区间对应的序号就是被选择出来的第二个聚类中心了,

  上图中,点1的区间为[0,0.2],点2的区间为[0.2,0.525],点4的区间为[0.65,0.9]。

  从上表可以直观的看出,1号、2号、3号、4号的总概率之和为0.9,而这四个点正好是距离第一个初始聚类中心(即6号点)很远的四个点。因此,选择的第二个聚类中心有很大概率落入这四个点中的一个,2号点被选为下一个聚类中心的概率最高。

  大。

  

 

  

k-means及k-means++代码实现

 

  这里选择的中心点是样本的特征(不是索引),这样做是为了方便计算,选择的聚类点(中心点周围的点)是样本的索引。

  

 

  

k-means实现

 

  

# 定义欧式距离

 

  

import random

 

  

# 判断一个样本点离哪个中心点近, 返回的是该中心点的索引

 

  

# 定义构建聚类的过程

 

  

# 根据上一步聚类结果计算新的中心点

 

  

# 获取每个样本所属的聚类类别

 

  

# 根据上述各流程定义kmeans算法流程

 

  

# 测试执行

 

  

# 使用sklearn验证

 

  

 

  

k-means++实现

 

  

## 得到kmean++中心点

 

  

X = np.array([[0,2],[0,0],[1,0],[5,0],[5,2]])

 

  

# 使用sklearn验证

 

  

 

  

参考文档

 

  K-means与K-means++
K-means原理、优化及应用

  到此这篇关于python中k-means和k-means++原理及实现的文章就介绍到这了,更多相关python k-means和k-means++ 内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: