聚类算法kmeans

1. 聚类问题

所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。

2. K-均值算法简介

k-means算法,也被称为k-平均或k-均值,是一种得到最广泛使用的聚类算法。 它是将各个聚类子集内的所有数据样本的均值作为该聚类的代表点,

算法的主要思想 是通过迭代过程把数据集划分为不同的类别,使得评价聚类性能的准则函数达到最优,从而使生成的每个聚类内紧凑,类间独立。这一算法不适合处理离散型属性,但是对于连续型具有较好的聚类效果。

k-means要解决的问题

3. 算法描述

1、为中心向量c1, c2, …, ck初始化k个种子

2、分组:

(1)将样本分配给距离其最近的中心向量

(2)由这些样本构造不相交( non-overlapping )的聚类

3、确定中心:

用各个聚类的中心向量作为新的中心

4、重复分组和确定中心的步骤,直至算法收敛。

4. Hadoop数据挖掘中的应用

(1) 将数据分割为多份,并将格式统一为<id , <A, B>>, A为当前页面,B为跳转前的界面。

(2) Map函数对数据进行操作,得到<<A,B> 1>;Reduce函数处理,得到<<A,B> n>,其中n为执行<A, B>操作的次数。

(3) 每个子群体分别将Reduce的结果转换为链表结构,链表头部保存k值,


K


(A, B)


(B, D)


(D, E)


(4) 子群体内部进行选择、交叉等操作。

a) 首先从原始数据中随机选择两条数据;

b) 随机插入其他位置生成新链表

c) 比较两条链表的长度,

i. 如果相等则判断头尾是否有重合,如果有则将两条链表重合部分连接生成新的链表;

ii. 如果不相等则合并为新的链表

(5) 每个子群体分别重复上述操作,直到k值不再变化

5. 程序设计

Map函数主要负责计算样本点到各个中心点到各个中心点的距离,并将其归类。Map函数程序设计伪码:

Map( < key, value > )

{

MinDis初始化一个极限最大值,作为样本点到各个中心点的最小距离值;

For( I=1; I <= k; index ++ ) //k为中心点个数

{

计算样本点到第i个中心点的距离ids

If( dis < MinDIs ){

MinDis = dis;

Index = I;

}}

Return < index, value >;

}

Reduce函数主要功能是更新中心点,其函数输入是Mapper函数的输出< key, list(value)>, 输出函数写入到HDFS中。Reduce函数伪代码如下:

Reduce( <key, list(value)> ){

While ( list.HasNext() ){

SUM += list.value; //将归属于中心点key的所有值相加

Key = SUM / N;

}

Return <key, value>;

}

时间: 2024-10-19 16:30:26

聚类算法kmeans的相关文章

[聚类算法]K-means优缺点及其改进

[聚类算法]K-means优缺点及其改进 [转]:http://blog.csdn.net/u010536377/article/details/50884416 K-means聚类小述 大家接触的第一个聚类方法,十有八九都是K-means聚类啦.该算法十分容易理解,也很容易实现.其实几乎所有的机器学习和数据挖掘算法都有其优点和缺点.那么K-means的缺点是什么呢? 总结为下: (1)对于离群点和孤立点敏感: (2)k值选择; (3)初始聚类中心的选择: (4)只能发现球状簇. 对于这4点呢的

转:机器学习sklearn19.0聚类算法——Kmeans算法

https://blog.csdn.net/loveliuzz/article/details/78783773 机器学习sklearn19.0聚类算法--Kmeans算法 原文地址:https://www.cnblogs.com/ruogu2019/p/10291656.html

【转】 聚类算法-Kmeans算法的简单实现

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

学习笔记:聚类算法Kmeans

前记 Kmeans是最简单的聚类算法之一,但是运用十分广泛,最近看到别人找实习笔试时有考到Kmeans,故复习一下顺手整理成一篇笔记.Kmeans的目标是:把n 个样本点划分到k 个类簇中,使得每个点都属于离它最近的质心对应的类簇,以之作为聚类的标准.质心,是指一个类簇内部所有样本点的均值. 算法描述 Step 1. 从数据集中随机选取K个点作为初始质心         将每个点指派到最近的质心,形成k个类簇 Step 2. repeat             重新计算各个类簇的质心(即类内部

[聚类算法] K-means 算法

聚类 和 k-means简单概括. 聚类是一种 无监督学习 问题,它的目标就是基于 相似度 将相似的子集聚合在一起. k-means算法是聚类分析中使用最广泛的算法之一.它把n个对象根据它们的属性分为k个聚类,以便使得所获得的聚类满足: 同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小. k - means的算法原理:

聚类算法(K-means聚类算法)

在数据分析挖掘过程中常用的聚类算法有1.K-Means聚类,2.K-中心点,3.系统聚类. 1.K-均值聚类在最小误差基础上将数据划分为预定的类数K(采用距离作为相似性的评价指标).每次都要遍历数据,所以大数据速度慢 2.k-中心点,不采用K-means中的平均值作为簇中心点,而是选中距离平均值最近的点最为簇中心点. 3.系统聚类又叫多层次聚类,分类是由高到低(可以想象下二叉树这种结构),越靠后,包含的数据点越少,但共同特征越多,缺点是不适合大数据量,速度慢. K-mans聚类实战代码: #-*

聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这

【机器学习】机器学习入门08 - 聚类与聚类算法K-Means

时间过得很快,这篇文章已经是机器学习入门系列的最后一篇了.短短八周的时间里,虽然对机器学习并没有太多应用和熟悉的机会,但对于机器学习一些基本概念已经差不多有了一个提纲挈领的了解,如分类和回归,损失函数,以及一些简单的算法--kNN算法.决策树算法等. 那么,今天就用聚类和K-Means算法来结束我们这段机器学习之旅. 1. 聚类 1.1 什么是聚类 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他

【ML-7】聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这