`

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
分享到:
评论

相关推荐

    基于K-means聚类算法的图像分割及其MATLAB实现

    基于K-means聚类算法的图像分割 算法的基本原理:  基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...

    K-均值聚类[收集].pdf

    进的 K-均值聚类算法对 iris 数据集进行聚类。聚类的效果与传统的 K-均值算法相比,可以看到明显的改善。以下是对 K-均值聚类算法及其改进版的详细解析: K-均值聚类算法是数据挖掘中的核心方法,其目标是将数据集...

    基于模糊C-均值聚类算法的遥感影像分类

    由Bezdek提出的模糊C-均值聚类算法,结合了模糊集理论和传统的K-均值聚类。与K-均值聚类不同,模糊C-均值聚类方法对像元属于不同类别的程度进行量化,使用隶属度概念来表达这种不确定性。这种方法允许一个像元可以...

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

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

    面向立木识别的有效K-均值聚类算法研究.docx

    "面向立木识别的有效K-均值聚类算法研究" 本文 recherché 了面向立木识别的有效 K-均值聚类算法,以解决林区自动对靶施药过程中点云数据聚类准确率低、效率低的问题。该算法首先使用窗口滤波算法对相关数据进行...

    基于K-均值聚类算法RBF神经网络交通流预测.pdf

    基于K-均值聚类算法RBF神经网络交通流预测 本篇论文的主要内容是基于K-均值聚类算法的RBF神经网络交通流预测模型的研究。该模型通过K-均值聚类算法对RBF神经网络进行优化,使得模型具有更高的预测精度和收敛性。 ...

    K均值聚类即K-Means算法详解PPT

    K-Means聚类算法详解 K-Means聚类算法是一种常用的无监督学习方法,主要用于将数据点分组成不同的簇,以便更好地理解数据的结构和特征。在这里,我们将详细介绍K-Means聚类算法的原理、步骤和应用。 一、聚类算法...

    K-均值聚类算法

    ### K-均值聚类算法知识点详解 #### 一、K-均值聚类算法简介 K-均值聚类是一种非监督学习方法,主要用于数据挖掘中的无标签数据集分类。该算法通过迭代的方式将数据集划分为K个簇(cluster),使得每个数据点归属到...

    数据挖掘中K-均值聚类算法的缺陷及工作效率改进的实验研究.pdf

    K-均值聚类算法是数据挖掘领域中一种非常重要的聚类分析方法,其基本原理是将n个数据对象划分为k个簇,使得每个数据对象都属于离它最近的均值代表的簇。K-均值算法在数据挖掘中取得了显著的成就,尤其是在聚类分析...

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

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

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

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

    kmeans聚类算法和k-medoids聚类算法 matlab代码.rar

    本文将深入探讨两种常见的聚类算法——K-means算法和K-medoids算法,并结合MATLAB代码来阐述它们的工作原理、优缺点以及实现过程。 ### K-means算法 **概述:** K-means是最为广泛使用的聚类算法之一,其目标是将...

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

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

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

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

    K-means聚类算法.pptx

    K-means聚类算法是一种广泛应用的无监督学习方法,主要用于数据的分组或分类,尤其在数据挖掘和机器学习领域。它的目标是将数据集划分为k个互不重叠的簇,使得同一簇内的数据点间的相似度尽可能高,而不同簇之间的...

    K-MEANS聚类算法的实现

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

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

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

    聚类算法概述, K-Means 聚类算法详解.docx

    聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解.docx 聚类算法概述, K-Means 聚类算法详解....

Global site tag (gtag.js) - Google Analytics