1、KMeans算法

所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫做一个簇。与分类不同,分类是示例式学习,要求分类前明确各个类别,并断言每个元素映射到一个类别。而聚类是观察式学习,在聚类前可以不知道类别甚至不给定类别数量,是无监督学习的一种。

聚类算法是机器学习(或者说是数据挖掘更合适)中重要的一部分,除了最为简单的K-Means聚类算法外,比较常见的还有层次法(CURE、CHAMELEON等)、网格算法(STING、WaveCluster等)等。K-means聚类属于无监督学习,而回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x。
K-Means属于基于平方误差的迭代重分配聚类算法,其核心思想十分简单:
l随机选择K个中心点;
l计算所有点到这K个中心点的距离,选择距离最近的中心点为其所在的簇;
l简单地采用算术平均数(mean)来重新计算K个簇的中心;
l重复步骤2和3,直至簇类不再发生变化或者达到最大迭代值;
l输出结果。
K-Means算法的结果好坏依赖于对初始聚类中心的选择,容易陷入局部最优解,对K值的选择没有准则可依循,对异常数据较为敏感,只能处理数值属性的数据,聚类结构可能不平衡。
实例中进行如下步骤:
 装载数据,数据以文本文件方式进行存放;
 将数据集聚类,设置2个类和20次迭代,进行模型训练形成数据模型;
 打印数据模型的中心点;
 使用误差平方之和来评估数据模型;
 使用模型测试单点数据;
 保存模型并加载模型。

2、Java开发

Java开发上,引入spark-mllib_2.11-2.0.1.jar、spark-mllib-local_2.11-2.0.1.jar、spark-catalyst_2.11-2.0.1.jar。

参考spark的example案例的代码,输出skkm.jar包并提交执行。
bin/spark-submit --class sk.mlib.KMeansDemo --master local /tmp/skkm.jar

具体代码如下:

