数据挖掘聚类算法之K-MEDOIDS

     K-MEANS顾名思义K-均值,通过计算一类记录的均值来代表该类,但是受异常值或极端值的影响比较大,这里介绍另外一种算法K-medodis。看起来和K-means比较相似,但是K-medoids和K-means是有区别的,不一样的地方在于中心点的选取在K-means中,我们将中心点取为当前cluster中所有数据点的平均值,在  K-medoids算法中,我们将从当前cluster  中选取这样一个点——它到其他所有(当前cluster中的)点的距离之和最小——作为中心点

K-MEANS算法的缺点:
产生类的大小相差不会很大,对于脏数据很敏感。
改进的算法:K-medoids方法。

这儿选取一个对象叫做mediod来代替上面的中心的作用,这样的一个medoid就标识了这个类。

K-MEDODIS的具体流程如下:
1)任意选取K个对象作为medoids(O1,O2,…Oi…Ok)。  
2)将余下的对象分到各个类中去(根据与medoid最相近的原则);  
3)对于每个类(Oi)中,顺序选取一个Or,计算用Or代替Oi后的消耗—E(Or)。选择E最小的那个Or来代替Oi。这样K个medoids就改变了。
4)重复2、3步直到K个medoids固定下来。  
不容易受到那些由于误差之类的原因产生的脏数据的影响,但计算量显然要比K-means要大,一般只适合小数据量。

原文发布时间为:2013-08-4


时间: 2024-10-04 19:14:02

数据挖掘聚类算法之K-MEDOIDS的相关文章

[python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像

0 前言 本文主要讲述以下几点:        1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词):        2.调用scikit-learn中的K-means进行文本聚类:        3.使用PAC进行降维处理,每行文本表示成两维数据:        4.最后调用Matplotlib显示聚类效果图. 文章更详细的内容参考:http://blog.csdn.net/eastmount/article/details/50473675由于涉及

机器学习算法实践 K均值聚类的实用技巧

Bilal Mahmood:我们最常做的分析之一,便是在数据中提取模式. 比方说,某公司的客户可被划分入哪些细分市场? 我们如何在用户网络中找到特定群体的聚类? 通过机器学习的方式,我们可以得到这些问题的答案. 即使当我们不知道需要查找哪些特定数据段,亦或我们的数据格式是非结构化数据,我们都可以有这么一种技术手段,在算法上,分析出数据中合理的数据模式,合适的数据段和分类结果. 在本文中,我们将会详细介绍一种算法,K-Means Clustering(K均值聚类),包括如何衡量其效果,以及如何确定

K-means聚类算法

K-means聚类算法      K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般.最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用.看了Andrew Ng的这个讲义后才有些明白K-means后面包含的EM思想.      聚类属于无监督学习,以往的回归.朴素贝叶斯.SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类.而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集.聚类的目的是找到每个样本x潜

一文读懂聚类算法

1. 聚类的基本概念 1.1 定义 聚类是数据挖掘中的概念,就是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大.也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离. 1.2 聚类与分类的区别 Clustering (聚类),简单地说就是把相似的东西分到一组,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起.因此,一个聚类算法通常只需要知道如何计算相似度就可

【独家】一文读懂聚类算法

1. 聚类的基本概念 1.1 定义 聚类是数据挖掘中的概念,就是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同时不在同一个簇中的数据对象的差异性也尽可能地大.也即聚类后同一类的数据尽可能聚集到一起,不同类数据尽量分离. 1.2 聚类与分类的区别 Clustering (聚类),简单地说就是把相似的东西分到一组,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起.因此,一个聚类算法通常只需要知道如何计算相似度就可

k-means聚类算法C++实现

Clustering 中文翻译作"聚类",简单地说就是把相似的东西分到一组,同 Classification (分类)不同,对于一个 classifier ,通常需要你告诉它"这个东西被分为某某类"这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行"学习",从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervised learning (监督学习).而在聚类的时候,我们并不关心某一类是什么,我

k-medoids聚类算法实现

k-medoids聚类算法,即k-中心聚类算法,它是基于k-means聚类算法的改进.我们知道,k-means算法执行过程,首先需要随机选择初始质心,只有第一次随机选择的初始质心才是实际待聚类点集中的点,而后续将非质心点指派到对应的质心点后,重新计算得到的质心并非是待聚类点集中的点,而且如果某些非质心点是离群点的话,导致重新计算得到的质心可能偏离整个簇,为了解决这个问题,提出了改进的k-medoids聚类算法. k-medoids聚类算法也是通过划分的方式来计算得到聚类结果,它使用绝对差值和(S

机器理解大数据的秘密:聚类算法深度详解

看看下面这张图,有各种各样的虫子和蜗牛,你试试将它们分成不同的组别? 不是很难吧,先从找出其中的蜘蛛开始吧! 完成了吗?尽管这里并不一定有所谓的「正确答案」,但一般来说我们可以将这些虫子分成四组:蜘蛛.蜗牛.蝴蝶/飞蛾.蜜蜂/黄蜂. 很简单吧?即使虫子数量再多一倍你也能把它们分清楚,对吗?你只需要一点时间以及对昆虫学的热情就够了--其实就算有成千上万只虫子你也能将它们分开. 但对于一台机器而言,将这 10 个对象分类成几个有意义的分组却并不简单--在一门叫做组合学(combinatorics)的

Science上发表的聚类算法,C++编程实现,有一个bug不知道怎么解决!!跪求大神!!!

问题描述 Science上发表的聚类算法,C++编程实现,有一个bug不知道怎么解决!!跪求大神!!! include<iostream> include<fstream>using namespace std; typedef struct sourcedata //声明了一个原始数据结构体 { int m; //矩阵的行rows int n; //矩阵的列columns double **data; //保存数据的二维指针 }SourceData; SourceData get