MLlib:Machine Learning Library。主要内容包括:

  • 数据类型
  • 统计工具
    • summary statistics
    • correlations
    • stratified sampling
    • hypothesis testing
    • random data generation
  • 分类和回归
    • 线性模型(SVM,逻辑回归,线性回归)
    • 朴素贝叶斯
    • 决策树
    • ensembles of trees(随机森林和Gradient-Boosted Trees)
    • isotonic regression
  • 协同过滤
    • ALS(alternating least squares)     
  • 聚类
    • k-means
    • 高斯混合模型
    • power iteration clustering(PIC)
    • LDA(latent Dirichlet allocation)
    • 流式k-means 
  • 降维
    • SVD
    • PCA
  • 特征提取和转换
  • Frequent pattern mining
    • FP-growth
  • 优化  
    • stochastic gradient descent
    • limited-memory BFGS (L-BFGS)

    

I.数据类型

MLlib的数据类型主要是local vectors和local matrices,潜在的代数操作由Breeze和jblas提供。

1.local vector 有int型和double型,下标从0开始,分为dense和sparse 两种。

Local vector的基本类型是Vector,包括:DenseVector和SparseVector。

import org.apache.spark.mllib.linalg.{Vector, Vectors}    

// Create a dense vector (1.0, 0.0, 3.0).
val dv: Vector = Vectors.dense(1.0, 0.0, 3.0)
// Create a sparse vector (1.0, 0.0, 3.0) by specifying its indices and values corresponding to nonzero entries.
val sv1: Vector = Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0))
// Create a sparse vector (1.0, 0.0, 3.0) by specifying its nonzero entries.
val sv2: Vector = Vectors.sparse(3, Seq((0, 1.0), (2, 3.0)))

Scala imports scala.collection.immutable.Vector by default, so you have to import org.apache.spark.mllib.linalg.Vector explicitly to use MLlib’s Vector.

  • MLlib中一个监督学习的训练样本被称为“labeled point”。
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint // Create a labeled point with a positive label and a dense feature vector.
val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0)) // Create a labeled point with a negative label and a sparse feature vector.
val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)))
  • MLlib supports reading training examples stored in LIBSVM format, which is the default format used by LIBSVM and LIBLINEAR.
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.rdd.RDD val examples: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")

2.local matrix

A local matrix has integer-typed row and column indices and double-typed values, stored on a single machine. MLlib supports dense matrices, whose entry values are stored in a single double array in column major.

import org.apache.spark.mllib.linalg.{Matrix, Matrices}

// Create a dense matrix ((1.0, 2.0), (3.0, 4.0), (5.0, 6.0))
val dm: Matrix = Matrices.dense(3, 2, Array(1.0, 3.0, 5.0, 2.0, 4.0, 6.0))
  • A distributed matrix has long-typed row and column indices and double-typed values, stored distributively in one or more RDDs.It is very important to choose the right format to store large and distributed matrices.  A RowMatrix is a row-oriented distributed matrix without meaningful row indices, e.g., a collection of feature vectors. It is backed by an RDD of its rows, where each row is a local vector. We assume that the number of columns is not huge. An IndexedRowMatrix is similar to a RowMatrix but with row indices, which can be used for identifying rows and executing joins. A CoordinateMatrix is a distributed matrix stored in coordinate list (COO) format, backed by an RDD of its entries.
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.mllib.linalg.distributed.RowMatrix val rows: RDD[Vector] = ... // an RDD of local vectors
// Create a RowMatrix from an RDD[Vector].
val mat: RowMatrix = new RowMatrix(rows) // Get its size.
val m = mat.numRows()
val n = mat.numCols() import org.apache.spark.mllib.linalg.distributed.{IndexedRow, IndexedRowMatrix, RowMatrix} val rows: RDD[IndexedRow] = ... // an RDD of indexed rows
// Create an IndexedRowMatrix from an RDD[IndexedRow].
val mat: IndexedRowMatrix = new IndexedRowMatrix(rows)
// Drop its row indices.
val rowMat: RowMatrix = mat.toRowMatrix() import org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, MatrixEntry} val entries: RDD[MatrixEntry] = ... // an RDD of matrix entries
// Create a CoordinateMatrix from an RDD[MatrixEntry].
val mat: CoordinateMatrix = new CoordinateMatrix(entries)// Convert it to an IndexRowMatrix whose rows are sparse vectors.
val indexedRowMatrix = mat.toIndexedRowMatrix()
  • BlockMatrix is a distributed matrix backed by an RDD of MatrixBlocks, where a MatrixBlock is a tuple of ((Int, Int), Matrix), where the (Int, Int) is the index of the block, and Matrix is the sub-matrix at the given index. BlockMatrix supports methods such as add and multiply with another BlockMatrix.A BlockMatrix can be most easily created from an IndexedRowMatrix or CoordinateMatrix by calling toBlockMatrix.
import org.apache.spark.mllib.linalg.distributed.{BlockMatrix, CoordinateMatrix, MatrixEntry}

val entries: RDD[MatrixEntry] = ... // an RDD of (i, j, v) matrix entries
// Create a CoordinateMatrix from an RDD[MatrixEntry].
val coordMat: CoordinateMatrix = new CoordinateMatrix(entries)
// Transform the CoordinateMatrix to a BlockMatrix
val matA: BlockMatrix = coordMat.toBlockMatrix().cache() // Validate whether the BlockMatrix is set up properly. Throws an Exception when it is not valid.
// Nothing happens if it is valid.
matA.validate() // Calculate A^T A.
val ata = matA.transpose.multiply(matA)

用到什么model先看介绍,再查API doc:  https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.package

最新文章

  1. 第四篇 基于.net搭建热插拔式web框架(RazorEngine实现)
  2. angularJs 指令的理解
  3. JavaScript框架设计(四) 字符串选择器(选择器模块结束)
  4. 本地推送UILocalNotification
  5. DateFormatUtil.java
  6. 亚马逊如何变成 SOA(面向服务的架构)?
  7. ADF_Data Binding系列2_使用URL Service Data Control
  8. C# 利用TextBox的Text属性实现换行加字符 "\r\n"
  9. 225 Implement Stack using Queues(用队列实现栈Medium)
  10. zoj Grouping(强连通+缩点+关键路径)
  11. [UWP]分享一个基于HSV色轮的调色板应用
  12. nbtstat
  13. GP工具环境变量名称列表
  14. shardingsphere多数据源(springboot + mybatis+shardingsphere+druid)
  15. querySelectorAll选择器的js实现
  16. Django 学习第五天——自定义过滤器及标签
  17. 老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件
  18. leetcode 最后一个单词的长度
  19. win10想说爱你不容易——安装.net3.5也是一个坑(已有完美解决方法)
  20. ubuntu 12.04配置mac的Lion主题的风格

热门文章

  1. CentOS 下通过命令登录Mysql
  2. Axure:从单一评价方式到用户自由选择
  3. CSU-1803: 2016 ,同余定理!
  4. ansible部署
  5. UITableView点击切换状态分析
  6. request response session的常用方法
  7. Security arrangements for extended USB protocol stack of a USB host system
  8. 标准C程序设计七---21
  9. SPOJ 1479 +SPOJ 666 无向树最小点覆盖 ,第二题要方案数,树形dp
  10. BZOJ 4810 [Ynoi2017]由乃的玉米田 (莫队 + bitset)