AI項目實戰-機器學習算法(基礎篇)

  說明:本文的側重點在於快速瞭解機器學習在項目中涉及到常見算法概念、應用,以及在保持核心原理本質的前提條件下,儘量用簡單易懂的方式介紹這些算法原理,拋磚引玉,打破心理障礙,讓AI儘快走進項目,服務於社會(後續會逐漸對原理進行展開深入分析,瞭解了原理,用起來才能得心應手)。

一、分類算法

  分類算法是應用分類規則對記錄進行目標映射,將其劃分到不同的分類中,構建具有泛化能力的算法模型,即構建映射規則來預測未知樣本的類別。分類算法包括預測和描述兩種,經過訓練集學習的預測模型在遇到未知記錄時,應用規則對其進行類別劃分,而描述型的分類主要是對現有數據集中特徵進行解釋並進行區分,例如對動植物的各項特徵進行描述,並進行標記分類,由這些特徵來決定其屬於哪一類目。

1 、K-近鄰算法(KNN)

   (1)K Nearest Neighbor算法⼜叫KNN算法,如果⼀個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的⼤多數屬於某⼀個類別,則該樣本也屬於這個類別。

  (2)來源:KNN算法最早是由Cover和Hart提出的⼀種分類算法

  (3)原理:(高中數學知識,兩點之間的距離公式)

  兩個樣本的距離可以通過如下公式計算,⼜叫歐式距離

   

(4)核心API

  sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)

  n_neighbors:int,可選(默認= 5),k_neighbors查詢默認使⽤的鄰居數

  (4.2)k值選擇問題

  KNN中K值⼤⼩選擇對模型的影響

   K值過⼩: 容易受到異常點的影響 容易過擬合

  k值過⼤: 受到樣本均衡的問題 容易⽋擬合

 (5)優缺點

 (5.1)優點:

   簡單有效

   重新訓練的代價低

   適合類域交叉樣本,KNN⽅法主要靠周圍有限的鄰近的樣本,⽽不是靠判別類域的⽅法來確定所屬類別的,因此對於類域的交 叉或重疊較多的待分樣本集來說,KNN⽅法較其他⽅法更爲適合。

     適合⼤樣本⾃動分類,該算法⽐較適⽤於樣本容量⽐較⼤的類域的⾃動分類,⽽那些樣本容量較⼩的類域採⽤這種算法⽐較容易 產⽣誤分。

 (5.2)缺點:

        惰性學習,KNN算法是懶散學習⽅法(lazy learning,基本上不學習),⼀些積極學習的算法要快很多;

       類別評分不是規格化 ,不像⼀些通過概率評分的分類;

       輸出可解釋性不強,例如決策樹的輸出可解釋性就較強;

       對不均衡的樣本不擅⻓ 當樣本不平衡時,如⼀個類的樣本容量很⼤,⽽其他類樣本容量很⼩時,有可能導致當輸⼊⼀個新樣本時,該樣本的K個鄰居中⼤容量類的樣本佔多數。該算法只計算“最近的”鄰居樣本,某⼀類的樣本數量很 ⼤,那麼或者這類樣本並不接近⽬標樣本,或者這類樣本很靠近⽬標樣本。⽆論怎樣,數量並不能影響運⾏結果。可以採⽤權值的⽅法(和該樣本距離⼩的鄰居權值⼤)來改進;

      計算量較⼤,⽬前常⽤的解決⽅法是事先對已知樣本點進⾏剪輯,事先去除對分類作⽤不⼤的樣本。

2、決策樹算法

(1)決策樹: 是⼀種樹形結構,本質是⼀顆由多個判斷節點組成的樹 其中每個內部節點表示⼀個屬性上的判斷, 每個分⽀代表⼀個判斷結果的輸出, 最後每個葉節點代表⼀種分類結果。 

(2)特點: 決策樹擅長對人物、位置、事物的不同特徵、品質、特性進行評估,可應用於基於規則的信用評估、比賽結果預測等。決策過程是從根節點出發,測試不同的特徵屬性,按照結果的不同選擇分支,最終落到某一葉子節點,獲得分類結果。主要的決策樹算法有ID3(Iterative Dichotomiser (迭代⼆分器))、C4.5、C5.0、CART、CHAID、SLIQ、SPRINT等。

(3)決策時劃分依據:

 (3.1)決策樹的劃分依據⼀----信息增益:以某特徵劃分數據集前後的熵的差值。熵可以表示樣本集合的不確定性,熵越⼤,樣本的不確定性就越⼤。 因此可以使⽤劃分前後集合熵的差值來衡量使⽤當前特徵對於樣本集合D劃分效果的好壞。

  信息增益 = entroy(前) - entroy(後)

  注:信息增益表示得知特徵X的信息⽽使得類Y的信息熵減少的程度

      ⼀般⽽⾔,信息增益越⼤,則意味着使⽤屬性 a 來進⾏劃分所獲得的"純度提升"越⼤。因此,我們可⽤信息增益來進⾏ 決策樹的劃分屬性選擇,著名的 ID3 決策樹學習算法 [Quinlan, 1986] 就是以信息增益爲準則來選擇劃分屬性。

 (3.2)決策樹的劃分依據⼆----信息增益率

 (3.3)決策樹的劃分依據三 ----基尼值和基尼指數

  CART 決策樹使⽤"基尼指數" (Gini index)來選擇劃分屬性. CART 是Classification and Regression Tree的簡稱,這是⼀種著名的決策樹學習算法,分類和迴歸任務都可⽤。

  基尼值Gini(D):從數據集D中隨機抽取兩個樣本,其類別標記不⼀致的概率。故,Gini(D)值越⼩,數據集D的純度越⾼。  

(4)常⻅決策樹的啓發函數⽐較

  

  

