日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)

發(fā)布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
-?點擊上方“中國統(tǒng)計網(wǎng)”訂閱我吧!-

我們在Spark高級分析指南 | 機器學習和分析流程詳解(上)快速介紹了一下不同的高級分析應用和用力,從推薦到回歸。但這只是實際高級分析過程的一小部分。你可能會發(fā)現(xiàn),選擇一個任務或算法通常是最簡單的部分。主要的挑戰(zhàn)是圍繞特定算法的一切。本部分會給出整個分析過程的結構,及我們必須要采取的步驟 而不是執(zhí)行一整個任務,但客觀的評估有效性是為了 理解我們是否應該將訓練過的算法用到實際上。

01高級分析的流程

整個過程大體上遵循以下內(nèi)容:

  • 收集任務相關的數(shù)據(jù)

  • 清晰和檢查數(shù)據(jù) 來更好地理解它

  • 執(zhí)行特性工程,讓算法能利用更多的信息

  • 使用一部分數(shù)據(jù)作為訓練集 來訓練一個或多個算法,得到一些候選模型

  • 通過在同一份數(shù)據(jù)的一個子集上(沒有被用來作為訓練集的)客觀地測結果來做為成功標準,以評估和比較各模型

  • 利用 上述過程得到的 模型能力 來進行預測、推薦、發(fā)覺異常或解決更多的一般業(yè)務挑戰(zhàn)

這對每格高級分析任務都是一樣的嗎?當然不是。然而,這確實可以作為一個通用框架,來幫助你知道為了獲得一個高級分析用力并從中得到價值需要做什么。就像我們對在前面的各種高級分析所做的那樣,讓我們分解過程的每一步來更好地理解每個步驟的總體目標。

1. 數(shù)據(jù)采集

不首先收集數(shù)據(jù),自然很難創(chuàng)建訓練數(shù)據(jù)。這通常意味著至少要收集用來訓練算法的數(shù)據(jù)集。Spark在這方面顯然是一個卓越的工具,因為它可以同各種數(shù)據(jù)源進行對話,并處理大大小小的數(shù)據(jù)。

2. 數(shù)據(jù)清洗

在收集了適合的數(shù)據(jù)后,你需要對其進行清理和檢查,并沿著探索性數(shù)據(jù)分析或EDA 的路線 執(zhí)行一些操作。EDA 在你視圖更好地理解數(shù)據(jù)這個階段 的一個合適的工具,它強調(diào)使用可視化方法來更好地理解數(shù)據(jù)的分布、相關性和其他細節(jié)。在這個過程中你會注意到你需要丟棄一些在數(shù)據(jù)上游記錄錯誤或丟失的數(shù)據(jù)。

不論是哪種情況,對數(shù)據(jù)有更好的理解,并知道數(shù)據(jù)中有什么,都是一件好事,可以避免以后的錯誤。Structured APIs 中有許多函數(shù)可以提供清洗數(shù)據(jù)的簡單方法。

3. 特征工程

現(xiàn)在有了清洗過的數(shù)據(jù)集,是時候通過潛在的規(guī)范化數(shù)據(jù)來增強它了(如果有必要的話),增加變量來代表其他變量間的交互,操作類別變量來轉化為適當?shù)母袷阶鳛闄C器學習模型的輸入。

在MLlib中,所有變量必須以double型輸入(不管他們實際代表什么)。這意味著你很可能必須用一些 類似單熱編碼類別變量和其他索引樣式技術。

Spark提供基本的你會使用的各種機器學習特定的統(tǒng)計技術 來操作數(shù)據(jù)的基本要素。

4. 模型訓練

下面的兩步(訓練模型、模型校正和評估)并非所有用例情況都有。這是一個一般的工作流,根據(jù)最終實現(xiàn)目的的不同,會有很大的不同。

到流程的這一步,我們有一個可以用來訓練模型的數(shù)據(jù)集。訓練一個模型意味著我們會給模型一組數(shù)據(jù),機器學習模型會嘗試執(zhí)行我們前面指定的任務。在這個過程中,模型內(nèi)部的參數(shù)會根據(jù)損失函數(shù)進行調(diào)整,為了在給定任務上盡量表現(xiàn)得更好。

