Spark權威指南(中文版)----第26章 分類

​Spark The Definitive Guide(Spark權威指南) 中文版。本書詳細介紹了Spark2.x版本的各個模塊,目前市面上最好的Spark2.x學習書籍!!!

掃碼關注公衆號:登峯大數據,閱讀中文Spark權威指南(完整版),系統學習Spark大數據框架!

如果您覺得作者翻譯的內容有幫助,請分享給更多人。您的分享,是作者翻譯的動力

分類是根據輸入特性預測標籤、類別、類或離散變量的任務。與其他ML任務(例如迴歸)的關鍵區別在於,輸出標籤具有有限的可能值集(例如,三個類型值)。

26.1.用例

分類有很多用例,正如我們在第24章中討論的那樣。這裏還有一些需要考慮的問題,可以作爲在現實世界中使用分類的多種方法的補充。

預測信用風險

金融公司在向公司或個人提供貸款之前,可能會考慮許多因素(變量)。是否提供貸款是一個二元分類問題。

新聞分類

可以訓練一種算法來預測新聞文章的主題(體育、政治、商業等)。

人類活動分類

通過從手機加速度計或智能手錶等傳感器收集數據,你可以預測一個人的活動。輸出將是一個有限的類集合(例如,散步、睡覺、站立或跑步)。

26.2.不同類型的分類

在繼續之前,讓我們回顧幾種不同類型的分類。

26.2.1.二元分類

最簡單的分類示例是二元分類,其中只有兩個標籤可以預測。一個例子是欺詐分析,其中一個給定的交易可以分爲欺詐或非欺詐;或電子郵件垃圾郵件,其中給定的電子郵件可以分類爲垃圾郵件或非垃圾郵件。

26.2.2.多元分類

除了二進制分類之外,還有多元分類,即從超過兩個不同的可能標籤中選擇一個標籤。一個典型的例子是Facebook預測給定照片中的人,或者氣象學家預測天氣(下雨、晴天、多雲等)。注意,總是有一組有限的類需要預測;而不是無限的類需要預測。這也叫做多項分類。

26.2.3.多標籤分類

最後,還有多標籤分類,其中給定的輸入可以生成多個標籤。例如,您可能希望根據圖書本身的文本來預測圖書的類型。雖然這可以是多類的,但它可能更適合多標籤,因爲一本書可能屬於多種類型。多標籤分類的另一個例子是識別圖像中出現的對象的數量。注意,在本例中,輸出預測的數量不一定是固定的,並且可能因圖像而異。

26.3.MLlib中的分類模型

Spark有幾個可用的模型來執行二元分類和多元分類。在Spark中可以使用以下模型進行分類:

  • Logistic regression 邏輯迴歸

  • Decision trees 決策樹

  • Random forests 隨機森林

  • Gradient-boosted trees 梯度提升樹

Spark內置不支持進行多標籤預測。爲了訓練一個多標籤模型,您必須爲每個標籤訓練一個模型並手動組合它們。一旦手動構建,就會有內置的工具支持度量這類模型(在本章末尾討論)。

本章將介紹這些模型的基本知識,包括:

  • 一個簡單的模型解釋和它背後的知識

  • 模型超參數(初始化模型的不同方法)

  • 訓練參數(影響模型訓練方式的參數)

  • 預測參數(影響如何進行預測的參數)

您可以在ParamGrid中設置超參數和訓練參數,正如我們在第24章中看到的那樣。

26.3.1.模型的可伸縮性

在選擇模型時,模型可伸縮性是一個重要的考慮因素。一般來說,Spark對訓練大型機器學習模型有很好的支持(注意,這些都是大規模的;在單節點工作負載上,還有許多其他工具也表現良好)。表26-1是一個簡單的模型可伸縮性記分卡,用於爲您的特定任務找到最佳模型(如果可伸縮性是您的核心考慮因素)。實際的可伸縮性將取決於您的配置、機器大小和其他細節,但這應該是一個很好的啓發。

我們可以看到,幾乎所有這些模型都可以擴展到輸入數據的大集合,並且正在進行進一步的擴展工作。之所以不限制訓練實例的數量,是因爲這些訓練使用隨機梯度下降和L-BFGS等方法。這些方法是專門爲處理大量數據集而優化的,可以消除您希望學習的訓練示例數量上可能存在的任何限制。

讓我們開始看看分類模型加載一些數據:

提示

和我們的其他高級分析章節一樣,這一章不能教你每一個模型的數學基礎。參見ISL和ESL中的第4章來回顧分類。

26.4.邏輯迴歸

邏輯迴歸是最流行的分類方法之一。它是一種線性方法,將每個單獨的輸入(或特徵)與特定的權重(這些權重是在訓練過程中生成的)組合在一起,使用這些權重組合在一起的權重,得到屬於特定分類的概率。這些權重很有用,因爲它們很好地表示了特徵的重要性;如果權重很大,可以假設該特徵的變化對結果有顯著影響(假設執行了標準化)。較小的權重意味着該特徵不太重要。

26.4.1.模型超參數

模型超參數是決定模型本身基本結構的配置。以下超參數可用於邏輯迴歸:

  • family

可以是多元的(兩個或多個不同的標籤;多元分類)或二進制(只有兩個不同的標籤;二進制分類)。

  • elasticNetParam

從0到1的浮點值。該參數根據彈性網絡正則化(兩者的線性組合)指定L1和L2正則化的組合。你選擇L1還是L2在很大程度上取決於你的具體用例,但一般規則如下:L1正則化(值爲1)將在模型中創建稀疏性,因爲某些特性權重將變爲零(這對輸出幾乎沒有影響)。因此,它可以作爲一種簡單的特徵選擇方法。另一方面,L2正則化(值爲0)不會產生稀疏性,因爲特定特徵的相應權重只會趨向於零,而不會完全達到零。另一方面,L2正則化(值爲0)不會產生稀疏性,因爲特定特性的相應權重只會趨向於零,而不會完全達到零。

  • fitIntercept

