MLllib介绍和使用

算法库和数据源

MLllib目前分为两个代码包:

spark.mllib 包含基于RDD的原始算法API。
spark.ml 则提供了基于DataFrames 高层次的API,可以用来构建机器学习管道。


受限制于JVM的先天不足,基于Java的矩阵运算速度远远比不上本地fortran和C代码实现的矩阵库,比如BLAS,Lapack这种,
而MLlib则采用了Scala实现的Breeze去调用Netlib-java,而Netlb-java再去调用本地的BLAS和Lapack,以获得接近本地Native code运算矩阵的效果
Netlib-java其Jar包编译时用的gfortran进行编译,如果在运行时环境中这些原生库不可用,你将会收到一条警告,而后spark会备用策略

底层组件简要介绍:

BLAS/LAPACK层:LAPACK是用Fortran编写的算法库,顾名思义,Linear Algebra PACKage,是为了解决通用的线性代数问题的。
另外必须要提的算法包是BLAS(BasicLinearAlgebraSubprograms),其实LAPACK底层是使用了BLAS库的。
不少计算机厂商都提供了针对不同处理器进行了优化的BLAS/LAPACK算法包。
Netlib-java     是一个对底层BLAS,LAPACK封装的Java接口层。(官网为:https://github.com/fommil/netlib-java/)
Breeze          是一个Scala写的数值处理库,提供向量、矩阵运算等API。(官网为:https://github.com/scalanlp/breeze)

MLlib底层使用到了Scala书写的线性代数库Breeze,Breeze从Spark1.0开始就已近成为Spark的一部分了。
Breeze底层依赖于netlib-java库 优化的数值处理。
netlib-java底层依赖原生的Fortran routines

库依赖:

由于许可证(license)问题,Spark未将netlib-java相关调用本地库的代码放入到预编译的Spark jar包中。
如果在运行时环境中这些原生库不可用,你将会收到一条警告,而后spark会使用纯JVM实现来替代之。
MLlib底层使用了依赖Fortran routines的netlib-java。所以,当用户使用时需要在节点预安装gfortran runtime library
gfortran runtime library(下载地址:https://github.com/mikiobraun/jblas/wiki/Missing-Libraries)

如果程序中需要使用netlib-java的库,用户需要在项目中引入com.github.fommil.netlib:all:1.1.2的依赖或者参照指南
(网址为:https://github.com/fommil/netlib-java/blob/master/README.md#machine-optimised-system-libraries)来建立用户自己的项目。

如果用户需要使用python接口,则需要1.4或者更高版本的NumPy(注意:MLlib源码中注释有Experimental/DeveloperApi的API在未来的发布版本中可能会进行调整和改变,官方会在不同版本发布时提供迁移指南)。

使用

Mlib的使用
    Maven

    import org.apache.spark.mllib.stat.Statistics

开发:

Breeze库提供了Vector/Matrix的实现以及
相应计算的接口(Linalg)。
MLlib里面同时也提供了VectorLinalg等的实现
在使用Breeze 库时,需要导入相关包:
import breeze.linalg._
import breeze.numerics._

数据类型:

本地向量和矩阵存储、分布式的矩阵存储
    Local vector
    Labeled point
    Local matrix
    Distributed matrix

    本地向量 Local vector
        DenseVector  稠密向量 - 底层实现:一个double型的数组存储向量每个元素的值 
        SparseVector 稀疏向量 - 底层实现:连个并行的数组,一个数组存储向量的序号,一个存储向量元素值
    本地矩阵基本类local Matrix 
        - DenseMatrix 
        - SparseMatrix

    标记向量(Labeled point)

    分布式矩阵Distributed matrix
        RowMatrix           行矩阵
        IndexedRowMatrix    行索引矩阵
        CoordinateMatrix    坐标矩阵
        BlockMatrix         块矩阵

向量与向量
import breeze.linalg.DenseVector

矩阵与矩阵
import breeze.linalg.DenseMatrix

矩阵或向量与数值
import breeze.linalg.{DenseMatrix, DenseVector}

函数
import breeze.linalg.{Axis, DenseMatrix, sum}
import breeze.stats.mean
import breeze.stats.{stddev, variance}
import breeze.numerics.{pow, sqrt}
import breeze.numerics.{exp, log, log10, log1p}

下一步:

使用轮子---基于应用场景,使用算法
基于基础的矩阵运算(矩阵、向量的乘、加等),实现一些更高级的应用,进而打造针对特定场景的算法--改造轮子

数据源

政府&机构数据

北京市政务数据资源网  http://www.bjdata.gov.cn/
上海市政府数据服务网  http://www.datashanghai.gov.cn/home!toHomePage.action
广州市政府数据统一开放平台   http://www.datagz.gov.cn/
深圳---正在建设中
美国政府开源数据库:  http://www.data.gov/
英国政府开源数据库:  http://data.gov.uk/
世界银行数据库:        http://www.worldbank.org/
美国气候数据库:        http://www.ncdc.noaa.gov/
美国交通部数据库:       http://www.rita.dot.gov/bts/data_and_statistics/index.html

开源社区数据集

Machine Learning Data:  http://mldata.org/repository/data/
UCI:                    http://archive.ics.uci.edu/ml/
Co-Clustering:          https://coclustering.hds.utc.fr/doku.php?id=en:start
R Dataset:              http://www.stats4stem.org/data-sets.html
Google开源数据平台:   http://www.reddit.com/r/bigquery/wiki/datasets

商业数据平台

数据堂:              http://datatang.com/
Wind:               http://114.80.154.45/University/ElitePlan.html

竞赛&会议数据

Kaggle:             https://www.kaggle.com/
DataCastle:         http://www.pkbigdata.com/
KDD:                http://www.kdd.org/
Statistical computing&Statistical Graphics: http://stat-computing.org/dataexpo/
天池大数据竞赛-        https://tianchi.shuju.aliyun.com/datalab/index.htm

其他

基因数据:               http://aws.amazon.com/cn/1000genomes/
Cancer Program Dataset: http://www.broadinstitute.org/cgi-bin/cancer/datasets.cgi
电影评分数据集:            http://grouplens.org/datasets/movielens/
NCBI :                  http://www.ncbi.nlm.nih.gov/
Data Source on Web:     http://mran.revolutionanalytics.com/documents/data/#machinelearning
Mahout数据集:          https://mahout.apache.org/users/basics/collections.html

参考:

Spark MLLib简介 http://blog.csdn.net/qq_33938256/article/details/52833105
机器学习库(MLlib)指南 spark-1.6.1 http://ifeve.com/spark-mllib/
Spark MLlib之矩阵      http://blog.csdn.net/qq_33938256/article/details/52584964
并发编程网-Spark栏目   http://ifeve.com/category/spark/
Spark上矩阵运算库(四)基本API搭建完毕 http://blog.csdn.net/u014252240/article/details/38354065 南京大学pasa大数据实验室

blogroll

social