数据分析之聚类算法
1. 什么是聚类算法
所谓聚类,就是比如给定一些元素或者对象,分散存储在数据库中,然后根据我们感兴趣的对象属性,对其进行聚集,同类的对象之间相似度高,不同类之间差异较大。最大特点就是事先不确定类别。
这其中最经典的算法就是KMeans算法,这是最常用的聚类算法,主要思想是:在给定K值和K个初始类簇中心点的情况下,把每个点(亦即数据记录)分到离其最近的类簇中心点所代表的类簇中,所有点分配完毕之后,根据一个类簇内的所有点重新计算该类簇的中心点(取平均值),然后再迭代的进行分配点和更新类簇中心点的步骤,直至类簇中心点的变化很小,或者达到指定的迭代次数。
KMeans算法本身思想比较简单,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。

  1. 聚类算法实现
    假设对象集合为D,准备划分为k个簇。
    基本算法步骤如下:
    1、从D中随机取k个元素,作为k个簇的各自的中心。
    2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
    3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
    4、将D中全部元素按照新的中心重新聚类。
    5、重复第4步,直到聚类结果不再变化。
    6、将结果输出。

核心Java代码如下:
/**
* 迭代计算每个点到各个中心点的距离,选择最小距离将该点划入到合适的分组聚类中,反复进行,直到
* 分组不再变化或者各个中心点不再变化为止。
* @return
*/
public List[] comput() {
List[] results = new ArrayList[k];//为k个分组,分别定义一个聚簇集合,未来放入元素。

    boolean centerchange = true;//该变量存储中心点是否发生变化while (centerchange) {iterCount++;//存储迭代次数centerchange = false;for (int i = 0; i < k; i++) {results[i] = new ArrayList<T>();}for (int i = 0; i < players.size(); i++) {T p = players.get(i);double[] dists = new double[k];for (int j = 0; j < initPlayers.size(); j++) {T initP = initPlayers.get(j);/* 计算距离  这里采用的公式是两个对象相关属性的平方和,最后求开方*/double dist = distance(initP, p);dists[j] = dist;}int dist_index = computOrder(dists);//计算该点到各个质心的距离的最小值,获得下标results[dist_index].add(p);//划分到对应的分组。}/** 将点聚类之后,重新寻找每个簇的新的中心点,根据每个点的关注属性的平均值确立新的质心。*/for (int i = 0; i < k; i++) {T player_new = findNewCenter(results[i]);System.out.println("第"+iterCount+"次迭代,中心点是:"+player_new.toString());T player_old = initPlayers.get(i);if (!IsPlayerEqual(player_new, player_old)) {centerchange = true;initPlayers.set(i, player_new);}}}return results;
}

上面代码是其中核心代码,我们根据对象集合List和提前设定的k个聚集,最终完成聚类。我们测试一下,假设要测试根据NBA球员的场均得分情况,进行得分高中低的聚集,很简单,高得分在一组,中等一组,低得分一组。
我们定义一个Player类,里面有属性goal,并录入数据。并设定分组数目为k=3。
测试代码如下:
List listPlayers = new ArrayList();
Player p1 = new Player();
p1.setName(“mrchi1”);
p1.setGoal(1);
p1.setAssists(8);
listPlayers.add(p1);

    Player p2 = new Player();p2.setName("mrchi2");p2.setGoal(2);listPlayers.add(p2);Player p3 = new Player();p3.setName("mrchi3");p3.setGoal(3);listPlayers.add(p3);//其他对象定义此处略。制造几个球员的对象即可。Kmeans<Player> kmeans = new Kmeans<Player>(listPlayers, 3);List<Player>[] results = kmeans.comput();for (int i = 0; i < results.length; i++) {System.out.println("类别" + (i + 1) + "聚集了以下球员:");List<Player> list = results[i];for (Player p : list) {System.out.println(p.getName() + "--->" + p.getGoal()}}

算法运行结果:

可以看出中心点经历了四次迭代变化,最终分类结果也确实是相近得分的分到了一组。当然这种算法有缺点,首先就是初始的k个中心点的确定非常重要,结果也有差异。可以选择彼此距离尽可能远的K个点,也可以先对数据用层次聚类算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。

