• [机器学习、Spark]Spark MLlib实现数据基本统计


    👨‍🎓👨‍🎓博主:发量不足

    📑📑本期更新内容:Spark MLlib基本统计

    📑📑下篇文章预告:Spark MLlib的分类🔥🔥

    简介:耐心,自信来源于你强大的思想和知识基础!!

     

    目录

    Spark MLlib基本统计

    一.摘要统计

    二.相关统计

    三.分层抽样


     

    Spark MLlib基本统计

    MLlib提供了很多统计方法,包含摘要统计、相关统计、分层抽样、假设检验、随机数生成等统计方法,利用这些统计方法可帮助用户更好地对结果数据进行处理和分析

    MLlib三个核心功能:

    1.实用程序:统计方法,如描述性统计、卡方检验、线性代数、模型评估方法等
    2.数据准备:特征提取、变换、分类特征的散列和一些自然语言处理方法
    3.机器学习方法:实现了一些流行和高级的回归,分类和聚类算法

    4e90faccccfc6fbee05942c06ac7487e.jpeg

    一.摘要统计

    683e0c9eb2ea498e947c45ae24776375.png

     

    导包

    import org.apache.spark.mllib.linalg.Vectors

    import org.apache.spark.mllib.stat.{MultivariateStatisticalSummary,Statistics}

    8f74331d2f634abeb23ef138bdd46f5b.png

    4b7a10b2bb614bdfa1ec24e666137db5.png

     

    创建密集矩阵

    val observations=sc.parallelize(Seq(Vectors.dense(1.0,10.0,100.0),Vectors.dense(2.0,20.0,200.0),Vectors.dense(3.0,30.0,300.0)))

    ec6cf353c1af45edb38d9598ea610988.png 

     

    计算列摘要统计信息

    val sum:MultivariateStatisticalSummary=Statistics.colStats(observations)

    e7a271ba3ac9460692baca3767e2a220.png

     

    打印平均值

    60847f34b0714d39a33ff0bd09dd74d0.png

     

    打印方差

    b03caa77482e4e16886fbaf58135aaf2.png

     

    打印每列非零元素的个数

    729508676c434166a25e3c9fb4d57184.png

     

    二.相关统计

    相关系数是反应两个变量之间相关关系密切程度的统计指标,这也是统计学中常用的统计方式,MLlib提供了计算多个序列之间相关统计的方法,目前MLlib默认采用皮尔森相关系数计算方法。皮尔森相关系数也称皮尔森积矩相关系数,它是一种线性相关系数。

     

    导包

    d75f944e28b74b969cfb62c48591fb17.png

     

    创建序列

    val seriesX:RDD[Double]=sc.parallelize(Array(1,2,3,3,5))

    val seriesY:RDD[Double]=sc.parallelize(Array(11,22,33,33,555))

    01a89d0c970e48f2bd528cfb764eb42c.png

     

    计算seX和seY的相关系数

    val correlation:Double = Statistics.corr(seriesX,seriesY,"pearson")

    ee98d14e3bbc475389d0d87859980489.png

     

    打印数据

    println(s"Correlation is : $correlation")

    ee746c0471bf46458f59fda4ee467d01.png

     

    利用皮尔森方法计算密集矩阵相关系数

    val data:RDD[Vector]=sc.parallelize(Seq(Vectors.dense(1.0,10.0,100.0),Vectors.dense(2.0,20.0,200.0),Vectors.dense(5.0,33.0,366.0)))

    218aab3106804ddebf1d98df5a5dae34.png 

     

    val corMx:Matrix = Statistics.corr(data,"pearson")

    e8800dd8c061472c8278ae8987804110.png

     

    打印数据

    println(corMx.toString)

    8a54f2ae884d49a2820374913840d0f6.png

     

    三.分层抽样

    分层抽样法也叫类型抽样法,它是先将总体样本按照某种特征分为若干次级(层),如何再从每一层内进行独立取样,组成一个样本的统计学计算方法。

     

    创建键值对RDD

    val data=sc.parallelize(Seq((1,'a'),(1,'b'),(2,'c'),(2,'d'),(2,'e'),(3,'f')))

    efe8e36f3d1646ffb2b8c56067d70cb2.png

     

    设定抽样格式

    val fra = Map(1->0.1,2->0.6,3->0.3)

    ebe9cddb4e7d4f7fba6d343835bdb119.png

     

    从每层获取抽样样本

    val app=data.sampleByKey(withReplacement=false,fractions=fra)

    08b5ceb5a35a4676837d3329588ac00d.png

     

    从每层获取精确样本

    0eeb2be2dfee4b1ba17b0c6bb32cdcea.png 

     

    打印抽样样本

    c6b75aa86afb4389908d41e2bcd4641c.png

     

    打印精确样本

     

    49cdef29457147078e3ef718b02237c7.png

     

     

  • 相关阅读:
    【Java 进阶篇】JDBC工具类详解
    安装CUDA、anaconda、pytorch
    VS2019 C#中文控制台显示为问号
    PCB板各层定义及解释
    单链表
    通过maven基于springboot项目构建脚手架archetype
    MySQL的二进制安装
    数字孪生技术在光网络中的应用与问题
    WebRTC音频预处理单元APM的整体编译及使用
    代码Bug太多?给新人Code Review头都大了?快来试试SpotBugs
  • 原文地址:https://blog.csdn.net/m0_57781407/article/details/127457260