算法库和数据源
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里面同时也提供了Vector和Linalg等的实现
在使用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大数据实验室