(5)決策樹算法介紹

 (5.1)ID3 算法

   存在的缺點:

    (1) ID3算法在選擇根節點和各內部節點中的分⽀屬性時,採⽤信息增益作爲評價標準。信息增益的缺點是傾向於選擇 取值較多的屬性,在有些情況下這類屬性可能不會提供太多有價值的信息.

    (2) ID3算法只能對描述屬性爲離散型屬性的數據集構造決策樹。

   (5.2)C4.5算法

    優點: 決策樹分類原理 127 產⽣的分類規則易於理解,準確率較⾼。

    缺點: 在構造樹的過程中,需要對數據集進⾏多次的順序掃描和排序,因⽽導致算法的低效。 此外,C4.5只適合於能夠駐留於內存的數據集,當訓練集⼤得⽆法在內存容納時程序⽆法運⾏。

   (5.3)CART算法

    CART算法相⽐C4.5算法的分類⽅法,採⽤了簡化的⼆叉樹模型,同時特徵選擇採⽤了近似的基尼係數來簡化計算。 C4.5不⼀定是⼆叉樹,但CART⼀定是⼆叉樹。

    (5.4)多變量決策樹

    ⽆論是ID3, C4.5還是CART,在做特徵選擇的時候都是選擇最優的⼀個特徵來做分類決策,但是⼤多數,分類決策 不應該是由某⼀個特徵決定的,⽽是應該由⼀組特徵決定的。這樣決策得到的決策樹更加準確。這個決策樹叫做多變量決策樹(multi-variate decision tree)。在選擇最優特徵的時候,多變量決策樹不是選擇某⼀個最優特徵,⽽是選擇最優的 ⼀個特徵線性組合來做決策。這個算法的代表是OC1。 如果樣本發⽣⼀點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習⾥⾯的隨機森林之類的⽅法解決。

3、⽀持向量機(SVM)

  SVM全稱是supported vector machine(⽀持向量機),即尋找到⼀個超平⾯使樣本分成兩類,並且間隔最⼤。 SVM能夠執⾏線性或⾮線性分類、迴歸,甚⾄是異常值檢測任務。它是機器學習領域最受歡迎的模型之⼀。SVM特別適⽤於中⼩型複雜數據集的分類。

 (0) 概述:

  支持向量機(Support Vector Machine,SVM)是由瓦普尼克(Vapnik)等人設計的一種分類器,其主要思想是將低維特徵空間中的線性不可分進行非線性映射,轉化爲高維空間的線性可分。此外,應用結構風險最小理論在特徵空間優化分割超平面,可以找到儘可能寬的分類邊界,特別適合兩分類的問題,例如,在二維平面圖中某些點是雜亂排布的,無法用一條直線分爲兩類,但是在三維空間中,可能通過一個平面將其劃分。爲了避免在低維空間向高維空間的轉化過程中增加計算複雜性和“維數災難”,支持向量機應用核函數,不需要關心非線性映射的顯式表達式,直接在高維空間建立線性分類器,優化了計算複雜度。支持向量機常見的核函數有線性核函數、多項式核函數、徑向基函數和二層神經網絡核函數等。支持向量機的目標變量以二分類最佳,雖然可以用於多分類,但效果不好。與其他分類算法相比,支持向量機對小樣本數據集的分類效果更好。

(1)硬間隔分類

  在上⾯我們使⽤超平⾯進⾏分割數據的過程中,如果我們嚴格地讓所有實例都不在最⼤間隔之間,並且位於正確的⼀ 邊,這就是硬間隔分類。 硬間隔分類有兩個問題,⾸先,它只在數據是線性可分離的時候纔有效;其次,它對異常值⾮常敏感。

(2)軟間隔分類

  要避免這些問題,最好使⽤更靈活的模型。⽬標是儘可能在保持最⼤間隔寬闊和限制間隔違例(即位於最⼤間隔之上, 甚⾄在錯誤的⼀邊的實例)之間找到良好的平衡,這就是軟間隔分類。

  

(3)在Scikit-Learn的SVM類中,可以通過超參數C來控制這個平衡:C值越⼩,則間隔越寬,但是間隔違例也會越多。上圖 顯示了在⼀個⾮線性可分離數據集上,兩個軟間隔SVM分類器各⾃的決策邊界和間隔。 左邊使⽤了⾼C值,分類器的錯誤樣本(間隔違例)較少,但是間隔也較⼩。 右邊使⽤了低C值,間隔⼤了很多,但是位於間隔上的實例也更多。看起來第⼆個分類器的泛化效果更好,因爲⼤多數 間隔違例實際上都位於決策邊界正確的⼀邊,所以即便是在該訓練集上,它做出的錯誤預測也會更少。

(4)SVM的核⽅法

  將原始輸⼊空間映射到新的特徵空間,從⽽,使得原本線性不可分的樣本可能在覈空間可分。

(5)核函數概念

  核函數,是將原始輸⼊空間映射到新的特徵空間,從⽽,使得原本線性不可分的樣本可能在覈空間可分。

  