值可以爲false或者true。這個超參數決定是否匹配截距或者匹配在模型的輸入和權重的線性組合中添加的任意數字。一般來說,如果我們沒有對訓練數據進行標準化,你會想要匹配截距。

  • regParam

一個大於等於0的值。這決定了目標函數中正則化項的權重。在這裏選擇一個值將再次成爲我們數據集中噪聲和維數的函數。在pipeline中,嘗試各種值(例如,0、0.01、0.1、1)。

  • standardization

值可以爲false或者true。是否在將輸入傳遞到模型之前對其進行標準化。更多信息見第25章。

26.4.2.訓練參數

訓練參數用於指定我們如何執行訓練。下面是邏輯迴歸的訓練參數。

  • maxIter

停止前對數據的總迭代次數。更改這個參數可能不會對結果造成太大的影響,所以它不應該是您要調整的第一個參數。默認值是100。

  • tol

此值指定一個閾值,通過該閾值,參數的更改可以顯示我們已經對權重進行了足夠的優化,並且可以停止迭代。它讓算法在maxIter迭代之前停止。默認值是1.0E-6。這也不應該是您要調優的第一個參數。

  • weightCol

權重列的名稱,用於對某些行施加比其他行更大的權重。如果您對某個特定訓練示例的重要性有其他度量方法,並且有與之相關的權重,那麼這將是一個有用的工具。例如,您可能有10,000個示例,其中您知道有些標籤比其他標籤更準確。你可以給你知道正確的標籤設置更大權重,而不是給你不知道正確的標籤設置權重。

26.4.3.預測參數

這些參數有助於確定模型在預測時實際應該如何進行預測,但不影響訓練。下面是邏輯迴歸的預測參數:

  • threshold

在0到1的範圍內的double值。這個參數是預測給定類的概率閾值。您可以根據您的需求調整此參數,以平衡假陽性和假陰性。例如,如果一個錯誤的預測是昂貴的—您可能希望將它的預測threshold設置得非常高。

  • thresholds

這個參數允許您在使用多類分類時爲每個類指定一個閾值數組。它的工作原理類似於前面描述的單個threshold(閾值)參數。

26.4.4.例子

下面是一個使用邏輯迴歸模型的簡單例子。注意,我們沒有指定任何參數,因爲我們將利用默認值,並且我們的數據符合正確的列命名。實際上,您可能不需要更改許多參數:

一旦對模型進行了訓練,您就可以通過查看係數和截距來獲得關於模型的信息。這些係數對應於各個特徵權重(每個特徵權重乘以各自的特徵來計算預測),而截距是斜體截距的值(如果我們在指定模型時選擇匹配它)。查看係數有助於檢查你建立的模型,並比較特徵如何影響預測:

對於多項式模型(當前爲二元分類),lrModel.coefficientMatrix和lrModel.interceptVector可用於求係數和截距。這些將返回表示值或每個給定分類的矩陣和向量類型。

26.4.5.模型摘要

邏輯迴歸提供了一個模型摘要,它提供了關於最終的、經過訓練的模型的信息。這類似於我們在許多R語言機器學習包中看到的相同類型的概要。模型摘要目前僅適用於二元邏輯迴歸問題,但將來可能會添加多類摘要。通過二元摘要,我們可以得到模型自身的各種信息,包括ROC曲線下的面積、閾值f測度、精度、查全率、查全率閾值、ROC曲線。注意,對於曲線下的區域,沒有考慮實例權重,因此,如果您想查看如何對權重更大的值執行操作,就必須手動執行。這可能會在未來的Spark版本中發生改變。您可以使用以下api查看摘要:

模型下降到最終結果的速度顯示在objectiveHistory中。我們可以通過模型概要上的objectiveHistory來獲取:

這是一個雙精度數組,它指定了在每個訓練迭代中,我們對目標函數的執行情況。這些信息有助於查看我們是否有足夠的迭代,或者是否需要調優其他參數。

26.5.決策樹

決策樹是執行分類的較友好且可解釋的模型之一,因爲它們類似於人類經常使用的簡單決策模型。例如,如果你必須預測某人是否會在有人提供冰淇淋時喫冰淇淋,一個好的特徵可能是這個人是否喜歡冰淇淋。在僞代碼中,if  person.like(“ice_cream”),他們將喫冰激凌;否則,他們就不會喫冰淇淋。決策樹使用所有輸入創建這種類型的結構,並在進行預測時遵循一組分支。這使得它成爲一個很好的起點模型,因爲它很容易推理,很容易檢查,並且很少對數據結構做出假設。簡而言之,它不是爲了對函數建模而試圖訓練係數,而是簡單地創建一個決策樹,以便在預測時遵循。該模型還支持多類分類,並在兩個不同的列中提供預測和概率輸出。

雖然這種模式通常是一個良好的開端,但它確實付出了代價。它可能會出現對數據過擬合。我們的意思是,不受約束的,決策樹將從一開始就基於每個訓練示例創建一個路徑。這意味着它對模型中的訓練集中的所有信息進行編碼。這很糟糕,因爲這樣模型就不能泛化到新的數據(您將看到較差的測試集預測性能)。然而,有許多方法可以通過限制分支結構(例如,限制其高度)來嘗試控制模型,從而獲得良好的預測能力。

請在公衆號中閱讀本章剩下的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章