`

K-均值聚类算法(集体智慧编程)

阅读更多

上篇博客中讲到的分级聚类算法为我们返回了一棵形象直观的树,但是这个方法有两个缺点。

1.在没有额外的投入的情况下,树形视图是不会真正将数据拆分成不同组的。

2.该算法的计算量非常惊人,因为我们必须计算每两个配对项之间的关系,并且在合并项之后,这些关系还得重新再计算,所以在处理很大规模的数据集时,该算法的运行速度会非常缓慢。

 

K-均值聚类完全不同于分级聚类,因为我们会预先告诉算法希望生成的聚类数量,然后算法会根据数据的结构状况来确定聚类的大小。

 

K-均值聚类算法首先会随机确定k个中心位置,然后将各个数据项分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这一过程会一直重复下去,直到分配过程不再产出变化为止。

 如图所示,有A,B,C,D,E五个数据项,随机生成两个数据项(黑点处),将距离最近的的数据合为一类,取平均后生成新的两个数据项(黑点处),再次将距离最近的数据合为一类,如此重复,直到数据固定。

 

mark

import random

def kcluster(rows,distance=pearson,k=4):
  # 确定每个点的最大值和最小值,给随机数定个范围
  ranges=[(min([row[i] for row in rows]),max([row[i] for row in rows])) 
  for i in range(len(rows[0]))]

  # 随机建立k个中心点
  clusters=[[random.random()*(ranges[i][1]-ranges[i][0])+ranges[i][0] 
  for i in range(len(rows[0]))] for j in range(k)]
  
  lastmatches=None
  # 设定循环100次,看你的数据大小,次数自定义
  for t in range(100):
    print 'Iteration %d' % t
    bestmatches=[[] for i in range(k)]
    
    # 在每一行中寻找距离最近的中心点
    for j in range(len(rows)):
      row=rows[j]
      bestmatch=0
      for i in range(k):
        d=distance(clusters[i],row)
        if d<distance(clusters[bestmatch],row): bestmatch=i
      bestmatches[bestmatch].append(j)

    # 如果结果与上一次的相同,则整个过程结束
    if bestmatches==lastmatches: break
    lastmatches=bestmatches
    
    # 将中心点移到其所有成员的平均位置处
    for i in range(k):
      avgs=[0.0]*len(rows[0])
      if len(bestmatches[i])>0:
        for rowid in bestmatches[i]:
          for m in range(len(rows[rowid])):
            avgs[m]+=rows[rowid][m]
        for j in range(len(avgs)):
          avgs[j]/=len(bestmatches[i])
        clusters[i]=avgs
      
  return bestmatches

使用分级聚类算法的数据

blognames,words,data = clusters.readfile('blogdata1.txt')

kclust = clusters.kcluster(data,k=10)

print [blognames[r] for r in kclust[1]]

 

此算法的关键在于k值的大小,不同的k值会有不同的结果,因为多尝试几个k值,选用最合适的为恬!

 

  • 大小: 35.7 KB
1
0
分享到:
评论

相关推荐

    详解Java实现的k-means聚类算法

    Java实现的k-means聚类算法详解 k-means聚类算法是一种常用的无监督学习算法,用于对数据进行聚类分析。该算法的主要思想是将相似的数据点聚类到一起,形成不同的簇。Java语言是实现k-means聚类算法的不二之选。 ...

    k-均值聚类算法实现灰度图像分割_K均值算法_K._图像聚类_图像聚类_图像分割_

    k-均值聚类算法(K-Means Clustering)是一种广泛应用的数据分析方法,尤其在图像处理领域,常用于图像的灰度图像分割。该算法通过将数据集中的样本点分配到最近的聚类中心所属的类别,以此来达到划分的目的。在图像...

    模式识别K-均值聚类法matlab实现程序

    标题与描述中的“模式识别K-均值聚类法matlab实现程序”指向了一种在数据科学和机器学习领域广泛使用的算法——K-均值聚类(K-Means Clustering)。K-均值聚类是一种无监督学习方法,主要用于数据的分类与模式识别,其...

    K-均值聚类_k均值聚类_K均值_K._k均值matlab_K均值聚类算法_

    《K-均值聚类算法在Matlab中的实现》 K-均值聚类(K-Means Clustering)是一种广泛应用的数据分析方法,主要用于无监督学习中的数据分组。它通过迭代过程,将数据集中的样本点分配到最近的聚类中心所属的簇中,以...

    K-均值聚类算法研究

    由于其算法思想简便,又容易实现对大规模数据的聚类,因此K-均值算法已成为一种最常用的聚类算法之一K-均值算法能找到关于聚类误差的局部的最优解,是一个能应用在许多聚类问题上的快速迭代算法。它是一种以点为基础的...

    基于 K-means 聚类算法的图像区域分割.zip

    基于 K-means 聚类算法的图像区域分割,首先从数据样本种选取K个点作为初始聚类中心,其次计算各个样本到聚类的距离,把样本归到离它最近的那个聚类中心所在的累,计算新形成的每个聚类的数据对象的平均值来得到新的...

    机器视觉基础 | image-k-means | 基于 k-均值聚类算法图像分割

    本篇文章将深入探讨基于k-均值聚类算法的图像分割方法,这是一种广泛应用且理解相对简单的算法。 首先,我们要了解k-均值聚类算法的基本原理。k-均值是一种迭代的无监督学习方法,用于将数据集划分为k个不同的类别...

    数据挖掘实验五k-均值聚类算法.pdf

    总结来说,k-均值聚类算法实验是数据挖掘教学的重要组成部分,它帮助学生从理论走向实践,通过编程实现聚类算法,增强对数据结构和聚类概念的理解。通过不断的迭代优化,最终达到对数据集进行有效分割的目的,为后续...

    有关k-均值聚类算法理解.docx

    K-均值聚类算法是数据挖掘和机器学习领域中常用的一种非监督学习方法,它主要用于将数据集划分成K个不同的簇。该算法最早由MacQueen在1967年提出,至今仍然是聚类算法的基石之一。K-均值算法的核心思想是通过迭代...

    动态K-均值聚类算法在RBF神经网络中心选取中的应用概要.docx

    【动态K-均值聚类算法在RBF神经网络中心选取中的应用】 RBF神经网络,全称为径向基函数神经网络,因其简洁的网络结构、快速的学习速度以及优秀的泛化能力,在模式识别和函数近似等领域得到广泛应用。然而,确定RBF...

    基于K-means聚类算法的图像分割(MATLAB实现).rar_ASV聚类_K-Means图像分割_k means_rest

    《基于K-means聚类算法的图像分割在MATLAB中的实现》 图像分割是计算机视觉领域中的基础任务,它旨在将图像划分为多个区域或对象,每个区域具有相似的特征。K-means聚类算法是一种广泛应用的数据分析方法,它通过...

    基于粗糙集的K-均值聚类算法在图像分割中的应用.pdf

    ### 基于粗糙集的K-均值聚类算法在图像分割中的应用 #### 一、引言 图像分割是计算机视觉中的一个重要任务,它旨在将图像划分成多个具有相似特性的区域,以便进一步分析处理。传统的图像分割方法包括阈值分割、...

    试验三k-均值聚类算法试验报告 (3).pdf

    实验所需的硬件主要为配备相关编程软件的个人计算机,软件部分则需要支持执行K-均值算法的编程语言,如MATLAB或其他支持数值计算的环境。 三、实验原理 1) 非监督学习的理论基础:在未知标签的情况下,通过寻找数据...

    K-MEANS聚类算法的实现

    K-MEANS聚类算法的实现 K-MEANS聚类算法是一种常用的无监督机器学习算法,主要用于对数据进行聚类分析。该算法的主要思想是将相似的数据对象划分到同一个簇中,使得簇内的数据对象尽量相似,而簇间的数据对象尽量...

    论文研究-基于EMD和优化K-均值聚类算法诊断滚动轴承故障.pdf

    首先对原始振动信号进行EMD分解, 对含故障特征的IMFintrinsic mode function分量进行信号重构, 随后对重构信号进行Hilbert包络谱分析, 在提取特征量的基础上, 应用优化K-均值聚类算法进行故障类型和故障程度分类。...

    基于python聚类算法的实现-包含:最大最小距离算法、近邻聚类算法、层次聚类算法、K-均值聚类算法、ISODATA聚类算法

    基于python聚类算法的实现--包含:最大最小距离算法、近邻聚类算法、层次聚类算法、K-均值聚类算法、ISODATA聚类算法

    k-均值聚类算法 用于 图像分割

    基于opencv3 实现 基于聚类的图像分割,k-means聚类效果好,但需要注意需认为设定聚类数量,可在代码中更改。

    有关k-均值聚类算法的理解.pdf

    K-均值聚类算法是机器学习领域中一种广泛应用的非监督学习方法,主要用于数据挖掘中的数据聚类分析。该算法由MacQueen在1967年首次提出,至今仍是一种极具影响力的数据分组技术。K-均值算法基于划分策略,通过迭代...

    K-均值聚类实现路标检测

    本项目采用K-均值聚类算法来实现这一功能,这是一种经典的无监督机器学习方法,常用于数据分类和分割。接下来,我们将详细讨论K-均值聚类及其在路标检测中的应用。 K-均值聚类是一种迭代算法,其目标是将数据集分为...

Global site tag (gtag.js) - Google Analytics