(6)常⻅核函數

  

  線性核和多項式核: 這兩種核的作⽤也是⾸先在屬性空間中找到⼀些點,把這些點當做base,核函數的作⽤就是找與該點距離和⻆ 度滿⾜某種關係的樣本點。 當樣本點與該點的夾⻆近乎垂直時,兩個樣本的歐式⻓度必須⾮常⻓才能保證滿⾜線性核函數⼤於0;⽽當樣 本點與base點的⽅向相同時,⻓度就不必很⻓;⽽當⽅向相反時,核函數值就是負的,被判爲反類。即,它在空間上劃分出⼀個梭形,按照梭形來進⾏正反類劃分。 RBF核: ⾼斯核函數就是在屬性空間中找到⼀些點,這些點可以是也可以不是樣本點,把這些點當做base,以這些 base爲圓⼼向外擴展,擴展半徑即爲帶寬,即可劃分數據。 換句話說,在屬性空間中找到⼀些超圓,⽤這些超圓來判定正反類。 Sigmoid核: 同樣地是定義⼀些base, 核函數就是將線性核函數經過⼀個tanh函數進⾏處理,把值域限制在了-1到1上。 總之,都是在定義距離,⼤於該距離,判爲正,⼩於該距離,判爲負。⾄於選擇哪⼀種核函數,要根據具體的樣本 分佈情況來確定。

  ⼀般有如下指導規則:

    1) 如果Feature的數量很⼤,甚⾄和樣本數量差不多時,往往線性可分,這時選⽤LR或者線性核Linear;

    2) 如果Feature的數量很⼩,樣本數量正常,不算多也不算少,這時選⽤RBF核;

    3) 如果Feature的數量很⼩,⽽樣本的數量很⼤,這時⼿動添加⼀些Feature,使得線性可分,然後選⽤LR或 者線性核Linear;

    4) 多項式核⼀般很少使⽤,效率不⾼,結果也不優於RBF;

    5) Linear核參數少,速度快;RBF核參數多,分類結果⾮常依賴於參數,需要交叉驗證或⽹格搜索最佳參 數,⽐較耗時;

    6)應⽤最⼴的應該就是RBF核,⽆論是⼩樣本還是⼤樣本,⾼維還是低維等情況,RBF核函數均適⽤。

(7)SVM⽅法既可以⽤於分類(⼆/多分類),也可⽤於迴歸和異常值檢測。 SVM具有良好的魯棒性,對未知數據擁有很強的泛化能⼒,特別是在數據量較少的情況下,相較其他傳統機器學習 算法具有更優的性能。

(8)使⽤SVM作爲模型時,通常採⽤如下流程:

  1. 對樣本數據進⾏歸⼀化

  2. 應⽤核函數對樣本進⾏映射(最常採⽤和核函數是RBF和Linear,在樣本線性可分時,Linear效果要⽐RBF好)

  3. ⽤cross-validation和grid-search對超參數進⾏優選

  4. ⽤最優參數訓練得到模型

(9)sklearn中⽀持向量分類主要有三種⽅法:SVC、NuSVC、LinearSVC,擴展爲三個⽀持向量迴歸⽅法:SVR、 NuSVR、LinearSVR。 SVC和NuSVC⽅法基本⼀致,唯⼀區別就是損失函數的度量⽅式不同 NuSVC中的nu參數和SVC中的C參數; LinearSVC是實現線性核函數的⽀持向量分類,沒有kernel參數。

(10)SVM優缺點

  SVM的優點:

    在⾼維空間中⾮常⾼效;

    即使在數據維度⽐樣本數量⼤的情況下仍然有效;

    在決策函數(稱爲⽀持向量)中使⽤訓練集的⼦集,因此它也是⾼效利⽤內存的;

    通⽤性:不同的核函數與特定的決策函數⼀⼀對應;

  SVM的缺點:

    如果特徵數量⽐樣本數量⼤得多,在選擇核函數時要避免過擬合;

    對缺失數據敏感;

    對於核函數的⾼維映射解釋⼒不強。

3、神經網絡

  神經網絡包括輸入層、隱藏層、輸出層,每一個節點代表一個神經元,節點之間的連線對應權重值,輸入變量經過神經元時會運行激活函數,對輸入值賦予權重並加上偏置,將輸出結果傳遞到下一層中的神經元,而權重值和偏置在神經網絡訓練過程中不斷修正。神經網絡的訓練過程主要包括前向傳輸和逆向反饋,將輸入變量逐層向前傳遞最後得到輸出結果,並對比實際結果,逐層逆向反饋誤差,同時對神經元中權重值和偏置進行修正,然後重新進行前向傳輸,依此反覆迭代直到最終預測結果與實際結果一致或在一定的誤差範圍內。與神經網絡相關的基礎概念有感知器、反向傳播算法、Hopfield神經網絡、自組織映射(SOM)、學習矢量量化(LVQ)等,這些概念將在神經網絡一章中詳細說明。BP神經網絡的結果準確性與訓練集的樣本數量和質量有關,如果樣本數量過少可能會出現過擬合的問題,無法泛化新樣本;而且BP神經網絡對訓練集中的異常點比較敏感,需要分析人員對數據做好預處理,例如數據標準化、去除重複數據、移除異常數據,從而提高BP神經網絡的性能。由於神經網絡是基於歷史數據構建的模型,因此,隨着新的數據不斷產生,需要進行動態優化,例如隨着時間變化,應用新的數據對模型重新訓練,調整網絡的結構和參數值。

 

二、迴歸分析

  迴歸分析是一種研究自變量和因變量之間關係的預測模型,用於分析當自變量發生變化時因變量的變化值,要求自變量相互獨立。

 1、線性迴歸

  概念:線性迴歸(Linear regression)是利⽤迴歸⽅程(函數)對⼀個或多個⾃變量(特徵值)和因變量(⽬標值)之間關係進⾏建模的 ⼀種分析⽅式。

  特點:只有⼀個⾃變量的情況稱爲單變量回歸,多於⼀個⾃變量情況的叫做多元迴歸

  

  eg:房⼦價格 = 0.368×中⼼區域的距離 + 0.131×通勤時長 + 0.239×⾃住房平均房價 + 0.118×安全,我們看到特徵值與⽬標值之間建⽴了⼀個關係,這個關係可以理解爲線性模型。

  模型分類:線性迴歸當中主要有兩種模型,⼀種是線性關係,另⼀種是⾮線性關係。

 (2)線性迴歸中總的損失函數

   

  如何去求模型當中的W,使得損失最⼩?(⽬的是找到最⼩損失對應的W值)

  線性迴歸經常使⽤的兩種優化算法:正規⽅程、梯度下降法

   

   算法選擇依據:

  (1)⼩規模數據:

    正規⽅程:LinearRegression(不能解決擬合問題)

    嶺迴歸

  (2)⼤規模數據:

    梯度下降法:SGDRegressor

