`
myten
  • 浏览: 133999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spark结合Kmeans对数据标签化

 
阅读更多

概念:聚类算法是一种无监督学习任务,用于将对象分到具有高度相似性的聚类中.

举例:N个人有N多爱好,每个爱好提供出一个贡献值(或者称之为特征值),至于这个贡献值怎么得出目前不讨论.那么聚类算法就能实现根据这些特征值,把这N个人进行分组.

 

本人所在行业为轨道交通行业,致力于利用轴箱传感器采集到的数据进行故障诊断和预测.文中提到的数据源自真实采集数据.每行16个浮点型数值.

具体为: 最大值,最小值,平均值,均方值,有效值,方差,偏度,峭度,峰值,方根幅值,绝对平均值,波形指标,脉冲指标,裕度指标,峭度指标.

 

数据共计24000多条,假设人为复核,一条一条去过,那么必然浪费很多时间.那么如何才能更有效率呢?

答案自然是使用Kmeans对数据进行聚类.这里使用的数据已经清洗过,数据清洗概念不知者自行脑补.

 

接下来上代码

public void digest(String path) {
		SparkConf conf = new SparkConf().setAppName("K-means Example");
		conf.setMaster("local");
		JavaSparkContext sc = new JavaSparkContext(conf);
		// Load and parse data
		JavaRDD<String> data = sc.textFile(path);
		JavaRDD<Vector> parsedData = data.map(new Function<String, Vector>() {
			private static final long serialVersionUID = 1L;
			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
		int numClusters = 2;
		int numIterations = 20;
		KMeansModel clusters = KMeans.train(parsedData.rdd(), numClusters, numIterations);
		

		// Evaluate clustering by computing Within Set Sum of Squared Errors
		double WSSSE = clusters.computeCost(parsedData.rdd());
		System.out.println("Within Set Sum of Squared Errors = " + WSSSE);

		// Save and load model
		clusters.save(sc.sc(), "TrainningModel");
		sc.close();

	}

 第一步就是要对数据进行处理,并进行训练,最后保存模型.模型保存在了TrainningModel文件夹中.此时,我们已经有了训练后保存的模型,那么就可以拿这个模型来判定数据.具体判定方法如下

public void awardFrData(String path) {
		SparkConf conf = new SparkConf().setAppName("K-means Example");
		conf.setMaster("local");
		JavaSparkContext sc = new JavaSparkContext(conf);
		KMeansModel sameModel = KMeansModel.load(sc.sc(), "TrainningModel");
		JavaRDD<String> data = sc.textFile(path);
		JavaRDD<Vector> test = data.map(new Function<String, Vector>() {
			private static final long serialVersionUID = 1L;
			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);
			}
		});
		JavaRDD<Integer> rst = sameModel.predict(test);
		rst.repartition(1).saveAsTextFile("Result");

	}

 上面代码将数据处理成RDD后,进行预测并返回了一个RDD,代码默认保存在了Result文件夹中.

打开Result文件夹中的part-00000文件,即可看到每行一个数字的数据.0和1.

最后,我们可以通过查看0,1标签的数据百分比来进行下一步的数据分析.

 

我在进行数据分析时,尝试对数据进行三类聚类话划分.发现0标签的数据占比在99%,1和2占比在1%左右.我提供的特征数据是用来诊断轴承是否故障的基本特征数据.当聚类算法把这些数据聚类后,很明显,那个1%的数据才是最可疑的数据.因为大多数时候,轴承是正常的,所以数据体现的也是相似的.

 

为了检验聚类真实效果,我特意将三类数据中各抽出一条进行图表对比.效果如下.



 其中Row24460是0标签,Row24462是1标签,Row24515是2标签.明显看出三组数据具有很明显的特征.

 

结论,在数据没有标签化之前,如果需要对数据分析.那么第一步是清洗数据,第二部是尝试对数据进行聚类.当然聚类也是一种数据清洗.在这两万多条数据中,我已经择出去了一条峭度指标达到两万多的数据.在使用聚类分析时,它被孤零零的划分为一类.我把视为异常数据.

因为这些数据采集过程中没有报出过故障,所以没有办法对其标签化.也就没有办法进行神经网络训练.但值得欣慰的是,使用Kmeans能够得出1%的数据与众不同,这个结果还是很让人满意的.

 

我接下来的任务就是通过尝试分析这1%的数据,对比原始数据的公里标,来复核是不是因为某段铁轨轨道波磨,或者有损伤导致的振动数据异常.

 

最后附上整理后的表格文件.所有对数据分析有兴趣的可以直接拿去使用.见附件.

  • 大小: 23.9 KB
分享到:
评论

相关推荐

    毕业设计&课设--毕业设计源码-基于Spark的Kmeans聚类算法优化.zip

    在描述中,“毕业设计&课设--毕业设计源码-基于Spark的Kmeans聚类算法优化”重申了项目的核心内容,即利用Spark对KMeans算法进行了某种形式的优化。这可能涉及到提高算法的效率,比如减少迭代次数、提升并行计算性能...

    Spark中机器学期之KMeans算法实战讲解

    - **数据预处理**:对数据进行标准化或归一化,可以使不同尺度的数据在同一水平上比较,提高聚类效果。 - **性能优化**:Spark提供了策略如BlockManager和RDD缓存来提高KMeans的执行效率。合理利用这些机制,可以...

    毕业设计源码-基于Spark的Kmeans聚类算法优化.zip

    1. 并行化处理:利用Spark的RDD(弹性分布式数据集)进行并行计算,减少数据处理的时间。 2. 数据分区:根据数据分布和集群架构合理分配数据,提高计算效率。 3. 近似最近邻(Approximate Nearest Neighbor, ANN)...

    mastering apache spark

    综上所述,精通Apache Spark涉及到对Spark Core的底层架构理解、对Spark SQL处理结构化数据的能力以及使用MLlib进行高效机器学习任务的能力。掌握Spark能够为处理大数据提供强大的支持,是当前大数据处理领域的必备...

    k_means&random_forest在Spark框架下的实现

    在大数据分析领域,Apache Spark作为一个高效、通用的并行计算框架,因其强大的处理能力和易用性而备受青睐。本主题将深入探讨如何在Spark框架下实现两种常用的机器学习算法:K-means聚类和随机森林(Random Forest...

    k-means聚类(使用数据集:iris)

    总的来说,使用Java实现k-means聚类算法并在鸢尾花数据集上应用,不仅可以加深对k-means算法的理解,还能为实际的数据分析和挖掘任务提供有价值的参考。在这个过程中,我们可以学习到数据处理、算法实现、性能优化等...

    企业级360°全方位用户画像完整版(686页).pdf

    用户画像是一种数据驱动的方法,用于构建一个详细的用户模型,它结合了用户的行为、偏好、社会属性等信息,形成一个全面的、立体的用户形象。在大数据时代,用户画像已经成为企业和产品经理进行精细化运营、个性化...

    K-means聚类实验.docx

    3. 数据预处理:删除类别标签列,使用VectorAssembler将数据转化为特征向量,并通过StandardScaler进行标准化,确保各特征在同一尺度上。 4. 构建模型:使用pyspark.ml.clustering库中的KMeans模型,设定输入列、...

    R200条笔记.zip

    其次,笔记可能涉及了R中的数据操作,包括数据清洗(如使用dplyr包进行筛选、排序、分组和汇总)、数据转换(如使用tidyr进行数据重塑)以及数据可视化(如使用ggplot2创建高质量图表)。这些是数据预处理的关键步骤...

    CUHK-BigData:提交assignemt 1源代码-Big source code

    【标签】"系统开源" 暗示了这份源代码可能是基于开放源码的系统和工具编写的,这意味着学习者不仅在实践已有的开源技术,还可能对这些技术进行了定制化或者创新。开源系统在大数据领域广泛使用,例如Apache Hadoop、...

    机器学习&深度学习资料笔记&基本算法实现&资源整理.zip

    数据集相关:生成VOC目录结构 | 标签转xml写入 | coco txt转voc xml | 可视化VOC标签框 | 更新训练验证txt图片名 | VOC转csv格式 | 计算csv格式数据合适的anchor | labelme标注的人体17点json转COCO 常用算法:NMS ...

    javamap源码-K-Mean-Clustering-Java-Source-code:使用Eclipse的MapReduce中的K均值聚类

    - 由于MapReduce的本地化计算特性,K-Means在大数据上的执行效率可能会受限,有时需要结合Spark等更高效的分布式计算框架。 总之,这个开源项目提供了在Java MapReduce环境下实现K-Means聚类的示例,有助于学习者...

Global site tag (gtag.js) - Google Analytics