例如,如果我們希望將垃圾郵件分類,我們的算法可能會找到某些詞匯 能比其他詞匯 更好地預測垃圾郵件。在我們的模型中,這些詞會比那些沒有相關性的詞受到更大的影響。我們所說的模型就是算法的輸出和數(shù)據(jù)。?

一個模型是一個算法的校正版本,算法只是可以用來洞悉好預測的簡化版本。然后我們給模型輸入行的數(shù)據(jù),模型會相應的對數(shù)據(jù)進行操作。在分類的例子中,我們有一個關于垃圾郵件特征的模型,如果我們給模型一個新郵件,它會返回輸出對該郵件是否為垃圾郵件的預測。


然而,訓練一個算法不是目的——我們想用模型來獲得洞察力。因此我們必須回答這個問題,我們怎樣知道我們的模型在它應該做的事情上是好的?這是模型校驗和評估的內(nèi)容。

5. 模型校正和評估

你可能注意到,如上所述我們習慣將數(shù)據(jù)分為幾個部分,而只用一個部分來訓練。我們創(chuàng)建訓練集而不是在全部數(shù)據(jù)集上訓練的原因,是為了用其他的部分來校正模型或與其他模型比較。這么做的原因很簡單,當我們構建一個模型后,我們希望模型可以推廣到新的數(shù)據(jù)或以前沒有見過的數(shù)據(jù)上。用來測試模型有效性的那部分數(shù)據(jù)被稱為測試機。將其想象成學校中的考試。其目的是查看模型是否理解了 該數(shù)據(jù)處理的基本原則,還是只注意到了訓練集中特定的東西。

在訓練模型的過程中,我們還可能取另一個數(shù)據(jù)子集,并將其作為一個小的測試集(稱為驗證集),為了嘗試不用的超參數(shù)或可能影響其他參數(shù)的參數(shù)——本質(zhì)上,模型的變型。


繼續(xù)已分類案例為例。我們有三個數(shù)據(jù)集,一個訓練集用來訓練模型,一個驗證集用來驗證我們正在訓練的模型的不同變型,基于一個測試集會在最后用來對不同模型變型的評估,看看那個模型表現(xiàn)的最好。

6. 模型的利用

最后我們使用模型,可能是為了更好地了解顧客或執(zhí)行用戶劃分或預測垃圾郵件。無論在哪種情況,這都是最終的目的。嘗試解決的一個問題并更好地理解你的數(shù)據(jù)。

這個簡要的工作流概述只是一個工作流的例子,并不包括所有的情況或可能的工作流。還有很多細節(jié)會很大的影響你的結果,

02Spark的高級分析工具箱

Spark包含很多用來執(zhí)行高級分析的核心包和很多第三方包。一個基本的包就是MLlib,其提供了用來構建機器學習管道的接口。

1. MLlib

是一個工具包,包含在Spark中,提供接口來:

  • 收集和清洗數(shù)據(jù)

  • 特征工程和特征選擇

  • 訓練和校正大規(guī)模監(jiān)督和非監(jiān)督機器學習模型

  • 在生產(chǎn)中使用這些模型

MLlib幫助完成整個過程的所有三個步驟,在前兩個步驟中表現(xiàn)非常突出,原因我們稍后將討論。

MLlib包含兩個包分別使用不同的核心數(shù)據(jù)結構:

org.apache.spark.ml維護提供給Spark DataFrame的接口。同時為標準化執(zhí)行上述步驟而構建的機器學習管道維護高級別接口。

低級別的包 org.apache.spark.mllib維護供Spark底層 RDD APIs 使用的接口。

什么時候及為什么你應該使用MLlib(相比于 scikit learn \ tensorfolw \ foo package)?

現(xiàn)在,你可能聽說過很多其他機器學習包,比如可以python或各種R語言版本的,執(zhí)行類似任務的scikit-learning包。你為什么嗎還要使用MLlib呢?

有很多的工具可用來在單機上執(zhí)行機器學習任務。他們在這方面做的都很好,并會繼續(xù)稱為更好的工具。然而,這些單機工具在用來訓練的數(shù)據(jù)大小上 和處理時間上都受到了限制。


在規(guī)模上受到限制的事實,使它們稱為了互補工具,而不是競爭對手。當您遇到這些可伸縮性問題時,請利用Spark的功能。

