学习MLlib的基本数据类型的种类与用法。
如何组合利用这些基本数据类型去进行一些统计量的计算 这是数据分析和挖掘的基本内容
MLlib基本数据类型
Local vector 本地向量集:
分为两种: 稀疏型数据集spares 密集型数据集dense 只支持整型数据和浮点型数据 因为MLlib的目的就是进行数值计算。
Labeled point 向量标签:
Labeled point是建立向量标签的静态类,Features用于显示打印标记点所代表的数据内容 ,Label用于显示标记数
Local matrix 本地矩阵:
matries.dense方法
Distributed matrix 分布式矩阵:
采用分布式矩阵进行存储往往是数据量非常大的,提供了四种分布式矩阵存储形式 均由支持长整型的行列数和双精度浮点型的数据内容组成,此处介绍最常用的3种
行矩阵
带有行索引的行矩阵
坐标矩阵
块矩阵
行矩阵 RowMatrix:
可以理解为行矩阵就是一个巨大的特征向量的集合, 每一行就是一个具有相同格式的特征向量数据
带有索引的行矩阵 IndexedRowMatrix:
为了方便在系统的调试的过程中对行矩阵的内容进行观察和显示 引入 带有行索引的行矩阵
坐标矩阵 CoordinateMatrix :
坐标矩阵是一种带有坐标标记的矩阵,其中的每一个具体数据都有一组坐标进行标记 一般用于数据比较多且数据较为分散的情形
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.linalg.{Matrix, Matrices}
import org.apache.spark.mllib.linalg.distributed.RowMatrix
import org.apache.spark.mllib.linalg.distributed.{IndexedRow, RowMatrix, IndexedRowMatrix}
import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry}
object MLlibDataStructure {
def main(args: Array[String]) {
val conf = new SparkConf().setMaster("local").setAppName("MLlibDataStructure") //创建环境变量
val sc = new SparkContext(conf) //创建环境变量实例
// val arr = sc.parallelize(Array("abc","b","c","d","e","f")) //创建数据集
// val result = arr.aggregate("")((value,word) => value + word, _ + _) //调用计算方法
// println(result) //打印结果
// val vd: Vector = Vectors.dense(2, 0, 6) //建立密集向量
// println(vd(2)) //打印稀疏向量第3个值
// val vs: Vector = Vectors.sparse(4, Array(0,1,2,3), Array(9,5,2,7)) //建立稀疏向量
// println(vs(2)) //打印稀疏向量第3个值
// val vd: Vector = Vectors.dense(2, 0, 6) //建立密集向量
// val pos = LabeledPoint(1, vd) //对密集向量建立标记点
// println(pos.features) //打印标记点内容数据
// println(pos.label) //打印既定标记
// val vs: Vector = Vectors.sparse(4, Array(0,1,2,3), Array(9,5,2,7)) //建立稀疏向量
// val neg = LabeledPoint(2, vs) //对稀疏向量建立标记点
// println(neg.features) //打印标记点内容数据
// println(neg.label) //打印既定标记
// val mx = Matrices.dense(2, 3, Array(1,2,3,4,5,6)) //创建一个本地矩阵
// println(mx) //打印结果
// val rdd = sc.textFile("/root/RowMatrix.txt") //创建RDD文件路径
// .map(_.split(' ') //按“ ”分割
// .map(_.toDouble)) //转成Double类型
// .map(line => Vectors.dense(line)) //转成Vector格式
// val rm = new RowMatrix(rdd) //读入行矩阵
// println(rm.numRows()) //打印列数
// println(rm.numCols()) //打印行数
// val rdd = sc.textFile("/root/RowMatrix.txt") //创建RDD文件路径
// .map(_.split(' ') //按“ ”分割
// .map(_.toDouble)) //转成Double类型
// .map(line => Vectors.dense(line)) //转化成向量存储
// .map((vd) => new IndexedRow(vd.size,vd)) //转化格式
// val irm = new IndexedRowMatrix(rdd) //建立索引行矩阵实例
// println(irm.getClass) //打印类型
// println(irm.rows.foreach(println)) //打印内容数据
val rdd = sc.textFile("/root/RowMatrix.txt") //创建RDD文件路径
.map(_.split(' ') //按“ ”分割
.map(_.toDouble)) //转成Double类型
.map(vue => (vue(0).toLong,vue(1).toLong,vue(2))) //转化成坐标格式
.map(vue2 => new MatrixEntry(vue2 _1,vue2 _2,vue2 _3)) //转化成坐标矩阵格式
val crm = new CoordinateMatrix(rdd) //实例化坐标矩阵
println(crm.entries.foreach(println)) //打印数据
}
}
数理统计:研究如何有效地收集、整理和分析受随机因素影响的数据,并对所考虑的问题作出推断或预测。
基本统计量 在MLlib中,统计量的计算主要用到Statistics类库
colStats 以列为基础计算统计量:
统计量基本数据
count Max Mean NormL1 NormL2 numNonzeros variance
距离计算
欧几里得距离 L2范数 曼哈顿距离 L1范数
chiSqTest 对数据集内的数据进行皮尔逊距离计算
两组数组相关系数计算:反应两变量间线性相关关系的统计指标称为相关系数。对两组数据间的相似程度进行定量化分析。常用的是皮尔逊相关系数(MLlib中默认)。
corr 对两个数据集进行相关系数计算
分层抽样
假设检验
卡方检验
显著性差异指标
随机数
RandomRDDs