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 [摘要统计]的主要内容,如果未能解决你的问题,请参考以下文章