2、邏輯迴歸

  邏輯迴歸(Logistic Regression)是機器學習中的⼀種分類模型,邏輯迴歸是⼀種分類算法,雖然名字中帶有迴歸。由 於算法的簡單和⾼效,在實際中應⽤⾮常⼴泛。

 (1)邏輯迴歸輸入

   

 (2)激活函數

  判斷標準 迴歸的結果輸⼊到sigmoid函數當中 輸出結果:[0, 1]區間中的⼀個概率值,默認爲0.5爲閾值

  

  邏輯迴歸最終的分類是通過屬於某個類別的概率值來判斷是否屬於某個類別,並且這個類別默認標記爲1(正例), 另外的⼀個類別會標記爲0(反例)。(⽅便損失計算)

  輸出結果解釋(重要):假設有兩個類別A,B,並且假設我們的概率值爲屬於A(1)這個類別的概率值。現在有⼀個樣本的 輸⼊到邏輯迴歸輸出結果0.55,那麼這個概率值超過0.5,意味着我們訓練或者預測的結果就是A(1)類別。那麼反之,如 果得出結果爲0.3那麼,訓練或者預測結果就爲B(0)類別。

 (3)損失及優化

  損失:邏輯迴歸的損失,稱之爲對數似然損失。

  優化:同樣使⽤梯度下降優化算法,去減少損失函數的值。這樣去更新邏輯迴歸前⾯對應算法的權重參數,提升原本屬於1類 別的概率,降低原本是0類別的概率。

 

3、多項式迴歸

  在迴歸分析中有時會遇到線性迴歸的直線擬合效果不佳,如果發現散點圖中數據點呈多項式曲線時,可以考慮使用多項式迴歸來分析。使用多項式迴歸可以降低模型的誤差,但是如果處理不當易造成模型過擬合,在迴歸分析完成之後需要對結果進行分析,並將結果可視化以查看其擬合程度。

 

4、嶺迴歸

  嶺迴歸在共線性數據分析中應用較多,也稱爲脊迴歸,它是一種有偏估計的迴歸方法,是在最小二乘估計法的基礎上做了改進,通過捨棄最小二乘法的無偏性,使迴歸係數更加穩定和穩健。其中R方值會稍低於普通迴歸分析方法,但迴歸係數更加顯著,主要用於變量間存在共線性和數據點較少時。

 

引申:迴歸決策樹

我們主要可以把其分爲兩類,連續型數據和離散型數據。在⾯對不同數據時,決策樹也 可以分爲兩⼤類型: 分類決策樹和迴歸決策樹。 前者主要⽤於處理離散型數據,後者主要⽤於處理連續型數據。

   關於數據類型,我們主要可以把其分爲兩類,連續型數據和離散型數據。在⾯對不同數據時,決策樹也 可以分爲兩⼤類型:

  分類決策樹和迴歸決策樹。 前者主要⽤於處理離散型數據,後者主要⽤於處理連續型數據。

  在迴歸樹中,採⽤的是啓發式的⽅法。假如我們有n個特徵,每個特徵有s (i ∈ (1, n))個取值,那我們遍歷所有特徵, 嘗試該特徵所有取值,對空間進⾏劃分,直到取到特徵 j 的取值 s,使得損失函數最⼩,這樣就得到了⼀個劃分點。描 述該過程的公式如下:

  

  假設將輸⼊空間劃分爲M個單元:R , R , ..., R 那麼每個區域的輸出值就是:c = avg(y ∣x ∈ R )也就是該區域內所 有點y值的平均數。

  (2)算法描述

  輸⼊:訓練數據集D: 輸出:迴歸樹f(x). 在訓練數據集所在的輸⼊空間中,遞歸的將每個區域劃分爲兩個⼦區域並決定每個⼦區域上的輸出值,構建⼆叉決 策樹:

  

三、集成學習算法簡介

1、集成學習相關概念

 (1)集成學習通過建⽴⼏個模型來解決單⼀預測問題。它的⼯作原理是⽣成多個分類器/模型,各⾃獨⽴地學習和作出預 測。這些預測最後結合成組合預測,因此優於任何⼀個單分類的做出預測。

 (2)機器學習兩個任務:

    任務⼀:如何優化訓練數據 —> 主要⽤於解決⽋擬合問題

    任務⼆:如何提升泛化性能 —> 主要⽤於解決過擬合問題

 (3)boosting和Bagging

    

  只要單分類器的表現不太差,集成學習的結果總是要好於單分類器的。

