文章作者郵箱:yugongshiye@sina.cn? ? ? ? ? ? ? 地址:廣東惠州
?▲ 本章節(jié)目的
? 了解Spark的MLlib概念;
??掌握Spark的MLlib基本數(shù)據(jù)模型;
??掌握Spark的MLlib統(tǒng)計量基礎;
一、Spark MLlib介紹
1.?概述
MLlib是Apache Spark的可迭代機器學習庫。
2. 易于使用
適用于Java、Scala、Python和R語言。
MLlib適用于Spark的API,并與Python中的NumPy(從Spark 0.9開始)和R庫(從Spark 1.5開始)互操作。 您可以使用任何Hadoop數(shù)據(jù)源(例如HDFS,HBase或本地文件),從而輕松插入Hadoop工作流程。
案例:
// 通過Python調用MLib
data = spark.read.format("libsvm").load("hdfs://...")
model =?KMeans(k=10).fit(data)
3. 執(zhí)行高效
高質量的算法,比 MapReduce 快100倍。
Spark擅長迭代計算,使MLlib能夠快速運行。 同時,我們關注算法性能:MLlib包含利用迭代的高質量算法,并且可以產生比MapReduce上有時使用的一次通過近似更好的結果。Hadoop 和 Spark的數(shù)據(jù)模型,如下圖所示。
?4. 易于部署
Spark運行在Hadoop,Apache Mesos,Kubernetes,standalone或云端,針對不同的數(shù)據(jù)源。
您可以使用其獨立群集模式,EC2,Hadoop YARN,Mesos或Kubernetes運行Spark。 訪問HDFS,Apache Cassandra,Apache HBase,Apache Hive和數(shù)百個其他數(shù)據(jù)源中的數(shù)據(jù)。
5. 算法
MLlib包含許多算法和實用程序。
ML算法包括:
1.?分類:邏輯回歸,樸素貝葉斯,......。
2.?回歸:廣義線性回歸,生存回歸,......。
3.?決策樹,隨機森林和梯度提升樹。
4.?建議:交替最小二乘法(ALS)。
5.?聚類:K均值,高斯混合(GMM),......。
6.?主題建模:潛在Dirichlet分配(LDA)。
7.?頻繁項目集,關聯(lián)規(guī)則和順序模式挖掘。
ML工作流程工具包括:
1. 特征轉換:標準化,規(guī)范化,散列,......。
2. ML Pipeline construction。
3.?模型評估和超級參數(shù)調整。
4.?ML持久性:保存和加載模型和Pipelines。
其他工具包括:
分布式線性代數(shù):SVD,PCA,......。
統(tǒng)計:匯總統(tǒng)計,假設檢驗,......。
6. 總結
MLlib是一個構建在Spark上的、專門針對大數(shù)據(jù)處理的并發(fā)式高速機器學習庫,其特點是采用較為先進的迭代式、內存存儲的分析計算,使得數(shù)據(jù)的計算處理速度大大高于普通的數(shù)據(jù)處理引擎。
MLlib機器學習庫還在不停地更新中,Apache的相關研究人員仍在不停地為其中添加更多的機器學習算法。目前MLlib中已經(jīng)有通用的學習算法和工具類,包括統(tǒng)計、分類、回歸、聚類、降維等。
MLlib采用Scala語言編寫,Scala語言是運行在JVM上的一種函數(shù)式編程語言,特點就是可移植性強,“一次編寫,到處運行”是其最重要的特點。借助于RDD數(shù)據(jù)統(tǒng)一輸入格式,讓用戶可以在不同的IDE上編寫數(shù)據(jù)處理程序,通過本地化測試后可以在略微修改運行參數(shù)后直接在集群上運行。對結果的獲取更為可視化和直觀,不會因為運行系統(tǒng)底層的不同而造成結果的差異與改變。
二、MLlib基本數(shù)據(jù)模型
1. 概述
RDD是MLlib專用的數(shù)據(jù)格式,它參考了Scala函數(shù)式編程思想,并大膽引入統(tǒng)計分析概念,將存儲數(shù)據(jù)轉化成向量和矩陣的形式進行存儲和計算,這樣將數(shù)據(jù)定量化表示,能更準確地整理和分析結果。
多種數(shù)據(jù)類型
MLlib先天就支持較多的數(shù)據(jù)格式,從最基本的Spark數(shù)據(jù)集RDD到部署在集群中的向量和矩陣。同樣,MLlib還支持部署在本地計算機中的本地化格式。
下表給出了MLlib支持的數(shù)據(jù)類型。
類型名稱 |
釋義 |
Local vector |
本地向量集。主要向Spark提供一組可進行操作的數(shù)據(jù)集合 |
Labeled point |
向量標簽。讓用戶能夠分類不同的數(shù)據(jù)集合 |
Local matrix |
本地矩陣。將數(shù)據(jù)結合以矩陣形式存儲在本地計算機中 |
Distributed matrix |
分布式矩陣。將矩陣集合以矩陣形式存儲在分布式計算機中 |
以上就是MLlib支持的數(shù)據(jù)類型,其中分布式矩陣根據(jù)不同的作用和應用場景,又分為四種不同的類型。
2.?本地向量
MLlib使用的本地化存儲類型是向量,這里的向量主要由兩類構成:稀疏型數(shù)據(jù)集(spares)和密集型數(shù)據(jù)集(dense)。例如一個向量數(shù)據(jù)(9,5,2,7),按密集型數(shù)據(jù)格式可以被設定成(9,5,2,7)進行存儲,數(shù)據(jù)集被作為一個集合的形式整體存儲。而對于稀疏型數(shù)據(jù),可以按向量的大小存儲為(4,?Array(0,1,2,3),?Array(9,5,2,7))。
案例一:
import org.apache.spark.{SparkConf,SparkContext}
def main(args:Array[String]):Unit={
//--建立密集型向量
//--dense可以將其理解為MLlib專用的一種集合形式,它與Array類似
val vd=Vectors.dense(2,0,6)//
println(vd)
//①參:size。spare方法是將給定的數(shù)據(jù)Array數(shù)據(jù)(9,5,2,7)分解成指定的size個部分進行處理,本例中是7個
//③參:輸入數(shù)據(jù)。本例中是Array(9,5,2,7)
//②參:輸入數(shù)據(jù)對應的下標,要求遞增,并且最大值要小于等于size
val vs=Vectors.sparse(7,Array(0,1,3,6),Array(9,5,2,7))
println(vs(6))
}文章來源地址http://www.zghlxwxcb.cn/news/detail-679003.html文章來源:http://www.zghlxwxcb.cn/news/detail-679003.html
}
到了這里,關于大數(shù)據(jù)課程K12——Spark的MLlib概述的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!