1:Spark ML与Spark MLLIB区别?

Spark MLlib是面向RDD数据抽象的编程工具类库,现在已经逐渐不再被Spark团队支持,逐渐转向Spark ML库,Spark ML是面向DataFrame编程的。

2:Spark ML与Spark MLLIB中矩阵、向量定义区别?

这两个类库中的矩阵与向量对比可以发现几乎都是一样的,就是为了以后维护Spark ML方便。

3:Spark ML中稀疏向量与稠密向量区别?

稠密向量存储:底层存储使用完成的Double Array存储。

稀疏矩阵:底层存储非0的元素值以及该值的index以及向量的size。(也就是三维信息,存储效率高)

4:稠密向量示例:

 import org.apache.spark.ml.linalg.{DenseVector => MLDenseVector}
val mlDv = new MLDenseVector(Array[Double](1, 1, 1, 1, 1)) println(mlDv.argmax) //压缩矩阵,底层根据0的个数进行判断是稀疏存储还是稠密存储。稀疏存储就是存储非0的元素值以及索引以及向量的大小(也就是三维)
println(mlDv.compressed)
val copy = mlDv.copy //深拷贝 copy.foreachActive {
(x, y) =>
println("index = " + x + " , value = " + y)
} //Number of active entries. An "active entry" is an element which is explicitly(明确地) stored,
// regardless of its value. Note that inactive entries have value 0.
println(copy.numActives)
println(copy.numNonzeros)
println(copy.size)
println(copy.values)
println(copy.toSparse)

5:稀疏矩阵

 import org.apache.spark.ml.linalg.{SparseVector => MLSparseVector}
val mlDv = new MLDenseVector(Array[Double](1, 0, 0, 0, 0))
println(mlDv.toSparse) //(5,[0],[1.0])
//SparseVector构造器:向量维度,非零索引,非零索引对应的值
val mlSv = new MLSparseVector(5, Array[Int](0, 3), Array[Double](1, 2))
println(mlSv) //(5,[0,3],[1.0,2.0])
println(mlSv.toDense) //[1.0,0.0,0.0,2.0,0.0]
println(mlSv.indices.toBuffer)//返回稀疏向量的索引

对于mllib下的向量可以使用asML直接转成ML中的向量

  //稀疏矩阵
import org.apache.spark.mllib.linalg.{DenseVector => MLLIBDenseVector}
val mlDv = new MLLIBDenseVector(Array[Double](1, 0, 0, 0, 0))
mlDv.asML //直接转成spark ml的向量

6:ML中矩阵

import org.apache.spark.ml.linalg.{DenseMatrix => MLDenseMatrix}
import org.apache.spark.ml.linalg.{SparseMatrix => MLSparseMatrix} // 默认以列为主的稠密矩阵。
val notTranspose = new MLDenseMatrix(3, 2, Array[Double](1, 3, 5, 2, 4, 6))
// 第三个参数为是否允许转至,默认不允许,如果允许则按行存储
val mlDMtx = new MLDenseMatrix(3, 2, Array[Double](1, 2, 3, 4, 5, 6), true) println(notTranspose) println("-------------------------------------------------")
println(notTranspose.isTransposed)
println(notTranspose.transpose)
println(mlDMtx.isTransposed)
println("-------------------------------------------------")
println(mlDMtx)
println(mlDMtx.compressed)
println("-------------------------------------------------")
//转为按照列存储的稠密矩阵
println(mlDMtx.toDenseColMajor) //转为按照行存储的稠密矩阵
println(notTranspose.toDenseRowMajor)

7稀疏矩阵:

  println("--------------------MLSparseMatrix-----------------------------")
// numRows - number of rows
// numCols - number of columns
// colPtrs - the index corresponding to the start of a new column
// rowIndices - the row index of the entry. They must be in strictly increasing order for each column
// values - non-zero matrix entries in column major
// (0, 2, 1, 0, 1, 2)
// (0, 2, 3, 6)=> (2-0,3-2,6-3 )得到每一列非零元素个数
// (1.0, 2.0, 3.0, 4.0, 5.0, 6.0) val mlSM = new MLSparseMatrix(3, 3, Array[Int](0, 2, 3, 6), Array[Int](0, 2, 1, 0, 1, 2), Array[Double](1.0, 2.0, 3.0, 4.0, 5.0, 6.0))
println(mlSM.toDense)

