Spark 机器学习 概括统计 summary statistics [摘要统计]

Posted 辉常努腻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark 机器学习 概括统计 summary statistics [摘要统计]相关的知识,希望对你有一定的参考价值。

概括统计

概括统计 summary statistics [摘要统计]

单词

  • linalg 分开
  • linear + algebra: 线性代数

对于RDD[Vector]类型的变量,
Spark MLlib提供了一种叫colStats()的统计方法,调用该方法会返回一个类型为MultivariateStatisticalSummary的实例。
通过这个实例看,我们可以获得每一列的最大值,最小值,均值、方差、总数等。具体操作如下所示:

读取要分析的数据,把数据转变成RDD[Vector]类型:

上面我们就把莺尾花的四个属性,即萼片长度,萼片宽度,花瓣长度和花瓣宽度存储在 flower 中,类型为 RDD[linalg.Vector] 。

然后,我们调用colStats()方法,得到一个MultivariateStatisticalSummary类型的变量:

结果
  • 样本大小
  • 样本均值向量
  • 样本方差向量 应该返回一个零向量,如果样本大小是1
  • 每列的最大值
  • 每列的最小值
  • 每列的L1范数
  • 每一列的欧几里得大小 欧几里德距离
  • 每列中非零元素的数目 (包括显式显示的零值)
完整代码
package basicstatistics

import org.apache.log4j.Level, Logger
import org.apache.spark.SparkContext
import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.MultivariateStatisticalSummary, Statistics
import org.apache.spark.rdd.RDD

/**
 * 概括统计  summary statistics [摘要统计]
 *
 * 单词
 *  linalg 分开
 *  linear + algebra: 线性代数
 *
 */
object SummaryStatistics 
  def main(args: Array[String]): Unit = 
    Logger.getLogger("org").setLevel(Level.ERROR)
    val sc = new SparkContext("local[*]", "")

    val observations: RDD[linalg.Vector] = 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)
      )
    )
    /**
     * 对于RDD[Vector]类型的变量,
     *    Spark MLlib提供了一种叫colStats()的统计方法,调用该方法会返回一个类型为MultivariateStatisticalSummary的实例。
     * 通过这个实例看,我们可以获得每一列的最大值,最小值,均值、方差、总数等。具体操作如下所示:
     */
    val summary: MultivariateStatisticalSummary = Statistics.colStats(observations)
    println("包含每列平均值的稠密向量\\n"+summary.mean)  // a dense vector containing the mean value for each column  包含每列平均值的稠密向量
    println("列方差\\n"+summary.variance)  // column-wise variance 列方差
    println("每列中的非零数\\n"+summary.numNonzeros)  // number of nonzeros in each colum  每列中的非零数

    //读取要分析的数据,把数据转变成RDD[Vector]类型:
    val flower: RDD[linalg.Vector] = 
      //读取本地数据
      sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
        //转换数组
      .map((_: String).split(","))
        //转换RDD Vector
      .map((item: Array[String]) => 
        //稠密向量 double
        val strings: Array[String] = item.filter(
          item =>
            if (!item.equals("Iris-setosa") && !item.equals("Iris-versicolor") && !item.equals("Iris-virginica")  )  true else  false
          
        )
        Vectors.dense(strings.map(_.toDouble))
      )
    
    //上面我们就把莺尾花的四个属性,即萼片长度,萼片宽度,花瓣长度和花瓣宽度存储在 flower 中,类型为 RDD[linalg.Vector] 。
    // 然后,我们调用colStats()方法,得到一个MultivariateStatisticalSummary类型的变量:

    val summaryFlower: MultivariateStatisticalSummary = Statistics.colStats(flower)

    println( "  样本大小  "+summaryFlower.count )
    println( "  样本均值向量  "+summaryFlower.mean )
    println( "  样本方差向量。应该返回一个零向量,如果样本大小是1  "+summaryFlower.variance )
    println( "  每列的最大值  "+summaryFlower.max )
    println( "  每列的最小值  "+summaryFlower.min )
    println( "  每列的L1范数  "+summaryFlower.normL1 )
    println( "  每一列的欧几里得大小  欧几里德距离   "+summaryFlower.normL2 )
    println( "  每列中非零元素的数目(包括显式显示的零值)  "+summaryFlower.numNonzeros )


  


 包含每列平均值的稠密向量
[2.0,20.0,200.0]
列方差
[1.0,100.0,10000.0]
每列中的非零数
[3.0,3.0,3.0]
  样本大小  150
  样本均值向量  [5.843333333333332,3.0540000000000003,3.7586666666666666,1.1986666666666668]
  样本方差向量。应该返回一个零向量,如果样本大小是1  [0.6856935123042509,0.18800402684563744,3.113179418344516,0.5824143176733783]
  每列的最大值  [7.9,4.4,6.9,2.5]
  每列的最小值  [4.3,2.0,1.0,0.1]
  每列的L1范数  [876.4999999999998,458.1000000000001,563.8000000000002,179.79999999999995]
  每一列的欧几里得大小  欧几里德距离   [72.27620631992245,37.77631533117014,50.82322303829225,17.38677658451963]
  每列中非零元素的数目(包括显式显示的零值)  [150.0,150.0,150.0,150.0]

以上是关于Spark 机器学习 概括统计 summary statistics [摘要统计]的主要内容,如果未能解决你的问题,请参考以下文章

Spark MLlib 机器学习

Spark MLlib 机器学习

spark MLLib的基础统计部分学习

Spark MLib 基本统计汇总

Spark机器学习解析下集

掌握Spark机器学习库-07-回归算法原理