大数据分析之聚类算法相关推荐

  1. 生物效应大数据评估聚类算法的并行优化

    生物效应大数据评估聚类算法的并行优化 彭绍亮1,2,杨顺云2,孙哲1,程敏霞1,崔英博2,王晓伟2,李非3,伯晓晨3,廖湘科2 1. 湖南大学信息科学与工程学院&国家超级计算长沙中心,湖南 长 ...

  2. 文献记录(part75)--基于最大平均熵率的大数据关联聚类算法

    学习笔记,仅供参考,有错必纠 基于最大平均熵率的大数据关联聚类算法 摘要 聚类是数据挖掘和机器学习中的基本任务之一 . 传统聚类方法由于其设计中对簇结构假设的限制 , 导致算法在不符合其假设的数据集上 ...

  3. 数据分析方法-聚类算法

    文章目录 一.定义 二.聚类.分类区别分类 三.聚类常用算法 1.划分聚类 k-means.k-medoids.k-modes.k-medians.kernel k-means 2.层次聚类 Aggl ...

  4. 工业大数据分析建模和算法

    前期简单了解了工业大数据大概的研究框架,为了进一步了解工业大数据如何用,进行进一步的研究调研. 工业大数据驱动技术模型与算法 智能制造业 整体描述 过去几年,智能制造在研究和工业上获得了巨大的关注.在 ...

  5. 大数据分析之分类算法

    数据分析之决策树ID3算法 什么是分类算法? 分类算法跟之前的聚类都是让不同对象个体划分到不同的组中的.但是分类不同之处在于类别在运算之前就已经是确定的. 分类是根据训练数据集合,结合某种分类算法,比 ...

  6. 详细解读:大数据分析的学习

    以大数据分析师为目标,从数据分析基础.JAVA语言入门和linux操作系统入门知识学起,系统介绍hadoop.HDFS.MapReduce和Hbase等理论知识和hadoop的生态环境. 大数据 一. ...

  7. 详解:大数据分析的学习之路

    一.大数据分析的五个基本方面 1,可视化分析 大数据分析的使用者有大数据分析专家,同时还有普通用户,但是他们二者对于大数据分析最基本的要求就是可视化分析,因为可视化分析能够直观的呈现大数据特点,同时能 ...

  8. 机器学习:k-means聚类算法+算法优化

    第六章:机器学习course02:k-means聚类算法 标签(空格分隔): 10-机器学习 $---by:Rianusr$ ##1 课题导入 ###1.1 k-means常见的应用场景 ![imag ...

  9. 大数据分析与数据分析的根本区别在哪里

    大数据分析与数据分析这几年一直都是个高频词,很多人都开始纷纷转行到这个领域,也有不少人开始跃跃欲试,想找准时机进到大数据或数据分析领域.如今大数据分析和数据分析火爆,要说时机,可谓处处都是时机,关键要 ...

最新文章

  1. 物联网11种通信协议
  2. pimg src=http://img.blog.csdn.net/20150823142545135?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQ...
  3. 默写标准答案0917
  4. linux mysql 6.0.4 启动_MySQL Connector/J 6.x jdbc.properties 配置, mysql-connector-java-6.0.4.jar 异常...
  5. 成功网络管理员必备“软件”素质
  6. 数值方法与计算机算法试卷,《数值方法与计算机算法》课程教学大纲.pdf
  7. 路飞学城—Python—爬虫实战密训班 第三章
  8. Python-Cartopy制图学习02-中国2010年5月干旱情况空间制图
  9. 计算机ppt教程 猫先生,漏斗式提问法.ppt
  10. 读者提问:如何提高效率?
  11. java thread 简单写法_Java线程池写法改写为C#线程池写法
  12. HDU 6438Buy and Resell
  13. 又是一个相当 带劲的招聘起事
  14. 在浏览器的标签页显示网站标志图标
  15. 刷入magisk无限重启_手机刷成砖了?别慌,这些方法可以救回来
  16. 西电和杭电计算机考研,名师张雪峰:中国有四个电子科技大学,有一个很特别,考研要注意...
  17. 嵌入式Linux配置内核后编译过程中报未定义引用错误的解决
  18. 行人检测算法(ICF DPM)CCV(A Morden Computer Vision Library)的使用VisualBox下使用Ubuntu
  19. 郑军科幻小说《冰与血》《海与人》
  20. 战网服务器修改,怎么修改战网客户端?修改战网客户端的方法

热门文章

  1. 类似微信的联系人根据字母排列查询
  2. java毕业设计动物在线领养网站Mybatis+系统+数据库+调试部署
  3. mac的wifi有一个感叹号无法上网。
  4. 【原创】如何做一个合格的Cocos面试官-非专业人士的前期准备
  5. 【知识分享】删除我的电脑中的顽固图标
  6. LCD显示屏有哪些技术参数呢?
  7. sql server添加字段说明脚本
  8. window 创建虚拟盘符
  9. 用python画一个生日快乐林作龙
  10. 5种获取JavaScript时间戳函数的方法