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

简介: 概括统计 summary statistics [摘要统计]单词linalg 分开linear + algebra: 线性代数

概括统计 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]
目录
相关文章
|
7月前
|
机器学习/深度学习 数据采集 分布式计算
【机器学习】Spark ML 对数据进行规范化预处理 StandardScaler 与向量拆分
标准化Scaler是数据预处理技术,用于将特征值映射到均值0、方差1的标准正态分布,以消除不同尺度特征的影响,提升模型稳定性和精度。Spark ML中的StandardScaler实现此功能,通过`.setInputCol`、`.setOutputCol`等方法配置并应用到DataFrame数据。示例展示了如何在Spark中使用StandardScaler进行数据规范化,包括创建SparkSession,构建DataFrame,使用VectorAssembler和StandardScaler,以及将向量拆分为列。规范化有助于降低特征重要性,提高模型训练速度和计算效率。
150 6
|
7月前
|
机器学习/深度学习 分布式计算 算法
【机器学习】Spark ML 对数据特征进行 One-Hot 编码
One-Hot 编码是机器学习中将离散特征转换为数值表示的方法,每个取值映射为一个二进制向量,常用于避免特征间大小关系影响模型。Spark ML 提供 OneHotEncoder 进行编码,输入输出列可通过 `inputCol` 和 `outputCol` 参数设置。在示例中,先用 StringIndexer 对类别特征编码,再用 OneHotEncoder 转换,最后展示编码结果。注意 One-Hot 编码可能导致高维问题,可结合实际情况选择编码方式。
125 6
|
6月前
|
机器学习/深度学习 分布式计算 API
技术好文:Spark机器学习笔记一
技术好文:Spark机器学习笔记一
48 0
|
7月前
|
机器学习/深度学习 人工智能 数据挖掘
【机器学习】贝叶斯统计中,“先验概率”和“后验概率”的区别?
【5月更文挑战第11天】【机器学习】贝叶斯统计中,“先验概率”和“后验概率”的区别?
|
6月前
|
分布式计算 定位技术 Scala
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
使用spark基于出租车GPS数据实现车辆数量统计以及北京每个城区的车辆位置点数分析
130 0
|
7月前
|
机器学习/深度学习 分布式计算 算法
使用Spark进行机器学习
【5月更文挑战第2天】使用Spark进行机器学习
91 2
|
7月前
|
机器学习/深度学习
【机器学习】贝叶斯统计中,“似然”和“后验概率”有什么区别?
【5月更文挑战第11天】【机器学习】贝叶斯统计中,“似然”和“后验概率”有什么区别?
|
7月前
|
机器学习/深度学习 分布式计算 算法
Spark MLlib简介与机器学习流程
Spark MLlib简介与机器学习流程
|
1月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
102 4
|
10天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
28 2

热门文章

最新文章