package sk.mlib;import java.util.Arrays;
import java.util.logging.Level;import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.JavaDoubleRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.mllib.clustering.KMeans;
import org.apache.spark.mllib.clustering.KMeansModel;
import org.apache.spark.mllib.linalg.Vector;
import org.apache.spark.mllib.linalg.Vectors;public class KMeansDemo {public static void main(String[] args) throws Exception {String path = "/tmp/kmeansData.txt";SparkConf conf = new SparkConf().setAppName("JavaKMeansExample");JavaSparkContext jsc = new JavaSparkContext(conf);jsc.setLogLevel("OFF");//关闭日志输出,方便查看输出结果// Load and parse dataJavaRDD<String> data = jsc.textFile(path);JavaRDD<Vector> parsedData = data.map(new Function<String, Vector>() {public Vector call(String s) {String[] sarray = s.split(" ");double[] values = new double[sarray.length];for (int i = 0; i < sarray.length; i++) {values[i] = Double.parseDouble(sarray[i]);}return Vectors.dense(values);}});parsedData.cache();// Cluster the data into two classes using KMeans// 将数据集聚类,2个类,20次迭代,进行模型训练形成数据模型int numClusters = 2;int numIterations = 20;KMeansModel clusters = KMeans.train(parsedData.rdd(), numClusters, numIterations);// 打印数据模型的中心点System.out.println("Cluster centers:");for (Vector center: clusters.clusterCenters()) {System.out.println(" " + center);}// 使用误差平方之和来评估数据模型double cost = clusters.computeCost(parsedData.rdd());System.out.println("Cost: " + cost);// Evaluate clustering by computing Within Set Sum of Squared Errorsdouble WSSSE = clusters.computeCost(parsedData.rdd());System.out.println("Within Set Sum of Squared Errors = " + WSSSE);// 使用模型测试单点数据// JavaDoubleRDD testdata1=jsc.parallelizeDoubles(Arrays.asList(0.25,0.25,0.25));double[] testdata1={0.25,0.25,0.25};double[] testdata2={8.12,8.12,8.12};System.out.println("Vectors 0.25 0.25 0.25 is belongs to clusters:" + clusters.predict(Vectors.dense(testdata1)));System.out.println("Vectors 8.12,8.12,8.12 is belongs to clusters:" + clusters.predict(Vectors.dense(testdata2)));// Save and load modelclusters.save(jsc.sc(), "/tmp/KMeansModel");KMeansModel sameModel = KMeansModel.load(jsc.sc(),"/tmp/KMeansModel");// 打印导出的数据模型的中心点System.out.println("Cluster centers:");for (Vector center: sameModel.clusterCenters()) {System.out.println(" " + center);}jsc.stop();}}/*测试数据kmeansData.txt:
0.0 0.0 0.0
0.1 0.1 0.1
0.2 0.2 0.2
9.0 9.0 9.0
9.1 9.1 9.1
9.2 9.2 9.2
*/
//提交执行:bin/spark-submit --class sk.mlib.KMeansDemo --master local /tmp/skkm.jar
/*执行结果:Cluster centers:[9.1,9.1,9.1][0.1,0.1,0.1]
Cost: 0.11999999999994547
Within Set Sum of Squared Errors = 0.11999999999994547
Vectors 0.25 0.25 0.25 is belongs to clusters:1
Vectors 8.12,8.12,8.12 is belongs to clusters:0
Cluster centers:[9.1,9.1,9.1][0.1,0.1,0.1]
*/

离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例相关推荐

  1. 离线轻量级大数据平台Spark之MLib机器学习库朴素贝叶斯实例

    1.朴素贝叶斯介绍 表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率,公式为: 贝叶斯定理: 从已知P(A|B)获得P(B|A)值. 假设A和B代表两类互相影响的事件,如 ...

  2. 离线轻量级大数据平台Spark之MLib机器学习库概念学习

    Mlib机器学习库 1.1机器学习概念 机器学习有很多定义,倾向于下面这个定义.机器学习是对能通过经验自动改进的计算机算法的研究.机器学习依赖数据经验并评估和优化算法所运行出的模型.机器学习算法尝试根 ...

  3. 离线轻量级大数据平台Spark之MLib机器学习库Word2Vec实例

    Word2Vecword2vec能将文本中出现的词向量化,可以在捕捉语境信息的同时压缩数据规模.Word2Vec实际上是两种不同的方法:Continuous Bag of Words (CBOW) 和 ...

  4. 离线轻量级大数据平台Spark之MLib机器学习库TF-IDF实例

    TF-IDF(termfrequency–inverse document frequency)是TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度.字词的 ...

  5. 离线轻量级大数据平台Spark之MLib机器学习库线性回归实例

    1.线性回归 线性回归是利用称为线性回归方程的函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析方法,只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归,在实际情况中大多数都 ...

  6. 离线轻量级大数据平台Spark之MLib机器学习库SVM实例

    支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终 ...

  7. 离线轻量级大数据平台Spark之MLib机器学习协同过滤ALS实例

    1.协同过滤 协同过滤(Collaborative Filtering,简称CF,WIKI上的定义是:简单来说是利用某个兴趣相投.拥有共同经验之群体的喜好来推荐感兴趣的资讯给使用者,个人透过合作的机制 ...

  8. 离线轻量级大数据平台Spark之单机部署及Java开发

    1.Spark平台基本介绍 Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and PeopleLab) 开发,可用来构建大型的.低延迟的数据分析应用程 ...

  9. 离线轻量级大数据平台Spark之JavaRDD关联join操作

    对两个RDD进行关联操作,如: 1)文件post_data.txt包含:post_id\title\content 2)文件train.txt包含:dev_id\post_id\praise\time ...

最新文章

  1. 改用C++生成自动化数据表
  2. java输入星期几的字母_输入字母判断星期几java编程答案
  3. 20161023 NOIP 模拟赛 T1 解题报告
  4. IBM JVM调整– gencon GC策略
  5. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
  6. 华为手机的分类有何区别_“鸿蒙”系统能不能玩安卓游戏?如果能,它跟安卓系统有何区别?...
  7. 《零基础》MySQL DELETE 语句(十五)
  8. 用Gradle命令行编译Android工程
  9. Java Web中相对路径与绝对路径的分析
  10. CSS color设置与调色板
  11. php仿歪歪漫画系统源码
  12. Centos7 虚拟机迁移及扩容
  13. 2022 年要了解的新兴安全供应商
  14. linux包含两种设备文件,在Linux系统中/dev的目录详解
  15. 透过顶级机构Q2持仓报告看美股不同板块的行情
  16. 怎样用阿里云搭建个人博客
  17. 手机软件测试普通话准确吗,语音输入法到底谁最准?我花了3天时间做了12项对比,评测结果你一定想不到!...
  18. UOM物料单位转换(同类型才能转换)
  19. java 序列化版本号_序列化版本号serialVersionUID的作用
  20. css好看的html径向渐变,CSS3径向渐变

热门文章

  1. 计算机与应用教学,教学方法与教学手段
  2. linux下搭建hadoop环境步骤分享
  3. windows服务器指定IP地址才能进行远程访问桌面设置方法
  4. 配置https后访问返回403 forbidden
  5. java自学小段 产生随机数
  6. springboot profiles
  7. Go Language 开发环境搭建
  8. Activiti工作流的应用示例
  9. leetcode - Populating Next Right Pointers in Each Node II
  10. IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)