2、Bagging和隨機森林

  (1)Bagging集成原理

  (2)隨機森林構造過程

  在機器學習中,隨機森林是⼀個包含多個決策樹的分類器,並且其輸出的類別是由個別樹輸出的類別的衆數⽽定。 隨機森林 = Bagging + 決策樹

  

  隨機森林夠造過程中的關鍵步驟(M表示特徵數⽬):
   1)⼀次隨機選出⼀個樣本,有放回的抽樣,重複N次(有可能出現重複的樣本)
   2) 隨機去選出m個特徵, m <<M,建⽴決策樹

 (3)包外估計 (Out-of-Bag Estimate)

  1)定義

  隨機森林的 Bagging 過程,對於每⼀顆訓練出的決策樹 g ,與數據集 D 有如下關係:

 

  對於星號的部分,即是沒有選擇到的數據,稱之爲 Out-of-bag(OOB)數據,當數據⾜夠多,對於任意⼀組數據 (x , y ) 是包外數據的概率爲:

  

 

  由於基分類器是構建在訓練樣本的⾃助抽樣集上的,只有約 63.2% 原樣本集出現在中,⽽剩餘的 36.8% 的數據作爲包 外數據,可以⽤於基分類器的驗證集。 經驗證,包外估計是對集成分類器泛化誤差的⽆偏估計. 在隨機森林算法中數據集屬性的重要性、分類器集強度和分類器間相關性計算都依賴於袋外數據。

  2)用途

  當基學習器是決策樹時,可使⽤包外樣本來輔助剪枝 ,或⽤於估計決策樹中各結點的後驗概率以輔助對零訓練樣 本結點的處理; 當基學習器是神經⽹絡時,可使⽤包外樣本來輔助早期停⽌以減⼩過擬合 。

 (4)bagging集成優點

  Bagging + 決策樹/線性迴歸/邏輯迴歸/深度學習… = bagging集成學習⽅法 經過上⾯⽅式組成的集成學習⽅法: 1. 均可在原有算法上提⾼約2%左右的泛化正確率 2. 簡單, ⽅便, 通⽤

3、Boosting

  簡⽽⾔之:每新加⼊⼀個弱學習器,整體能⼒就會得到提升,代表算法:Adaboost,GBDT,XGBoost,LightGBM

  (1)bagging集成與boosting集成的區別:

   區別⼀:數據⽅⾯ Bagging:對數據進⾏採樣訓練; Boosting:根據前⼀輪學習結果調整數據的重要性。

     區別⼆:投票⽅⾯ Bagging:所有學習器平權投票; Boosting:對學習器進⾏加權投票。

   區別三:學習順序 Bagging的學習是並⾏的,每個學習器沒有依賴關係; Boosting學習是串⾏,學習有先後順序。

   區別四:主要作⽤ Bagging主要⽤於提⾼泛化性能(解決過擬合,也可以說降低⽅差) Boosting主要⽤於提⾼訓練精度 (解決⽋擬合,也可以說降低偏差)

  

 

4、AdaBoost介紹

  (1)構造過程細節

  

 

  (2)即

  

 

 5、GBDT介紹

  GBDT 的全稱是 Gradient Boosting Decision Tree,梯度提升樹,在傳統機器學習算法中,GBDT算的上TOP3的算法。 想要理解GBDT的真正意義,那就必須理解GBDT中的Gradient Boosting 和Decision Tree分別是什麼?

  (1)Decision Tree:CART迴歸樹

  ⾸先,GBDT使⽤的決策樹是CART迴歸樹,⽆論是處理迴歸問題還是⼆分類以及多分類,GBDT使⽤的決策樹通通都 是都是CART迴歸樹。 爲什麼不⽤CART分類樹呢? 因爲GBDT每次迭代要擬合的是梯度值,是連續值所以要⽤迴歸樹。 對於迴歸樹算法來說最重要的是尋找最佳的劃分點,那麼迴歸樹中的可劃分點包含了所有特徵的所有可取的值。 在分類樹中最佳劃分點的判別標準是熵或者基尼係數,都是⽤純度來衡量的,但是在迴歸樹中的樣本標籤是連續數值, 所以再使⽤熵之類的指標不再合適,取⽽代之的是平⽅誤差,它能很好的評判擬合程度。

  1)迴歸樹⽣成算法

  

   2)Gradient Boosting: 擬合負梯度

     梯度提升樹(Grandient Boosting)是提升樹(Boosting Tree)的⼀種改進算法,所以在講梯度提升樹之前先來說⼀下提升樹。 先來個通俗理解:假如有個⼈30歲,我們⾸先⽤20歲去擬合,發現損失有10歲,這時我們⽤6歲去擬合剩下的損失,發現差距還有4歲,第三輪我們⽤3歲擬合剩下的差距,差距就只有⼀歲了。如果我們的迭代輪數還沒有完,可以繼續迭代 下⾯,每⼀輪迭代,擬合的歲數誤差都會減⼩。最後將每次擬合的歲數加起來便是模型輸出的結果。

  

  (2)GBDT算法原理

  

  

 四、聚類算法

   聚類是基於無監督學習的分析模型,不需要對原始數據進行標記,按照數據的內在結構特徵進行聚集形成簇羣,從而實現數據的分離。聚類與分類的主要區別是其並不關心數據是什麼類別,而是把相似的數據聚集起來形成某一類簇。在聚類的過程中,首先選擇有效特徵構成向量,然後按照歐氏距離或其他距離函數進行相似度計算,並劃分聚類,通過對聚類結果進行評估,逐漸迭代生成新的聚類。聚類應用領域廣泛,可以用於發現不同的企業客戶羣體特徵、消費者行爲分析、市場細分、交易數據分析、動植物種羣分類、醫療領域的疾病診斷、環境質量檢測等,還可用於互聯網和電商領域的客戶分析、行爲特徵分類等。在數據分析過程中,可以先用聚類對數據進行探索,發現其中蘊含的類別特點,然後再用分類等方法分析每一類的特徵。聚類方法可分爲基於層次的聚類(Hierarchical Method)、基於劃分的聚類(PartitioningMethod,PAM)、基於密度的聚類、基於約束的聚類、基於網絡的聚類等。基於層次的聚類是將數據集分爲不同的層次,並採用分解或合併的操作進行聚類,主要包括BIRCH(Balanced Iterative Reducing and Clustering using Hierarchies)、CURE(Clustering UsingRepresentatives)等。基於劃分的聚類是將數據集劃分爲k個簇,並對其中的樣本計算距離以獲得假設簇中心點,然後以簇的中心點重新迭代計算新的中心點,直到k個簇的中心點收斂爲止。基於劃分的聚類有k-均值等。基於密度的聚類是根據樣本的密度不斷增長聚類,最終形成一組“密集連接”的點集,其核心思想是隻要數據的密度大於閾值就將其合併成一個簇,可以過濾噪聲,聚類結果可以是任意形狀,不必爲凸形。基於密度的聚類方法主要包括DBSCAN(Density-Based Spatial Clustering of Applicationwith Noise)、OPTICS(Ordering Points To Identify the Clustering Structure)等。

 (1)聚類算法在現實中的應⽤

   ⽤戶畫像,⼴告推薦,Data Segmentation,搜索引擎的流量推薦,惡意流量識別 基於位置信息的商業推送,新聞聚類,篩選排序 圖像分割,降維,識別;離羣點檢測;信⽤卡異常消費;發掘相同功能的基因⽚段

  (2)聚類算法:

   ⼀種典型的⽆監督學習算法,主要⽤於將相似的樣本⾃動歸到⼀個類別中。 在聚類算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算⽅法,會得到不同的聚類結 果,常⽤的相似度計算⽅法有歐式距離法。

 (3)聚類算法與分類算法最⼤的區別

     聚類算法是⽆監督的學習算法,⽽分類算法屬於監督的學習算法。

 (4)k-means其實包含兩層內容:

    K : 初始中⼼點個數(計劃聚類數);

   means:求中⼼點到其他數據點距離的平均值;

 (5)k-means聚類步驟

  1、隨機設置K個特徵空間內的點作爲初始的聚類中⼼

  2、對於其他每個點計算到K箇中⼼的距離,未知的點選擇最近的⼀個聚類中⼼點作爲標記類別

  3、接着對着標記的聚類中⼼之後,重新計算出每個聚類的新中⼼點(平均值)

  4、如果計算得出的新中⼼點與原中⼼點⼀樣(質⼼不再移動),那麼結束,否則重新進⾏第⼆步過程

 (6)k-means算法優缺點總結

  優點:

    1.原理簡單(靠近中⼼點),實現容易;

    2.聚類效果中上(依賴K的選擇);

    3.空間複雜度o(N),時間複雜度o(IKN);

  缺點:

    1.對離羣點,噪聲敏感 (中⼼點易偏移);

    2.很難發現⼤⼩差別很⼤的簇及進⾏增量計算;

    3.結果不⼀定是全局最優,只能保證局部最優(與K的個數及初值選取有關)。

