1. 程式人生 > >Spark一些常用的資料處理方法-3.MLlib的模型(還沒寫完)

Spark一些常用的資料處理方法-3.MLlib的模型(還沒寫完)

因為mllib屬於基礎庫,且本系列主要作為普及性文章,所以我不打算更新相關原理及其數學關係,有興趣自學的童鞋可以去網上翻,基本原理都是一樣的。

3.1 什麼叫模型

我理解的模型,就是對現實業務的一種數字化抽象。它既可以是一套數學公式的各種引數組合,也可以是一種多維向量的數字化呈現,就是特徵與數量的關係。

3.2 MLlib模型轉為PMML模型

PMML模型就相當於資料庫中的csv檔案之類的東西,所有支援標準PMML解析的工具都能夠使用。使用方法也非常簡單
model.toPMML("PATH")

3.3 線性模型

線性模型即是凸優化的相關問題,對於凸優化方面,推薦大家參考一下《凸優化》,Stephen Boyd, Lieven Vandenberghe著,王書寧、許鋆、黃曉霖譯,清華大學出版社的那本書,比較有啟發。不過講的是純數學的東西,基礎稍差的童鞋可以慢慢看。這部分還可以參考一下這位大神的部落格

http://blog.csdn.net/xiazdong/article/details/7950084,我覺得寫的還是非常非常通俗易懂的。
線性模型中最常用的應該是線性迴歸模型了,也就是所謂的知道x和y,求y=神馬x這個公式的過程。由於這個公式是“擬合”出來的,換句話來說就是猜的,所以有一個過擬合的說法。
什麼叫過擬合?簡單來說,在xy座標系中,給你2個點,我們很容易的寫出y=ax+b這樣的公式,也就是說有一條線可以連結兩個點;如果給你10個點,讓你去做它的公式,那麼自然是一個公式涵蓋10個點是最準確的,一般可能會是一條曲線,但還是可以寫出來的;但是如果給你10000個點,再去做它的公式,想必就非常的困難了。所以我們需要把這個公式“擬合”出來,換句話就是不要求最準確的,而要求近似的用一個公式相對準確的描述所有的點。
這種擬合出來的線如果是直線,那麼就叫做線性迴歸,也算是擬合的一個簡單的特例,那種用最小二乘法就可以很方便算出來。但一般都是用曲線,所以更常用的是梯度下降。
既然公式是“擬合”出來的,那麼公式所畫出來的線上的點與實際的點相差多少是可接受的呢?這便引出了“損失函式”。損失函式是衡量擬合出來線上的點與實際的點差距的函式。這個“損失”自然越低,擬合的效果越好。
這個損失函式與其係數的關係大概是這樣的。(從網上搞的)
這裡寫圖片描述

如果習慣看2D那種“地形圖”的可以出門左拐百度,這個是個3D的圖,我覺得對於基礎較弱的童鞋看著更為直觀。我們可以發現紅色的就是誤差較高的函式係數所對應的結果,藍色部分就是誤差較低的,也是我們想要的。這便引出了“梯度下降法”。
梯度下降法簡單理解就是我指定一個點,然後按照指定的長度移動,直至移動到最低谷的一種方法(由圖可知,這跟切線斜率有關,判斷的標準自然是導數的變化)。我覺得從凸優化的角度理解就是相當於在座標系裡面畫一個凸多邊形,從一個端點不停移動直至找到另一個所需端點的過程。當然,在凸多邊形是能夠得到唯一的結果,而在這張圖裡我們可以看到,低谷可能不止一個,所以梯度下降得到的最低點的結果可能不是全域性的最低點。所以在使用中需要仔細考慮資料所帶來的損失函式的情況,儘量將這個函式變成凸函式。
(程式碼部分未完待續)