Spark机器学习中ml和mllib中矩阵、向量的更多相关文章

  1. Spark中ml和mllib的区别

    转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...

  2. Spark机器学习(8):LDA主题模型算法

    1. LDA基础知识 LDA(Latent Dirichlet Allocation)是一种主题模型.LDA一个三层贝叶斯概率模型,包含词.主题和文档三层结构. LDA是一个生成模型,可以用来生成一篇 ...

  3. 转载:Databricks孟祥瑞:ALS 在 Spark MLlib 中的实现

    Databricks孟祥瑞:ALS 在 Spark MLlib 中的实现 发表于2015-05-07 21:58| 10255次阅读| 来源<程序员>电子刊| 9 条评论| 作者孟祥瑞 大 ...

  4. Spark MLlib中KMeans聚类算法的解析和应用

    聚类算法是机器学习中的一种无监督学习算法,它在数据科学领域应用场景很广泛,比如基于用户购买行为.兴趣等来构建推荐系统. 核心思想可以理解为,在给定的数据集中(数据集中的每个元素有可被观察的n个属性), ...

  5. Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API

    Spark机器学习MLlib系列1(for python)--数据类型,向量,分布式矩阵,API 关键词:Local vector,Labeled point,Local matrix,Distrib ...

  6. Spark MLlib中的OneHot哑变量实践

    在机器学习中,线性回归和逻辑回归算是最基础入门的算法,很多书籍都把他们作为第一个入门算法进行介绍.除了本身的公式之外,逻辑回归和线性回归还有一些必须要了解的内容.一个很常用的知识点就是虚拟变量(也叫做 ...

  7. Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现

    欢迎转载,转载请注明出处,徽沪一郎. 概要 本文就拟牛顿法L-BFGS的由来做一个简要的回顾,然后就其在spark mllib中的实现进行源码走读. 拟牛顿法 数学原理 代码实现 L-BFGS算法中使 ...

  8. 机器学习中的数学-强大的矩阵奇异值分解(SVD)及其应用

    版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...

  9. MLlib 中的聚类和分类

    聚类和分类是机器学习中两个常用的算法,聚类将数据分开为不同的集合,分类对新数据进行类别预测,下面将就两类算法进行介绍. 1. 聚类和分类(1)什么是聚类 聚类( Clustering)指将数据对象分组 ...

随机推荐

  1. 基于xlua和mvvm的unity框架

    1.框架简介 这两天在Github上发现了xlua的作者车雄生前辈开源的一个框架—XUUI,于是下载下来学习了一下.XUUI基于xlua,又借鉴了mvvm的设计概念.xlua是目前很火的unity热更 ...

  2. PHP与MySQL的关系?

    1).mysqli和PDO 属于MySQL的拓展包extension 2)my.ini开启拓展命令 extension=php_mysqli.dll extension=php_pdo_mysql.d ...

  3. noip之后的一些感受

    你经历过绝望吗,那种希望完全破碎,眼前看不到光亮,不知道下一步怎么走,不知道接下来应该如何生活的那种绝望? 我经历过. 2018.11.12 下午 秦皇岛到石家庄的高铁上 听着同学兴高采烈的讨论,自己 ...

  4. git commit之后,想撤销commit

    原文 写完代码后,我们一般这样 git add . //添加所有文件 git commit -m "本功能全部完成" 执行完commit后,想撤回commit,怎么办? 这样凉拌: ...

  5. MVC分部视图@Html.Partial

    加载分布视图的方式: //1.以视图名使用当前文件夹下的视图(如果没有找到,则搜索 Shared 文件夹) @Html.Partial("_test") //加载对应文件 /Vie ...

  6. Asp.net中GridView详解《转》

    ASP.NET服务器控件GridView 1         ASP.NET 服务器控件GridView使用 本教程不介绍服务器端控件的呈现,事件处理,状态等理论知识,只介绍服务器端控件的使用操作,如 ...

  7. C# 分支语句 练习题(中间变量,随机数)

    练习一 请输入年份:”(1-9999),请输入月份:”(1-12),请输入日期(要判断大小月,判断闰年),判断输入的时间日期是否正确. 计算输入的时间是当前这一年的第几天. bool dateISOK ...

  8. [PHP] 数据结构-链表创建-插入-删除-查找的PHP实现

    链表获取元素1.声明结点p指向链表第一个结点,j初始化1开始2.j<i,p指向下一结点,因为此时p是指向的p的next,因此不需要等于3.如果到末尾了,p还为null,就是没有查找到 插入元素1 ...

  9. 性能监控(5)–JAVA下的jstat命令

    jstat的基本语法为 Usage: jstat -help|-options jstat -<option> [-t] [-h<lines>] <vmid> [& ...

  10. Matlab 如何输入矩阵

    A=[1 2 3;4 5 6;7 8 9],每行之间用分号隔开 也可以用循环控制输入 n=input('请输入矩阵阶数:') for i=1:n     for j=1:n         a(i,j ...