(7)算法優化

  

 

五、特徵降維

  (1)降維是指在某些限定條件下,降低隨機變量(特徵)個數,得到⼀組“不相關”主變量的過程

  (2)降維的兩種⽅式

    特徵選擇

     1)數據中包含冗餘或⽆關變量(或稱特徵、屬性、指標等),旨在從原有特徵中找出主要特徵。

     2)Filter(過濾式):主要探究特徵本身特點、特徵與特徵和⽬標值之間關聯

      ⽅差選擇法:低⽅差特徵過濾

      相關係數 Embedded (嵌⼊式):算法⾃動選擇特徵(特徵與⽬標值之間的關聯)

      決策樹:信息熵、信息增益 正則化:L1、L2 深度學習:卷積等

      3)低⽅差特徵過濾(把⽅差⽐較⼩的某⼀列進⾏剔除)

      刪除低⽅差的⼀些特徵,前⾯講過⽅差的意義。再結合⽅差的⼤⼩來考慮這個⽅式的⻆度。

      特徵⽅差⼩:某個特徵⼤多樣本的值⽐較相近;

      特徵⽅差⼤:某個特徵很多樣本的值都有差別;

   

    主成分分析(可以理解⼀種特徵提取的⽅式)

     1)⾼維數據轉化爲低維數據的過程,在此過程中可能會捨棄原有數據、創造新的變量

     2)是數據維數壓縮,儘可能降低原數據的維數(複雜度),損失少量信息。

     3)迴歸分析或者聚類分析當中

  (3)相關係數

    主要實現⽅式: ⽪爾遜相關係數 斯⽪爾曼相關係數 ⽪爾遜相關係數 通過具體值的⼤⼩進⾏計算 相對複雜 api:from scipy.stats import pearsonr 返回值,越接近|1|,相關性越強;越接近0,相關性越弱 斯⽪爾曼相關係數 通過等級差進⾏計算 ⽐上⼀個簡單 api:from scipy.stats import spearmanr 返回值,越接近|1|,相關性越強;越接近0,相關性越弱

  

六、、算法選擇指導(scikit learn官⽅)

  

 

1、樸素⻉葉斯

(1)定義

  

  樸素⻉葉斯,簡單理解,就是假定了特徵與特徵之間相互獨⽴的⻉葉斯公式。 也就是說,樸素⻉葉斯,之所以樸素,就在於假定了特徵與特徵相互獨⽴。在計算條件概率分佈P(X=x∣Y=c_k)時,NB引⼊了⼀個很強的條件獨⽴假設,即,當Y確定時,X的各個特徵分量取值之 間相互獨⽴。

  那麼這個公式如果應⽤在⽂章分類的場景當中,我們可以這樣看:

  

 

(2)樸素⻉葉斯優缺點

   優點: 樸素⻉葉斯模型發源於古典數學理論,有穩定的分類效率對缺失數據不太敏感,算法也⽐較簡單,常⽤於⽂本分類 分類準確度⾼,速度快;

   缺點: 由於使⽤了樣本屬性獨⽴性的假設,所以如果特徵屬性有關聯時其效果不好需要計算先驗概率,⽽先驗概率很多時候取決於假設,假設的模型可以有很多種,因此在某些時候會由於假設的先驗模型的原因導致預測效果不佳;

(3)原理

  樸素⻉葉斯法是基於⻉葉斯定理與特徵條件獨⽴假設的分類⽅法。 對於給定的待分類項x,通過學習到的模型計算後驗概率分佈, 即:在此項出現的條件下各個⽬標類別出現的概率,將後驗概率最⼤的類作爲x所屬的類別。

