• 聚类算法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>;

    }

  • 相关阅读:
    远程调试 ASP.NET MVC 项目
    两行代码搞定 JavaScript 的日期验证
    ASP.NET MVC 静态资源打包和压缩问题小记
    CodeSmith7连接Mysql
    网站开发烦心记-1
    感悟还是教训,或者。。。
    可以断点续传的scp
    CTP报单状态
    android studio 0.8.8下载
    期货结算单查询
  • 原文地址:https://www.cnblogs.com/bincoding/p/5545461.html
Copyright © 2020-2023  润新知