成人av在线资源一区,亚洲av日韩av一区,欧美丰满熟妇乱XXXXX图片,狠狠做五月深爱婷婷伊人,桔子av一区二区三区,四虎国产精品永久在线网址,国产尤物精品人妻在线,中文字幕av一区二区三区欲色
    您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
    此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
    人工智能開發(fā)者 正文
    發(fā)私信給skura
    發(fā)送

    0

    利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

    本文作者: skura 2019-09-16 10:50
    導(dǎo)語: 利用 Spark 和 scikit-learn 加快模型訓(xùn)練

    在 Ibotta,我們訓(xùn)練了許多機器學(xué)習(xí)模型。這些模型為我們的推薦系統(tǒng)、搜索引擎、定價優(yōu)化引擎、數(shù)據(jù)質(zhì)量等提供動力。它們在與我們的移動應(yīng)用程序交互時為數(shù)百萬用戶做出預(yù)測。

    當(dāng)我們使用 Spark 進行數(shù)據(jù)處理時,我們首選的機器學(xué)習(xí)框架是 scikit-learn。隨著計算機變得越來越便宜,機器學(xué)習(xí)解決方案的上市時間變得越來越關(guān)鍵,我們探索了加快模型訓(xùn)練的各種方法。其中一個解決方案是將 Spark 和 scikit-learn 中的元素組合到我們自己的混合解決方案中。

    sk-dist 的介紹

    我們很高興地宣布我們的開源項目 sk-dist 的啟動。該項目的目標(biāo)是為使用 Spark 分發(fā) scikit 學(xué)習(xí)元估計器提供一個通用框架。元估計器的例子有決策樹集合(隨機林和額外隨機樹)、超參數(shù)調(diào)解器(網(wǎng)格搜索和隨機搜索)和多分類技術(shù)(一對多和多對一)。

     利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

    我們的主要動機是填補傳統(tǒng)機器學(xué)習(xí)模型空間的空白。在神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的空間之外,我們發(fā)現(xiàn)我們的訓(xùn)練模型的大部分計算時間并沒有花在訓(xùn)練單個數(shù)據(jù)集的單個模型上。相反,大部分時間都花在使用元估計器在數(shù)據(jù)集上訓(xùn)練模型的多次迭代上。

    例子

    讓我們談?wù)勈謱憯?shù)字數(shù)據(jù)集。在這里,我們對手寫數(shù)字的圖像進行了適當(dāng)?shù)木幋a、分類。我們可以很快在一臺機器上訓(xùn)練 1797 條記錄的支持向量機,花費的時間不到一秒鐘。但超參數(shù)調(diào)整需要在訓(xùn)練數(shù)據(jù)的不同子集上進行大量的訓(xùn)練。

    如下圖所示,我們已經(jīng)構(gòu)建了一個總計需要 1050 個訓(xùn)練的參數(shù)網(wǎng)格。在擁有 100 多個核的 Spark 上使用 sk dist 只需 3.4 秒。這項工作的總時間是 7.2 分鐘,意思是在沒有并行化的單機上訓(xùn)練要花這么長時間。

    import timefrom sklearn import datasets, svm
    from skdist.distribute.search import DistGridSearchCV
    from pyspark.sql import SparkSession # instantiate spark session
    spark = (  
       SparkSession    
       .builder    
       .getOrCreate()    
       )
    sc = spark.sparkContext # the digits dataset
    digits = datasets.load_digits()
    X = digits["data"]
    y = digits["target"] # create a classifier: a support vector classifier
    classifier = svm.SVC()
    param_grid = {
       "C": [0.01, 0.01, 0.1, 1.0, 10.0, 20.0, 50.0],
       "gamma": ["scale", "auto", 0.001, 0.01, 0.1],
       "kernel": ["rbf", "poly", "sigmoid"]
       }
    scoring = "f1_weighted"
    cv = 10# hyperparameter optimization
    start = time.time()
    model = DistGridSearchCV(    
       classifier, param_grid,    
       sc=sc, cv=cv, scoring=scoring,
       verbose=True    
       )
    model.fit(X,y)
    print("Train time: {0}".format(time.time() - start))
    print("Best score: {0}".format(model.best_score_))------------------------------
    Spark context found; running with spark
    Fitting 10 folds for each of 105 candidates, totalling 1050 fits
    Train time: 3.380601406097412
    Best score: 0.981450024203508

    這個例子演示了一個常見的場景,在這個場景中,將數(shù)據(jù)擬合到內(nèi)存中并訓(xùn)練單個分類器是很簡單的,但是適合超參數(shù)優(yōu)化所需的匹配數(shù)量會迅速增加。下面是一個運行網(wǎng)格搜索問題的例子,和上面的 sk dist 示例類似:

     利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

    帶sk-dist的網(wǎng)格搜索

    對于 ibotta 傳統(tǒng)機器學(xué)習(xí)的實際應(yīng)用,我們經(jīng)常發(fā)現(xiàn)自己處于類似這樣的情況中:中小型數(shù)據(jù)(10k 到 1M 的記錄)和許多簡單分類器迭代以適應(yīng)超參數(shù)調(diào)整、集成和多分類解決方案。

    現(xiàn)有解決方案

    傳統(tǒng)的機器學(xué)習(xí)元估計器訓(xùn)練方法已經(jīng)存在。第一個是最簡單的:scikit-learn 使用 joblib 內(nèi)置的元估計器并行化。這與 sk-dist 的操作非常相似,但是它有一個主要的限制:性能受限于任何機器的資源。即使與理論上擁有數(shù)百個內(nèi)核的單機相比,Spark 仍然具有一些優(yōu)勢,如執(zhí)行器的微調(diào)內(nèi)存規(guī)范、容錯,以及成本控制選項,如對工作節(jié)點使用 spot 實例。

    另一個現(xiàn)有的解決方案是 Spark ML,它是 Spark 的一個本地機器學(xué)習(xí)庫,支持許多與 scikit-learn 相同的算法來解決分類和回歸問題。它還具有諸如樹集合和網(wǎng)格搜索之類的元估計器,以及對多分類問題的支持。

     利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

    分布在不同的維度上

    如上所示,Spark ML 將針對分布在多個執(zhí)行器上的數(shù)據(jù)來訓(xùn)練單個模型。當(dāng)數(shù)據(jù)量很大,以至于無法存入一臺機器上的內(nèi)存時,這種方法可以很好地工作。然而,當(dāng)數(shù)據(jù)量很小時,在單臺機器上這可能會比 scikit-learn 的學(xué)習(xí)效果差。此外,例如,當(dāng)訓(xùn)練一個隨機森林時,Spark ML 按順序訓(xùn)練每個決策樹。此項工作的時間將與決策樹的數(shù)量成線性比例,和分配給該任務(wù)的資源無關(guān)。

    對于網(wǎng)格搜索,Spark ML 實現(xiàn)了一個并行參數(shù),該參數(shù)將并行地訓(xùn)練各個模型。然而,每個單獨的模型仍在對分布在執(zhí)行器之間的數(shù)據(jù)進行訓(xùn)練。這項任務(wù)的總并行度只是純粹按照模型維度來的,而不是數(shù)據(jù)分布的維度。

    最后,我們希望將我們的訓(xùn)練分布在與 Spark ML 不同的維度上。當(dāng)使用中小型數(shù)據(jù)時,將數(shù)據(jù)擬合到內(nèi)存中不是問題。對于隨機森林的例子,我們希望將訓(xùn)練數(shù)據(jù)完整地廣播給每個執(zhí)行器,在每個執(zhí)行者身上擬合一個獨立的決策樹,并將這些擬合的決策樹帶回給驅(qū)動器,以集合成一個隨機森林。這個維度比串行分布數(shù)據(jù)和訓(xùn)練決策樹快幾個數(shù)量級。

    特征

    考慮到這些現(xiàn)有解決方案在我們的問題空間中的局限性,我們內(nèi)部決定開發(fā) sk-dist。歸根結(jié)底,我們希望發(fā)布的是模型,而不是數(shù)據(jù)。

    雖然 sk-dist 主要關(guān)注元估計器的分布式訓(xùn)練,但它也包括很多其它模塊,如 Spark 的 scikit-learn 模型的分布式預(yù)測模塊等。

    • 分布式訓(xùn)練——使用 Spark 進行分布式元估計訓(xùn)練,支持以下算法:帶網(wǎng)格搜索和隨機搜索的超參數(shù)優(yōu)化、帶隨機林的樹集合、額外樹和隨機樹嵌入,以及一對一和一對多的多分類策略。

    • 分布預(yù)測——具有 Spark 數(shù)據(jù)幀的擬合 scikit-learn 估計器的預(yù)測方法。這使得帶有 scikit-learn 的大規(guī)模分布式預(yù)測可以在沒有 Spark 的情況下進行。

    • 特征編碼——分布特征編碼使用被稱為編碼器的靈活特征變換器來完成。不管有沒有 Spark,它都可以起作用。它將推斷數(shù)據(jù)類型,自動應(yīng)用默認的特征變換器作為標(biāo)準(zhǔn)特征編碼技術(shù)的最佳實現(xiàn)。它還可以作為一個完全可定制的功能聯(lián)合,如編碼器,它的附加優(yōu)勢是與 Spark 匹配的分布式 transformer。

    用例

    以下是判斷 sk-dist 是否適合解決你的機器學(xué)習(xí)問題的一些準(zhǔn)則:

    1. 傳統(tǒng)的機器學(xué)習(xí)方法,如廣義線性模型、隨機梯度下降、最近鄰、決策樹和樸素貝葉斯等,都能很好地應(yīng)用于 sk-dist,這些方法都可以在 scikit-learn 中實現(xiàn),并且可以直接應(yīng)用于 sk-dist 元估計。

    2. 中小型數(shù)據(jù)、大數(shù)據(jù)不能很好地在 sk-dist 中起作用。記住,分布式訓(xùn)練的維度是沿著模型的軸,而不是數(shù)據(jù)。數(shù)據(jù)不僅需要放在每個執(zhí)行器的內(nèi)存中,而且要小到可以傳播。根據(jù) Spark 配置,最大傳播大小可能會受到限制。

    3. Spark 定向和訪問——sk-dist 的核心功能需要運行 Spark。對于個人或小型數(shù)據(jù)科學(xué)團隊來說,這并不總是可行的。

    這里一個重要的注意事項是,雖然神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)在技術(shù)上可以用于 sk-dist,但這些技術(shù)需要大量的訓(xùn)練數(shù)據(jù),有時需要專門的基礎(chǔ)設(shè)施才能有效。深度學(xué)習(xí)不是 sk-dist 的最佳用例,因為它違反了上面的(1)和(2)。

    開始

    要開始使用 sk-dist,請查看安裝指南。代碼庫還包含一個示例庫,用于說明 sk-dist 的一些用例。歡迎所有人提交問題并為項目做出貢獻。

    via:https://medium.com/building-ibotta/train-sklearn-100x-faster-bec530fc1f45

    雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)

    雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

     利用 Spark 和 scikit-learn 將你的模型訓(xùn)練加快 100 倍

    分享:
    相關(guān)文章
    當(dāng)月熱門文章
    最新文章
    請?zhí)顚懮暾埲速Y料
    姓名
    電話
    郵箱
    微信號
    作品鏈接
    個人簡介
    為了您的賬戶安全,請驗證郵箱
    您的郵箱還未驗證,完成可獲20積分喲!
    請驗證您的郵箱
    立即驗證
    完善賬號信息
    您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
    立即設(shè)置 以后再說