(4)在估計條件概率P(X∣Y)時出現概率爲0的情況處理

    採⽤⻉葉斯估計。 簡單來說,引⼊λ, 當λ=0時,就是普通的極⼤似然估計; 當λ=1時稱爲拉普拉斯平滑。

 

2、SVM迴歸

  SVM迴歸是讓儘可能多的實例位於預測線上,同時限制間隔違例(也就是不在預測線距上的實例)。

  線距的寬度由超參數ε控制。

  

3、EM算法

  EM算法也稱期望最⼤化(Expectation-Maximum,簡稱EM)算法。 它是⼀個基礎算法,是很多機器學習領域算法的基礎,⽐如隱式⻢爾科夫算法(HMM)等等。

  EM算法是⼀種迭代優化策略,由於它的計算⽅法中每⼀次迭代都分兩步,其中⼀個爲期望步(E步), 另⼀個爲極⼤步(M步),所以算法被稱爲EM算法(Expectation-Maximization Algorithm)。

  EM算法受到缺失思想影響,最初是爲了解決數據缺失情況下的參數估計問題,其算法基礎和收斂有效性等問題在 Dempster、Laird和Rubin三⼈於1977年所做的⽂章《Maximum likelihood from incomplete data via the EM algorithm》 中給出了詳細的闡述。其基本思想是:⾸先根據⼰經給出的觀測數據,估計出模型參數的值; 然後再依據上⼀步估計出的參數值估計缺失數據的值,再根據估計出的缺失數據加上之前⼰經觀測到的數據重新再 對參數值進⾏估計; 然後反覆迭代,直⾄最後收斂,迭代結束。

  EM算法計算流程:

  

 (1)極⼤似然估計

   根據已知條件,通過極⼤似然估計,求出未知參數; 極⼤似然估計就是⽤來估計模型參數的統計學⽅法。

 (2)EM算法的實現思路:

   ⾸先根據⼰經給出的觀測數據,估計出模型參數的值; 然後再依據上⼀步估計出的參數值估計缺失數據的值,再根據估計出的缺失數據加上之前⼰經觀測到的數據重 新再對參數值進⾏估計; EM算法實例 66 然後反覆迭代,直⾄最後收斂,迭代結束。

  

4、HMM模型(Hidden Markov Model,HMM)

  隱⻢爾可夫模型(Hidden Markov Model,HMM)是統計模型,它⽤來描述⼀個含有隱含未知參數的⻢爾可夫過程。 其難點是從可觀察的參數中確定該過程的隱含參數。然後利⽤這些參數來作進⼀步的分析,例如模式識別。

(1)⻢爾科夫鏈

  在機器學習算法中,⻢爾可夫鏈(Markov chain)是個很重要的概念。⻢爾可夫鏈(Markov chain),⼜稱離散時間⻢爾 可夫鏈(discrete-time Markov chain),因俄國數學家安德烈·⻢爾可夫(俄語:Андрей Андреевич Марков)得 名。⻢爾科夫鏈即爲狀態空間中從⼀個狀態到另⼀個狀態轉換的隨機過程。

  該過程要求具備“⽆記憶”的性質: 下⼀狀態的概率分佈只能由當前狀態決定,在時間序列中它前⾯的事件均與之⽆關。這種特定類型的“⽆記憶 性”稱作⻢爾可夫性質。 ⻢爾科夫鏈作爲實際過程的統計模型具有許多應⽤。 在⻢爾可夫鏈的每⼀步,系統根據概率分佈,可以從⼀個狀態變到另⼀個狀態,也可以保持當前狀態。 狀態的改變叫做轉移,與不同的狀態改變相關的概率叫做轉移概率。

  ⻢爾可夫鏈的數學表示爲:

  

  既然某⼀時刻狀態轉移的概率只依賴前⼀個狀態,那麼只要求出系統中任意兩個狀態之間的轉移概率,這個⻢爾科 夫鏈的模型就定了。

 (2)我們會應⽤⼀個和前⼀個問題類似的解法,只不過前⼀個問題關⼼的是概率最⼤值,這個問題關⼼的是 概率之和。解決這個問題的算法叫做前向算法(forward algorithm)。

 (3)HMM模型應用

  ⾸先我們來看看什麼樣的問題解決可以⽤HMM模型。使⽤HMM模型時我們的問題⼀般有這兩個特徵:

  1)我們的問題是基於序列的,⽐如時間序列,或者狀態序列。

  2)我們的問題中有兩類數據, ⼀類序列數據是可以觀測到的,即觀測序列; ⽽另⼀類數據是不能觀察到的,即隱藏狀態序列,簡稱狀態序列。

  有了這兩個特徵,那麼這個問題⼀般可以⽤HMM模型來嘗試解決。這樣的問題在實際⽣活中是很多的。

  ⽐如:老師上課,老師發出的⼀串連續的聲⾳就是觀測序列,⽽實際要表達的⼀段話就是隱藏狀態序 列,你⼤腦的任務,就是從這⼀串連續的聲⾳中判斷出我最可能要表達的話的內容。 

  HMM模型⼀共有三個經典的問題需要解決:

  1)評估觀察序列概率 —— 前向後向的概率計算 即給定模型λ = (A, B, Π)和觀測序列O = {o , o , ...o },計算在模型 λ 下某⼀個觀測序列O出現的概率P(O|λ )。 這個問題的求解需要⽤到前向後向算法,是HMM模型三個問題中最簡單的。

  2)預測問題,也稱爲解碼問題 ——維特⽐(Viterbi)算法 即給定模型λ = (A, B, Π)和觀測序列O = {o , o , ...o },求給定觀測序列條件下,最可能出現的對應的狀態序列。 這個問題的求解需要⽤到基於動態規劃的維特⽐算法,是HMM模型三個問題中複雜度居中的算法。

  3)模型參數學習問題 —— 鮑姆-⻙爾奇(Baum-Welch)算法(狀態未知) ,這是⼀個學習問題 即給定觀測序列O = {o , o , ...o },估計模型λ = (A, B, Π)的參數,使該模型下觀測序列的條件概率P(O∣λ)最⼤。 這個問題的求解需要⽤到基於EM算法的鮑姆-⻙爾奇算法,是HMM模型三個問題中最複雜的。

  

