基於Spark的機器學習實踐 (七) - 迴歸演算法
0 相關原始碼
1 迴歸分析概述
1.1 迴歸分析介紹
◆ 迴歸與分類類似,只不過迴歸的預測結果是 連續
的,而分類的預測結果是 離散
的
◆ 如此,使得很多回歸與分類的模型可以經過改動而通用
◆ 因此對於迴歸和分類中基本原理相同或類似的模型 ,不再贅述
1.2 Spark中整合的迴歸演算法
◆ Spark實現的迴歸演算法很豐富 ,有很多模型同樣可以用於分類
1.3 迴歸與分類的區別與聯絡

2 線性迴歸演算法概述
2.1 線性迴歸簡介
◆ 在迴歸分析中,自變數與因變數之間滿足或基本滿足 線性關係
,可以使用線性模型進行擬合
◆ 如迴歸分析中,只有一個自變數的即為一元線性迴歸,其自變數與因變數之間的關係可以用一條直線近似表示
◆ 同理,對於多變數的迴歸稱為 多元線性迴歸
,其可以用一個平面或超平面來表示
2.2 使用線性迴歸的前提條件
◆ 自變數與因變數之間具有線性趨勢,在前面介紹過相關係數
◆ 獨立性
因變數之間取值相互獨立,不存在關聯
2.3 線性迴歸的例子
◆ 例如探究沸點與氣壓的關係,研究浮力與表面積之間的關係,物理上經典的探索力與加速度之間的關係
3 線性迴歸演算法原理
3.1 回顧機器學習模型
◆ 對於統計學習來講,機器學習模型就是一個函式表示式,其訓練過程就是在不斷更新這個函式式的 引數
,以便這個函式能夠對未知資料產生最好的預測效果
◆ 機器學習的這個過程,與人的學習過程原理是一樣的,都是先學習而後使用,故歸屬於人工智慧領域
3.2 何為好的預測效果?
◆ 前面說"以便達到最好的預測效果”, 那麼如何量化"好的預測效果”呢?
◆ 衡量預測效果好壞的函式稱為代價函式(cost function) ,或損失函式(loss function).
◆ 例如:用一個模型預測是否會下雨,如果模型預測錯誤一天,則損失函式加1
那麼機器學習演算法的直接目標就是想方設法調節這個函式的引數
以便能夠使預測錯誤的天數減少,也就是降低損失函式值,同時,也提高了預測的準確率
3.3 再談線性迴歸
◆ 線性迴歸是最簡單的數學模型之一
◆ 線性迴歸的步驟是先用既有的資料,探索自變數X與因變數Y之間存在的關係
這個關係就是線性迴歸模型中的引數.有了它,我們就可以用這個模型對未知資料進行預測
◆ 機器學習的模型基本的訓練過程亦是如此,屬於 監督學習
3.4 線性迴歸模型
◆ 線性迴歸的數學表示式是

◆ 上式分別為一元線性迴歸與寫成矩陣形式的線性迴歸模型
4 最小二乘法
4.1 何為最小二乘法
◆ 又稱最小平方法,通過最小化 殘差平方和
來找到最佳的函式匹配
◆ 即最小二乘法以殘差的平方和作為損失函式,用於衡量模型的好壞
◆ 利用最小二乘法可以實現對 曲線
的擬合
4.2 最小二乘法原理
◆ 以一元線性迴歸為例,演示推倒過程

4.3 最小二乘法例子

5 隨機梯度下降
5.1 何為隨機梯度下降
◆ 隨機梯度下降(SGD)是機器學習中常用的一種優化方法
◆ 它是通過 不斷迭代更新
的手段,來尋找某一個函式的 全域性最優解
的方法
◆ 與最小二乘法類似,都是優化演算法,隨機梯度下降特別適合變數眾多,受控系統複雜的模型,尤其在深度學習中具有十分重要的作用
5.2 從梯度說起
◆ 梯度是微積分中的一個運算元,用來求某函式在該點處沿著哪條路徑 變化最快
,通俗理解即為在哪個路徑上幾何形態更為“陡峭”
◆ 其數學表示式為(以二元函式為例)

5.3 隨機梯度下降原理
◆ 線性模型的梯度下降推倒過程


5.4 隨機梯度下降優點
◆ 隨機梯度下降的"隨機”體現在進行梯度計算的樣本是隨機抽取的n個,與直接採用全部樣本相比,這樣 計算量更少
◆ 隨機梯度下降善於解決大量訓練樣本的情況
◆ 學習率
決定了梯度下降的速度,同時,在SGD的基礎上引入了”動量”的概念,從而進一步加速收斂速度的優化演算法也陸續被提出
6 實戰Spark預測房價 - 專案展示及程式碼概覽
-
程式碼
資料載入及轉換
-
資料集檔案 - Price降序排列
由於訓練集有序,為提高準確率,應打亂順序-shuffle
-
預測結果
7 邏輯迴歸演算法及原理概述
7.1 線性 VS 非線性
◆ 線性簡言之就是兩個變數之間存在一 次方函式關係
◆ 自然界中變 量間更多的關係是非線性的,絕對的線性關係相對很少
◆ 因此,在選擇數學模型進行擬合的時候,很多情況使用非線性函式構造的模型可能比線性函式模型更好
7.2 邏輯迴歸
◆ 邏輯迴歸即logistic迴歸,是一種廣義上的線性迴歸,但是與線性迴歸模型不同的是,其引入了非線性函式
◆ 因此,邏輯迴歸可以用於非線性關係的迴歸擬合,這一點是線性迴歸所不具備的
7.3 邏輯迴歸演算法原理
Sigmoid函式
◆ 邏輯函式 (英語: logistic function )或 邏輯曲線 (英語: logistic curve )是一種常見的S函式,它是 皮埃爾·弗朗索瓦·韋呂勒 在1844或1845年在研究它與人口增長的關係時命名的。
-
一個簡單的Logistic函式可用下式表示:
廣義Logistic曲線可以模仿一些情況人口增長( P )的S形曲線。起初階段大致是指數增長;然後隨著開始變得飽和,增加變慢;最後,達到成熟時增加停止。
-
標準Logistic函式
邏輯迴歸原理
◆ 改進線性迴歸模型

