人工智能模型非常強大,但在使用中也會面臨諸多問題,例如模型規模太大 ,訓練數據太多,因此我們可以將數據分配到多個工作節點進行訓練,亦或將模型分配到多個節點進行運算然後合併。但要從底層同時控制多臺機器並非易事,而Spark是一種大規模、快速計算的集群平臺,運用Spark中的MLlib庫就可以輕鬆的構建分佈式機器學習算法。
一、ML管道
MLlib對用於機器學習算法的API進行了標準化,從而使將多種算法組合到單個管道或工作流中變得更加容易。Spark中的管道概念主要受scikit-learn項目的啟發,包含以下幾塊:
- DataFrame:此ML API使用DataFrameSpark SQL作為ML數據集,可以保存各種數據類型。例如,DataFrame可能有不同的列,用於存儲文本, 特徵向量,真實標籤和預測值。
- Transformer:是一種算法,其可以將一個DataFrame到另一個DataFrame。例如,Transformer可以將具有特徵的DataFrame轉換為具有預測的DataFrame。
- Estimator:是一種算法,可以適合DataFrame來產生Transformer。例如,學習算法是在上Estimator進行訓練DataFrame並生成模型的算法。
- Parameter:所有Transformer和Estimator現在共享一個用於指定參數的通用API。
Pipeline被指定為一個階段序列,每個階段是一個Transformer或一個Estimator。這些階段按順序運行,並且輸入DataFrame在通過每個階段時都會進行轉換。對於Transformer階段,該transform()方法在上調用DataFrame。對於Estimator階段,將fit()調用方法來生成Transformer(成為PipelineModel或一部分Pipeline)Transformer的transform()方法,並且在上調用的方法DataFrame(如下圖)。
二、提取轉換和特徵選擇
1.特徵提取
在Spark中特徵提取主要有四種方案:
- TF-IDF:術語頻率逆文檔頻率(TF-IDF) 是一種特徵向量化方法,廣泛用於文本挖掘中,以反映術語對語料庫中文檔的重要性。
- Word2Vec:Word2Vec是一個Estimator包含代表文檔的單詞序列並訓練一個的 Word2VecModel。該模型將每個單詞映射到唯一的固定大小的向量。
- CountVectorizer:CountVectorizer和CountVectorizerModel旨在幫助轉換文本文檔的集合令牌計數的載體。當先驗詞典不可用時,CountVectorizer可以用作Estimator提取詞彙表並生成CountVectorizerModel。
- FeatureHasher:特徵哈希將一組分類或數字特徵投影到指定維度的特徵向量中(通常大大小於原始特徵空間的特徵向量)。這是通過使用哈希技巧 將特徵映射到特徵向量中的索引來完成的。
2.特徵轉換
Spark中的特徵轉換支持方法非常多,有Tokenizer、去除停用詞、n-gram、二值化、多項式展開、餘弦變換、字符串索引、OneHot編碼、向量索引、特徵交叉、歸一化、標準化、SQL轉換、離散化處理等等,在此用PCA方法舉例,其餘方法在此不做贅述。
3.特徵選擇
- VectorSlicer:是一個採用特徵向量並輸出帶有原始特徵子數組的新特徵向量的轉換器。這對於從向量列中提取特徵很有用。VectorSlicer接受具有指定索引的向量列,然後輸出一個新的向量列,其值通過這些索引選擇。
- RFormula:由R模型公式指定的列。當前,我們支持R運算符的有限子集,包括“〜”,“。”,“:”,“ +”和“-”。
- ChiSqSelector:代表Chi-Squared特徵選擇。它對具有分類特徵的標記數據進行操作。ChiSqSelector使用 卡方獨立性檢驗來決定選擇哪些功能。
三、分佈式機器學習算法
1.分類
分類是一種重要的機器學習和數據挖掘技術。分類的目的是根據數據集的特點構造一個分類函數或分類模型(也常常稱作分類器),該模型能把未知類別的樣本映射到給定類別中的一種技術。Spark MLlib庫中支持的分類算法有限,大致如下:
- 邏輯迴歸
- 決策樹分類器
- 隨機森林分類器
- 梯度提升樹分類器
- 多層感知器分類器
- 線性支持向量機
- 樸素貝葉斯
2.迴歸
Spark迴歸分析與分類相似,大致支持如下算法:
- 線性迴歸
- 決策樹迴歸
- 隨機森林迴歸
- 梯度提升樹迴歸
- 保序迴歸
3.聚類
聚類是一個無監督的學習問題,我們的目標是基於某種相似性概念將實體子集彼此分組。 聚類通常用於探索性分析和/或作為分層監督學習管道的組成部分(在該學習管道中,針對每個聚類訓練不同的分類器或迴歸模型)。spark.mllib軟件包支持以下模型:
- K均值
- 高斯混合(GM)
- 功率迭代聚類(PIC)
- 潛在狄利克雷分配(LDA)
4.協同過濾
在許多實際使用案例中,通常只能訪問
隱式反饋(例如,視圖,點擊,購買,喜歡,分享等)。用於spark.ml處理此類數據的方法來自隱式反饋數據集的協同過濾。5.關聯規則挖掘
挖掘關聯項、項集、子序列或其他子結構通常是分析大規模數據集的第一步,而這是多年來數據挖掘中的活躍研究主題。我們向用戶推薦Wikipedia的關聯規則學習, 以獲取更多信息。
四、模型選擇和交叉驗證
1.模型選擇
ML中的一項重要任務是模型選擇,或使用數據為給定任務找到最佳模型或參數。可以針對單個Estimator例如LogisticRegression或針對整個Pipeline進行調整,包括多個算法,功能化和其他步驟。用戶可以Pipeline一次調整一個整體,而不必分別調整每個元素Pipeline。
2.交叉驗證
交叉驗證(CrossValidator)是在給定的建模樣本中,拿出大部分樣本進行建模型,留小部分樣本用剛建立的模型進行預測,並求這小部分樣本的預報誤差,記錄它們的平方加和。確定ParamMap最佳值後,CrossValidator最後使用Estimator的最佳值ParamMap和整個數據集重新擬合。
有關Spark MLlib的內容至此結束,下文將進一步對Spark Graph即Spark圖計算的內容做詳細介紹。前文筆記請參考下面的鏈接:
閱讀更多 雲飛大數據 的文章