5、XGBoost

  XGBoost(Extreme Gradient Boosting)全名叫極端梯度提升樹,XGBoost是集成學習⽅法的王牌,在Kaggle數據挖掘 ⽐賽中,⼤部分獲勝者⽤了XGBoost。 XGBoost在絕⼤多數的迴歸和分類問題上表現的⼗分頂尖。

 (1)XGBoost與GDBT的區別

   區別⼀: XGBoost⽣成CART樹考慮了樹的複雜度, GDBT未考慮,GDBT在樹的剪枝步驟中考慮了樹的複雜度。

   區別⼆: XGBoost是擬合上⼀輪損失函數的⼆階導展開,GDBT是擬合上⼀輪損失函數的⼀階導展開,因此,XGBoost 的準確性更⾼,且滿⾜相同的訓練效果,需要的迭代次數更少。

   區別三: XGBoost與GDBT都是逐次迭代來提⾼模型性能,但是XGBoost在選取最佳切分點時可以開啓多線程進⾏,⼤ ⼤提⾼了運⾏速度。

 

6、lightGBM

(1)lightGBM演進過程

    

(2)AdaBoost算法

  AdaBoost是⼀種提升樹的⽅法,和三個臭⽪匠,賽過諸葛亮的道理⼀樣。

  AdaBoost兩個問題:

    (2.1) 如何改變訓練數據的權重或概率分佈 提⾼前⼀輪被弱分類器錯誤分類的樣本的權重,降低前⼀輪被分對的權重 。

    (2.2) 如何將弱分類器組合成⼀個強分類器,亦即,每個分類器,前⾯的權重如何設置 採取”多數表決”的⽅法。加⼤分類錯誤率⼩的弱分類器的權重,使其作⽤較⼤,⽽減⼩分類錯誤率⼤的弱分類器 的權重,使其在表決中起較⼩的作⽤。

(3)GBDT算法以及優缺點

  GBDT和AdaBosst很類似。GBDT和其它Boosting算法⼀樣,通過將表現⼀般的⼏個模型(通常是深度固定的決策樹)組合在⼀起來集成⼀個表現較好的模型。 AdaBoost是通過提升錯分數據點的權重來定位模型的不⾜, Gradient Boosting通過負梯度來識別問題,通過計算負梯度來改進模型,即通過反覆地選擇⼀個指向負梯度⽅向的函數,該算法可被看做在函數空間⾥對⽬標函數進⾏優化。

 (3.1)缺點:

   1) 空間消耗⼤。 lightGBM算法原理 125 這樣的算法需要保存數據的特徵值,還保存了特徵排序的結果(例如排序後的索引,爲了後續快速的計算分割點),這⾥需要消耗訓練數據兩倍的內存。

   2) 時間上也有較⼤的開銷。 在遍歷每⼀個分割點的時候,都需要進⾏分裂增益的計算,消耗的代價⼤。

     3) 對內存(cache)優化不友好。 在預排序後,特徵對梯度的訪問是⼀種隨機訪問,並且不同的特徵訪問的順序不⼀樣,⽆法對cache進⾏優化。 同時,在每⼀層⻓樹的時候,需要隨機訪問⼀個⾏索引到葉⼦索引的數組,並且不同特徵訪問的順序也不⼀ 樣,也會造成較⼤的cache miss。

 (3.2)啓發

  常⽤的機器學習算法,例如神經⽹絡等算法,都可以以mini-batch的⽅式訓練,訓練數據的⼤⼩不會受到內存限制。 ⽽GBDT在每⼀次迭代的時候,都需要遍歷整個訓練數據多次。 如果把整個訓練數據裝進內存則會限制訓練數據的⼤⼩;如果不裝進內存,反覆地讀寫訓練數據⼜會消耗⾮常⼤的時間。 尤其⾯對⼯業級海量的數據,普通的GBDT算法是不能滿⾜其需求的。 LightGBM提出的主要原因就是爲了解決GBDT在海量數據遇到的問題,讓GBDT可以更好更快地⽤於⼯業實踐。

 (3.3)lightGBM

  1)作爲三大知名GBDT的實現之一,lightGBM是微軟在GItHub上開源的⼀個新的梯度提升框架。在開源之後,就被別⼈冠以“速度驚⼈”、“⽀持分佈式”、“代碼清晰易懂”、“佔⽤內存⼩”等屬性。 LightGBM主打的⾼效並⾏訓練讓其性能超越現有其他boosting⼯具。在Higgs數據集上的試驗表明,LightGBM⽐ XGBoost快將近10倍,內存佔⽤率⼤約爲XGBoost的1/6。 

  2)lightGBM原理

  lightGBM 主要基於以下⽅⾯優化,提升整體特特性:

   1. 基於Histogram(直⽅圖)的決策樹算法,只需要遍歷幾個可能的分裂節點,也不需要計算所有樣本;

   2. 帶深度限制的Leaf-wise的葉⼦⽣⻓策略;

   3. 直接⽀持類別特徵;

   4. LGB選擇梯度大的樣本來計算信息增益,在保留大梯度樣本的同時,隨機地保留一些小梯度樣本,同時放大了小梯度樣本帶來的信息增益;

   5. LGB還內置了特徵降維技術,思想就是合併那些衝突小的稀疏特徵。

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