8 正則化原理
8.1 模型是訓練得越多越好嗎?
◆ 我們通常理解是“千錘百煉”肯定質量過硬,而機器學習是一樣的嗎?

8.2 過擬合、欠擬合與剛剛好
◆ 人學習太過容易不懂得變通,過於教條,變成所謂的”書呆子”
機器學習也是一樣
◆ 我們把機器學習模型訓練得太過 ,陷入“教條”的狀態稱之為 過擬合
(over fitting)
◆ 反之,預測能力不強,宛若“智障”的模型稱之為 欠擬合
(under fitting)
◆ 下面分別演示了用三個不同的數學模型對樣本點進行擬合,產生的三種狀態

8.3 如何達到剛剛好呢?
◆ 對於欠擬合狀態,只需要加大訓練輪次,增加特徵量,使用非線性模型等即可實現
◆ 而相反,過擬合卻往往更加棘手
◆ 常用的減少過擬合的方法有交叉驗證法,正則化方法等
8.3.1 交叉驗證法
◆ 所謂交叉驗證法,就是在訓練過程中,將 訓練資料集
拆分為 訓練集
和 驗證集
兩個部分
- 訓練集專用訓練模型
- 驗證集只為檢驗模型預測能力
當二者同時達到最優,即是模型最優的時候

8.4 正則化原理
◆ 我們在前面的示例中可以看到,對於過擬合現象,往往都是模型過於複雜,超過實際需要
◆ 那麼,能否在損失函式的計算中,對模型的複雜程度進行量化,越複雜的模型,就越對其進行”懲罰”, 以便使模型更加”中庸”
◆ 上面的思路就是正則化的思想,通過動態調節懲罰程度, 來防止模型過於複雜
◆ 令損失函式為

◆ 則經過優化的引數為

◆ 其中

為正則化項,反應了模型的複雜程度,在不同演算法中有差異,例如可以為

9實戰Spark邏輯迴歸
-
該演算法官方歸類於分類演算法
-
邏輯迴歸演算法
-
分類結果(因為分類,所以都是顯示的都是1500)
10 保序迴歸演算法概述
10.1 何為保序迴歸?
◆ 保序迴歸是用於擬合 非遞減資料
(非遞增也一樣)的一種迴歸分析,同時,保序迴歸能夠使得擬合之後的誤差最小化
保序迴歸(英文: Isotonic regression )在數值分析中指的是在保序約束下搜尋一個加權 w 的最小二乘 y 以擬合變量 x,它是一個二次規劃問題:

保序迴歸應用於統計 推理 、多維標度等研究中。
◆ 比較保序迴歸與線性迴歸

10.2 保序迴歸的應用
◆ 保序迴歸用於擬合非遞減資料 ,不需要事先判斷線性與否,只需資料總體的趨勢是非遞減的即可
例如研究某種藥物的使用劑量與藥效之間的關係
11 保序迴歸演算法原理
11.1 保序迴歸的原理
◆ 適用保序迴歸的前提應是結果資料的非遞減,那麼,我們可以通過判斷資料是否發生減少來來觸發計算
◆ 演算法描述

◆ Spark實現求解該模型的演算法是pool adjacent violators演算法(PAVA)
◆ 例如原序列為{1,3,2,4,6}經過保序迴歸為{1,3,3,3,6}
12 實戰保序迴歸資料分析

保序迴歸屬於迴歸演算法族。標準保序迴歸是一個問題,給定一組有限的實數Y = y1,y2,...,yn表示觀察到的響應,X = x1,x2,...,xn未知的響應值擬合找到一個函式最小化

相對於x1≤x2≤...≤xn的完全順序,其中 wi
是正的權重。由此產生的函式稱為保序迴歸。
它可被視為順序限制約束的最小二乘問題。基本上保序迴歸是最適合原始資料點的單調函式。
我們實現了一個 pool adjacent violators algorithm
演算法,該演算法使用一種並行化保序迴歸的方法。
訓練輸入是一個DataFrame,它包含三列 : 標籤,功能和權重。
此外,IsotonicRegression演算法有一個稱為等滲預設為true的可選引數。該論證指定等滲迴歸是等滲的(單調遞增的)還是反單調的(單調遞減的)。
訓練返回 IsotonicRegressionModel
,可用於預測已知和未知特徵的標籤。
保序迴歸的結果被視為分段線性函式。因此,預測規則是:
1 如果預測輸入與訓練特徵完全匹配,則返回相關聯的預測。如果有多個具有相同特徵的預測,則返回其中一個。哪一個是未定義的(與java.util.Arrays.binarySearch相同)
2 如果預測輸入低於或高於所有訓練特徵,則分別返回具有最低或最高特徵的預測。
3 如果存在具有相同特徵的多個預測,則分別返回最低或最高。

-
程式碼
-
計算結果,預測效果最為驚豔!!!