MLlib基本概念2018.4.27

学习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数理统计基本概念

数理统计:研究如何有效地收集、整理和分析受随机因素影响的数据,并对所考虑的问题作出推断或预测。


基本统计量  在MLlib中,统计量的计算主要用到Statistics类库

colStats  以为基础计算统计量:

统计量基本数据

count    Max    Mean   NormL1   NormL2   numNonzeros   variance

距离计算

欧几里得距离 L2范数     曼哈顿距离  L1范数


chiSqTest  对数据集内的数据进行皮尔逊距离计算

两组数组相关系数计算:反应两变量间线性相关关系的统计指标称为相关系数。对两组数据间的相似程度进行定量化分析。常用的是皮尔逊相关系数(MLlib中默认)。

corr 对两个数据集进行相关系数计算


分层抽样


假设检验

卡方检验

显著性差异指标  


随机数

RandomRDDs



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值