kmeans算法,python ks值计算

  kmeans算法,python ks值计算

  步骤说明

  1.确定k值。

  决定了将数据分成几类,K的值是K-Means算法中唯一的参数。

  2.从原始数据集中随机选取K个点作为初始均值点。

  3.依次从原始数据集中取出数据。

  取出每一个数据,用K个均值点计算距离(默认计算点之间的欧几里德距离),谁更近就归入均值点所在的簇;

  4.分别计算每个聚类的当前平均点。

  也就是说,平均聚类中的所有点。

  5.比较当前的平均点是否与上一步获得的相同。

  如果相同,则K-Means算法完成;否则,当前的平均点被先前的平均点代替,然后族被重新划分,并且重复步骤3。

  实例

  importnumpyasnp

  importmatplotlib.pyplotasplt

  标志位计算递归运行的次数

  标志=0

  欧洲距离

  defecludDist(x,y):

  returnnp . sqrt(sum(NP . square(NP . array(x)-NP . array(y)))

  曼哈顿距离

  defmanhatdandist(x,y):

  returnnp.sum(np.abs(x-y))

  夹角余弦

  defcos(x,y):

  returnnp.dot(x,y)/(NP . linalg . norm(x)* NP . linalg . norm(y))

  计算聚类的平均点

  defclusterMean(数据集):

  returnsum(NP . array(dataset))/len(dataset)

  生成随机平均点

  defrandCenter(数据集,k):

  temp=[]

  白色(临时)k:

  index=np.random.randint(0,len(dataset)-1)

  ifindexnotintemp:

  临时追加(索引)

  returnnp . array([dataset[I]for iin temp])

  取数据集的前k个点作为平均点

  deforderCenter(数据集,k):

  returnnp . array([数据集[i]foriinrange(k)])

  群集

  defkMeans(数据集,距离,中心,k):

  全球标志

  #all_kinds用于存储中间计算结果。

  所有_k

  inds=[]

  for_inrange(k):

  temp=[]

  all_kinds.append(temp)

  #计算每个点到各均值点的距离

  foriindataset:

  temp=[]

  forjincenter:

  temp.append(dist(i,j))

  all_kinds[temp.index(min(temp))].append(i)

  #打印中间结果

  foriinrange(k):

  print('第'+str(i)+'组:',all_kinds[i],end='n')

  flag+=1

  print('************************迭代'+str(flag)+'次***************************')

  #更新均值点

  center_=np.array([clusterMean(i)foriinall_kinds])

  if(center_==center).all():

  print('结束')

  foriinrange(k):

  print('第'+str(i)+'组均值点:',center_[i],end='n')

  plt.scatter([j[0]forjinall_kinds[i]],[j[1]forjinall_kinds[i]],marker='*')

  plt.grid()

  plt.show()

  else:

  #递归调用kMeans函数

  center=center_

  kMeans(dataset,dist,center,k)

  

  defmain(k):

  '''生成随机点'''

  x=[np.random.randint(0,50)for_inrange(50)]

  y=[np.random.randint(0,50)for_inrange(50)]

  points=[[i,j]fori,jinzip(x,y)]

  plt.plot(x,y,'b.')

  plt.show()

  initial_center=randCenter(dataset=points,k=k)

  kMeans(dataset=points,dist=ecludDist,center=initial_center,k=k)

  

  if__name__=='__main__':

  main(3)以上就是Python K-means算法的计算步骤,希望对大家有所帮助。更多Python学习指路:python基础教程

  本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

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

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