天天看點

Apache Spark機器學習3.1 Spark整體視圖

摘要

基于spark的整體視圖

通過第1章,我們建立起了spark系統,根據第2章的内容,我們完成了資料準備。現在将進入spark系統應用的新階段:從資料中獲得洞見。

根據gartner等機構的研究結果,許多公司僅僅是因為缺乏其商業的整體視圖而損失了大量的價值。本章我們将回顧機器學習的方法和獲得商業整體視圖的步驟,然後讨論spark如何簡單、快速地進行相關計算,同時通過一個執行個體,循序漸進地展示使用spark從資料到整體視圖的開發過程。

spark整體視圖

整體視圖的方法

特征準備

模型估計

模型評估

結果解釋

部署

<b></b>

<b>3.1 spark整體視圖</b>

spark能夠快速處理大量的資料,易于開發複雜的計算,是以,非常适合機器學習項目,例如獲得商業的整體視圖。本節,我們首先介紹一個真實的商業案例,然後讨論在spark上完成項目的準備工作。

3.1.1 例子

ifs公司銷售和分發數千種it産品,擁有許多市場營銷、教育訓練、團隊管理、促銷和産品相關的資料。公司希望知道市場營銷和教育訓練等不同的行為如何影響銷售團隊的成功。換句話說,ifs公司對找到市場營銷、教育訓練或促銷對銷售成功分别産生多大的影響非常感興趣。

過去幾年,ifs公司已經開展了很多分析工作,但是這些工作都是單獨部門在單個資料集上完成的。也就是說,他們已經擁有了僅通過市場營銷資料得到其如何影響銷售的分析結果,以及僅通過教育訓練資料得到的教育訓練如何影響銷售的分析結果。

當決策者拿到所有分析結果,并準備使用這些結果時,他們發現一些結果之間互相沖突。例如,當他們把所有影響因素加在一起時,總的影響結果超出了他們的直覺想象。

這是每個公司都會面臨的典型問題。單一資料集上的單獨分析不僅不會生成一個全局的視圖,而且經常生成一個有偏見或者互相沖突的視圖。為解決這個問題,分析團隊需要對公司全部資料有一個整體的觀念,把這些資料收集在一起,使用新的機器學習方法來獲得公司業務的整體視圖。

為做到這一點,公司需要關注以下幾個方面:

完整的原因

對于複雜關系的進階分析

計算複雜性與分組和大量産品與服務相關

在這個例子中,我們有8個資料集,其中包含:具有48個特征的市場營銷資料集,具有56個特征的教育訓練資料集,具有73個特征的團隊管理資料集。整體情況如右表所示。

該公司研究人員知道要将所有資料集放在一起,建立一個完整的模型可以解決這個問題,但是由于種種原因而無法做到。除了公司内部組織的問題外,存儲所有資料,用正确的方法快速處理,以合理的速度和正确的方式呈現所有結果在技術上也是充滿了挑戰。

與此同時,該公司提供100多個産品,将這些産品的資料彙集在一起研究公司相關措施之間的影響。這樣,計算出的影響是平均的影響,但因産品之間的差異太大而不能被忽視。如果我們需要評估每一個産品的影響,優先考慮并行計算,并實作良好的計算速度。對這家公司來講,如果未使用一個像spark一樣好的計算平台,滿足上面提到的要求是一項很大的挑戰。

在下面幾節,我們将使用apache spark上的機器學習算法來解決這個商業執行個體,幫助這家公司獲得整體視圖。為了幫助你高效地學習spark上的機器學習,下面幾節的讨論都基于這個商業執行個體。然而,出于保護該公司隐私的考慮,我們去除一些細節,保證每件事都簡潔明了。

正如以上讨論,我們的項目需要并行計算,是以,我們需要建立叢集和工作節點。然後,使用驅動程式和叢集管理器來管理每個節點上進行的計算。

我們在第1章中讨論了spark環境的準備,要了解更多的資訊,可以參考如下網址:http://spark.apache.org/docs/latest/configuration.html。

作為例子,假設我們使用databricks環境開展工作,可以通過下面的步驟建立叢集:

前往主菜單,單擊“clusters”,将會為使用者打開一個建立叢集名字的視窗。在這裡,選擇spark的版本,指定工作節點的數量。

一旦叢集建立完成,我們回到前面提到的主菜單,單擊“tables”右側向下的箭頭,選擇“create tables”,導入資料集。資料集需要根據第2章中介紹的情況進行清洗和準備。螢幕截圖如下所示:

我們可以選擇s3、dbfs、jdbc和檔案(本地)作為資料源。根據第2章中的内容,因為每個産品需要訓練幾個模型,我們的資料分為兩個資料集:一個用于訓練,一個用于測試。

在spark中,我們需要指揮每個計算節點完成計算任務。是以,在databricks環境中,我們需要一個排程器使notebook完成計算、收集結果回報,這将在3.1節“模型估計”一節中介紹。

3.1.2 簡潔快速的計算

使用spark最重要的優勢是程式編碼簡單,并且具有多種方法可供選擇。

本項目我們主要使用notebook方法程式設計,也就是說,我們将使用r notebook方法開發群組織代碼。同時,為了更加充分地闡述spark技術,也因為mllib與spark無縫內建,我們将直接使用mllib來編寫所需的代碼。

在databricks環境中,建立notebook環境需要下面的步驟:

正如上面的螢幕截圖所示,使用者可以到databricks的主菜單,單擊“workspace”右側的箭頭,選擇“create-&gt;notebook”建立一個新的notebook。之後會出現一個下拉表格讓使用者建立名字,選擇一種語言(r語言、python、scala或者sql)。

為了讓工作具有可重複性并且易于了解,我們将引入一個與第1章中描述的rm4e架構相一緻的工作流方法。我們将盡可能使用spark ml pipeline工具表示我們的工作流。具體來講,對于訓練資料集,我們需要估計模型、評估模型,或許在模型使用之前需要重新估計模型。是以,我們需要使用spark的轉換器、估計器和評估器來為本項目組織一個機器學習pipeline。實際上,我們也會在r notebook環境中組織這些工作流。

關于pipeline程式設計的更多資訊,請通路:http://spark.apache.org/docs/latest/ml-guide.html#example-pipeline 和http://spark.apache.org/docs/latest/ml-guide.html。

一旦我們完成計算平台搭建,掌握了工作的架構,其他事情也就清楚了。在下面幾節,我們将一步一步地進行。也就是說,我們将使用rm4e架構,以及第1章中讨論過的過程:首先是識别方程或方法和準備特征,第二步是完成模型的估計,第三步是評估模型,第四步是解釋我們的結果,最後部署模型。

繼續閱讀