在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

K

145次阅读
没有评论

共计 2615 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章给大家介绍 K -means 算法如何实现二维数据聚类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

所谓聚类分析,就是给定一个元素集合 D,其中每个元素具有 n 个观测属性,对这些属性使用某种算法将 D 划分成 K 个子集,要求每个子集内部的元素之间相似度尽可能高,而不同子集的元素相似度尽可能低。聚类分析是一种无监督的观察式学习方法,在聚类前可以不知道类别甚至不用给定类别数量。目前聚类广泛应用于统计学、生物学、数据库技术和市场营销等领域。

聚类算法有很多种,如 K -means(K 均值聚类)、K 中心聚类、密度聚类、谱系聚类、最大期望聚类等。这里我们重点介绍 K -means 聚类算法,该算法的基本思想是以空间中 K 个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。K-means 算法实现简单、计算速度快、原理易于理解、具有理想的聚类效果,因此该算法是公认的经典数据挖掘方法之一。

例如对于常见的二维数据集,设计 K -means 聚类方法,对 80 个二维数据点进行聚类分析。K-means 算法的 Python 语言实现及处理过程如下:

如下图所示的 80 个二维样本数据集,存储为 testSet 文本文档。经过数据预处理和简单分析,得知该数据集共有 4 个类别,因而能确定聚类数 K 为 4。

首先导入必要的??椋?/p>

import kmeans

import numpy as np

import matplotlib.pyplot as plt

from math import sqrt

(1)从文件加载数据集

构建数据矩阵,从文本中逐行读取数据,形成供后继使用的数据矩阵。

dataSet=[]

fileIn=open(testSet.txt)

for line in fileIn.readlines():

  lineArr=line.strip().split( \t)

  dataSet.append([float(lineArr[0]),float(lineArr[1])])

(2)调用 kmeans 算法进行数据聚类

通过以下命令调用设计的 kmeans ???,进行数据聚类。

dataSet=np.mat(dataSet)

k=4

centroids,clusterAssment=kmeans.kmeanss(dataSet,k)

kmeans 模块主要包含如下几个函数。

距离度量函数。这里使用的是欧氏距离,计算过程如下:

def eucDistance(vec1,vec2):

  return sqrt(sum(pow(vec2-vec1,2)))

初始聚类中心选择。从数据集中随机选择 K 个数据点,用作初始聚类中心。

def initCentroids(dataSet,k):

  numSamples,dim=dataSet.shape

  centroids=np.zeros((k,dim))

  for i in range(k):

  index=int(np.random.uniform(0,numSamples))

  centroids[i,:]=dataSet[index,:]

  return centroids

K-Means 聚类算法。该算法会创建 k 个质心,然后将每个点分配到最近的质心,再重新计算质心。这个过程重复数次,直到数据点的簇分配结果不再改变位置。

def kmeanss(dataSet,k):

numSamples=dataSet.shape[0]

  clusterAssement=np.mat(np.zeros((numSamples,2)))

  clusterChanged=True

  ##step1:init centroids

  centroids=initCentroids(dataSet,k)

 

  while clusterChanged:

  clusterChanged=False

  for i in range(numSamples):

  minDist = 100000.0

  minIndex=0

  ##step2 find the centroid who is closest

  for j in range(k):

  distance=eucDistance(centroids[j,:],dataSet[i,:])

  if distance minDist:

  minDist=distance

  minIndex=j

  ##step3: update its cluster

  clusterAssement[i,:]=minIndex,minDist**2

  if clusterAssement[i,0]!=minIndex:

  clusterChanged=True

  ##step4: update centroids

  for j in range(k):

  pointsInCluster=dataSet[np.nonzero(clusterAssement[:,0].A==j)[0]]

  centroids[j,:]=np.mean(pointsInCluster,axis=0)

  print (Congratulations,cluster complete!)

  return centroids,clusterAssement

聚类结果显示。将聚类划分在的不同簇的数据,用不同的颜色和符号进行显示,同时画出最终的聚类中心。

def showCluster(dataSet,k,centroids,clusterAssement):

numSamples,dim=dataSet.shape

mark=[or , ob , og , ok , ^r , +r , r , pr]

if k len(mark):

  print(Sorry!)

  return 1

for i in np.xrange(numSamples):

  markIndex=int(clusterAssement[i,0])

  plt.plot(centroids[i,0],centroids[i,1],mark[i],markersize=12)

plt.show()

(3)聚类结果显示

对 80 个二维数据,使用 K -means 方法进行聚类,聚类结果如图 13- 5 所示,迭代后的聚类中心用方形表示,其他数据用不同颜色的原点表示。

图 二维数据的聚类结果

关于 K -means 算法如何实现二维数据聚类就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2615字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 四虎永久在线精品视频播放 | 2021久久精品永久免费 | 日韩精品无码一区二区 | 国产精品第100页 | 国产综合亚洲欧美日韩一区二区 | 国产网红主播无码精品 | 狠狠躁日日躁夜夜躁2020 | 日本aⅴ精品一区二区三区久久 | 国产三级韩国三级日产三级 | 亚洲精品福利在线观看 | 日本高清视频www夜色资源 | 久久久久亚洲精品一区二区三区 | 国产系列欧美系列日韩系列在线 | 性色aⅴ在线观看swag | 99热久这里都是精品小草 | 日韩一区国产二区欧美三 | 无码一区二区三区视频 | 国产精品黄在线观看免费软件 | 亚洲色图首页 | 性欧美高清久久久久久久 | 很黄很色的摸下面的视频 | h在线免费 | 国内自拍视频在线观看 | 日本视频在线免费播放 | 中国熟妇内谢69xxxxx | 国产黄a三级三级三级av在线看 | 日本大片成人免费播放 | 国产精品中文字幕在线观看 | 老司机亚洲精品影院在线 | 伊人大杳焦在线 | 尤物免费网站 | 欧美亚洲自拍偷拍 | 午夜神马理论 | 免费a级毛片高清在钱 | 一出一进一爽一粗一大视频 | 成人亚洲电影 | 成人亚洲在线观看 | 一级毛片在线 | 精品无码一区二区三区亚洲桃色 | 国产亚洲综合色就色 | 99视频精品全部在线观看 |