天天看點

Spark 資料挖掘 - 利用決策樹預測森林覆寫類型

預測問題記住一點:最垃圾的預測就是使用平均值,如果你的預測連比直接給出平均值效果都要差,那就省省吧!

統計學誕生一個多世紀之後,随着現在機器學習和資料科學的産生,我們依舊使用回歸的思想來進行預測,盡管回歸 就是用平均值向後不斷復原來預測。回歸的技術和分類的技術緊密相關。通常情況下,當目标變量是連續數值時指的是回歸,例如預測 身高和體重。當預測的目标變量是名義或者說是類别變量時,指的就是分類,例如預測郵件是否是垃圾郵件。

無論是分類還是回歸,都需要給定已知資訊去預測未知資訊,是以它們都需要從輸入輸出來學習。它們需要包括問題和答案。這類算法是以也稱為監督學習的方法。

回歸和分類是使用年代最近研究的最充分的預測分析技術。很多算法開源包都包含通用的這些方法。比如:支援向量機,邏輯回歸,樸素貝葉斯,神經網絡和深度學習。

本文的重點是讨論:決策樹和它的擴充随機森林。決策樹是通用而且靈活的分類回歸算法。

注意:特别小心分類變量(尤其是那些用數字表示的分類變量,不要随便放到算法中去訓練)和數值變量

注意:不是所有的算法都能處理分類變量,或者都能處理回歸分類問題,但是放心決策樹都可以

Spark 資料挖掘 - 利用決策樹預測森林覆寫類型
Spark 資料挖掘 - 利用決策樹預測森林覆寫類型

當算法中把編碼當作數字的時候隻能使用第一種編碼,第二種編碼會得出滑稽的結果。具體原因是沒有大小的東西被強制成有大小之分。

covtype 資料集中有很多類型的特征,不過很幸運,它已經幫我們轉換成 one-hot 形勢,具體來說:

這個資料集每一列的變量機關都不一定相同,有的表示距離,有的表示度數等等

下面給出一個初步的利用spark mllib 實驗的決策樹模型,具體的意圖,代碼都有詳細的注釋:

這個是初步的運作結果:

70%的準确率和召回率似乎效果還不錯,但是我們現在不能盲目的認為我們的效果就真的不錯了,有時候瞎猜效果也會不錯。 例如:70%的資料屬于類别1,每次都猜測類别是1,那麼效果也能達到70%的準确率,下面我們确定一下瞎猜的準确率: 回答瞎猜猜對的機率,這個問題也不是簡單的,回到機率論課堂上,在訓練樣本每類機率已知的情況下,測試樣本瞎猜對的機率有多大呢? 随機給出一個樣本:猜測類a的機率是由訓練樣本決定的,同時猜對的機率是由測試樣本決定的,是以瞎猜猜對的機率是訓練樣本每類的機率分别 乘以測試樣本對應類的機率之和

可以看到瞎猜的結果隻有:0.3771281350885772 的準确率。說明70%的準确率效果确實不錯,但是請注意,我們還沒有優化參數, 說明我們的模型還有優化的空間。

主要的參數有下面幾個:

maximum depth: 決策樹樹的最大深度,控制深度防止過拟合

決策樹訓練算法疊代最大次數

純度測量算法 gini entropy (gini純度和熵) 通過反複檢視不同參數模型評估效果,下面給出測試代碼:

繼續閱讀