有兩種主要情況,你會想要利用Spark的規(guī)模特性。首先,在從大量數(shù)據(jù)中生成訓練集和測試集時,你回想使用Spark來預處理和生成特征以減少這個過程所花費的時間。 接著,你可能會想利用單機的機器學習算法在這些給定數(shù)據(jù)上進行訓練。?第二種情況是,當你的輸入數(shù)據(jù)和模型規(guī)模很難或不便于放在一臺機器上時,使用Spark來承擔這一重任。Spark使大數(shù)據(jù)機器學習變得容易。

對前面段落的一個重要警告是,雖然訓練和數(shù)據(jù)準備都很簡單,但仍然需要記住一些復雜性。比如,如果你在Spark集群上訓練一個推薦系統(tǒng),那么最終模型將會很大以至于難以在一臺機器上運行預測,然而我們?nèi)砸龀鲱A測來從模型中獲得價值。另一個例子是在Spark訓練一個邏輯回歸模型。

Spark的執(zhí)行引擎不是一個低延遲的執(zhí)行引擎,因此,即使在單機上,由于啟動和執(zhí)行一個Spark工作的花費,快速(<500ms)做出單一預測仍是有挑戰(zhàn)的。一些模型對這個問題有很好的答案,另一些仍然是開放的問題。我們將在本章的最后討論目前的技術狀況。這是一個富有成果的研究領域,隨著新系統(tǒng)的出現(xiàn),對這個問題的解決也會改變。

2. 高級別MLlib概念

在MLlib中,有很多基本的“結構”類型:transformers,estimators,evaluator和pipelines。


通過結構化,他們將定義你要做出的總體架構選擇。下面是對一個整體工作流程例子的說明:

Transformers是以某種方式轉換原始數(shù)據(jù)的函數(shù)。其可能創(chuàng)建一個新的交互變量(從兩個其他變量得到)、標準化一個列、或僅僅將其轉換成double型作為模型的輸入。一個transformer例子是將字符串分類變量轉換為可用于MLlib的數(shù)值。Transformers是預處理和特征生成中最先用到。

Estimators是兩種類型的操作之一。首先,estimators可以是一種初始化數(shù)據(jù)的transformer。一個例子是將一列轉換為列的百分位表示——為了做到這點我們會基于列中的值進行初始化。然后,estimators是Spark中實際模型的名稱(估計器),我們將對其進行培訓并將其轉換為模型,以便使用它們進行預測。


一個evaluator允許我們查看 一個給定estimator 是如何根據(jù)我們指定的標準,如ROC曲線,來執(zhí)行的。一旦我們從測試模型中選擇了最好的模型,就可以使用他來進行預測了。

在較高的層次上,我們可以逐個指定上面的每個步驟,然而在pipeline中指定個步驟為一個stages往往更簡單。這個pipeline類似于 Scikit-learn的Pipeline概念,transformations和estimators是一起制定的。

除了高級架構類型之外,還有很多底層事物你可以使用。最常見的是Vector。無論何時我們將一組特征輸入給機器學習模型,我們都必須以一個有Doubles構成的Vector 的形式給出特征。這個vector可以是稀疏的或稠密的。它們以不同的方式指定,一種是指定精確值(稠密的),另一種是指定總大小及哪些值非零(稀疏的)。你可能已經(jīng)猜到的,當大量值為0時,稀疏向量作為比其他格式更扁平的形式 是更合適的。

%scalaimport org.apache.spark.ml.linalg.Vectorsval denseVec = Vectors.dense(1.0, 2.0, 3.0)val?size?=?3val?idx?=?Array(1,2)?//?locations?in?vectorval?values?=?Array(2.0,3.0)val?sparseVec?=?Vectors.sparse(size,?idx,?values)sparseVec.toDensedenseVec.toSparse%pythonfrom pyspark.ml.linalg import VectorsdenseVec = Vectors.dense(1.0, 2.0, 3.0)size = 3idx = [1, 2] # locations in vectorvalues = [2.0, 3.0]sparseVec = Vectors.sparse(size, idx, values)

令人困惑的是,有一些類似的類型。其類似是指一些可以在DataFrame中使用,而另一些只能在RDDs中使用。RDD的實現(xiàn)在mllib包中,DataFrame的實現(xiàn)在ml包中。

End.

作者:有機會一起種地OT

來源:簡書

我就知道你“在看”

總結

以上是生活随笔為你收集整理的基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。