讀書筆記 | 《機器學習》的算法總結 - AI產品經理需要知道的那些算法

機器學習.jpg

-- 原創,未經授權,禁止轉載 2017.11.06 --

傳送門:
機器學習的基本概念(一):http://www.lxweimin.com/p/10fc7e397a3e
機器學習的基本概念(二):http://www.lxweimin.com/p/b3edf9c9f2c8
機器學習模型評估與選擇:http://www.lxweimin.com/p/c5111d585367

一、算法類別

機器學習的算法繁多,分類方式也很多,如:

  • 生成模式 與 判別模式
  • 參數 與 非參數 模式
  • 監督 與 非監督 模式
  • 基于學習任務

最有效的算法分類,是基于學習任務的,它在實踐中使用廣泛。那么,如何選擇合適的算法呢?

通常,我們根據算法的優缺點、訓練數據規模、數據質量、任務目標,等等問題綜合考慮。當然,選擇大家認可度高的算法,更容易得到“不錯”的結果。

  • 算法總結圖

算法按功能類別大致分為13種,下圖總結了不同類別算法的優缺點,以及著名代表算法。

算法.png

二、基于學習任務的算法分類

上篇文章講到,機器學習中,學習方式我們主要分兩大類:

  • 監督學習 :訓練數據【有】標記信息。
  • 無監督學習:訓練數據【沒有】標記信息。

(其實還會分為半監督學習,強化學習等類型。這里不做過多探討。)

image
image
  • 監督學習中,最有代表性的任務是:

    • 分類:對指定的模式進行識別,預測值是離散的。
    • 回歸:對指定的模式進行識別,預測值是連續的。
  • 無監督學習中,最有代表性的任務是:

    • 聚類:基于數據的內部結構尋找觀察樣本的自然族群(即集群)。
    • 降維:在保留數據結構和有用性的同時對數據進行壓縮。

這里想討論的,是基于不同的學習任務,常用的算法有哪些,優缺點是什么。
如下圖:

監督學習.png

1)分類任務

a)概述

通過對已知分類的數據進行訓練和學習,找到這些不同類的特征,再對未分類的數據進行分類。

分類算法通常適用于預測一個類別(或類別的概率),而不是連續的數值。

  • 分類算法的流程:
    訓練:訓練集——>特征選取——>訓練——>分類器
    分類:新樣本——>特征選取——>分類——>判決
b)應用:
  • 判斷用戶的性別
  • 預測用戶是否會購買給定的品類
  • 判斷一條評論是正面的還是負面的
c)算法解釋
  • 邏輯回歸(Logistic Regression)
    簡單來說,邏輯回歸是一種用于解決二分類(0 or 1)問題的機器學習方法,用于估計某種事物的可能性。它通過 Logistic 函數(即 Sigmoid 函數)將預測映射到 0 到 1 中間,不僅可以預測類別,還可得到近似概率的預測,這對許多需要利用概率輔助的任務很有用。

    介紹一下Sigmoid函數,也稱為邏輯函數(Logistic function):

    其函數曲線如下:


    從上圖可以看到sigmoid函數是一個s形的曲線,它的取值在[0, 1]之間,在遠離0的地方函數的值會很快接近0或者1。它的這個特性對于解決二分類問題十分重要。

    求解過程:
    1.首先假設誤差存在且為高斯分布,等價于真實數據的概率分布。
    2.求出聯合概率分布,也就是似然函數。
    3.進行取對數運算,得到對數似然函數l(θ)。
    4.求l(θ)的最大值,得到了最小二乘的策略。
    5.使用梯度下降,讓參數逐漸逼近最小二乘法中的最優解。

    • 優點:

      • 實現簡單,廣泛的應用于工業問題上;
      • 分類時計算量非常小,速度快,存儲資源低;
      • 輸出有很好的概率解釋,算法可以正則化而避免過擬合;
    • 缺點:

      • 在多條或非線性決策邊界時性能比較差;
      • 容易欠擬合,一般準確度不太高;
      • 只能處理兩分類問題(在此基礎上衍生出來的softmax可以用于多分類),且必須線性可分;
  • 樸素貝葉斯(Naive Bayes, NB)
    樸素貝葉斯是一種基于貝葉斯定理和特征條件獨立假設的分類方法。

    本質上樸素貝葉斯模型就是一個概率表,通過訓練數據更新這張表中的概率。為了預測一個新的觀察值,樸素貝葉斯算法就是根據樣本的特征值在概率表中尋找最大概率的那個類別。

    之所以稱之為「樸素」,是因為該算法的核心就是特征條件獨立性假設(每一個特征之間相互獨立),而這一假設在現實世界中基本是不現實的。

    • 優點:

      • 容易實現并能隨數據集的更新而擴展;
      • 對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練;
      • 對缺失數據不太敏感,算法也比較簡單,常用于文本分類。
    • 缺點:

      • 需要計算先驗概率;
      • 需要條件獨立假設,分類決策存在錯誤率;
    • 應用場景:

      • 情感分析、消費者分類
  • AdaBoost

    首先要解釋一個名詞,【集成學習】,就是將多個弱的學習器結合起來組成一個強的學習器。

    目前主要有兩種生成方式:

    • Boosting:個體學習器間存在強依賴關系,必須串行生成。
    • Bagging與隨機森林:個體之間不存在強依賴關系,可并行生成。

    Boosting族算法最著名的代表就是AdaBoost。

    工作機制類似于:
    1)給定初始訓練數據,由此訓練出第一個基學習器;
    2)根據基學習器的表現對樣本進行調整,在之前學習器做錯的樣本上投入更多關注;
    3)用調整后的樣本,訓練下一個基學習器;
    4)重復上述過程 T 次,將 T 個學習器加權結合。

    • 優點:

      • 可以自動組合弱分類器,且分類精度很高;
      • 在Adaboost的框架下,可以使用各種回歸分類模型來構建弱學習器,非常靈活;
      • 作為簡單的二元分類器時,構造簡單,結果可理解;
      • 不易發生過擬合;
    • 缺點:

      • 對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性;
      • 訓練比較耗時;
  • 支持向量機SVM
    對于分類學習最基本的想法就是基于訓練集的樣本空間中,找到一個劃分超平面,將不同類別的樣本分開。

    超平面有很多,我們希望能找到一個邊界,在邊界范圍之內,都存在劃分超平面。如下圖中虛線所示,在虛線之內的任意超平面,都能完全劃分出不同類別。

    而處于虛線之上的向量,我們稱為【支持向量】。因為這兩個向量之間的距離,就是我們能找到的具有“最大間隔”的劃分超平面。

    SVM

    SVM算法其實就是靠支持向量來計算最大Margin的一個算法,因此將其命名為支持向量機。

    • 優點:
      • 解決小樣本下機器學習問題;
      • 解決非線性問題;
      • 無局部極小值問題(相對于神經網絡等算法);
      • 可以很好的處理高維數據集;
      • 泛化能力比較強;
    • 缺點:
      • 對于核函數的高維映射解釋力不強,尤其是徑向基函數;
      • 對缺失數據敏感;
      • 很難調參,也不能擴展到較大的數據集中;
    • 應用:
      • 文本分類、圖像識別;
      • 目前在工業界中,隨機森林通常優于支持向量機算法;
  • K近鄰(K-nearest neighbors, KNN)
    KNN即最近鄰算法,其主要過程為:

    1. 計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等);
    2. 對上面所有的距離值進行排序;
    3. 選前k個最小距離的樣本;
    4. 根據這k個樣本的標簽進行投票,得到最后的分類類別;

    如何選擇一個最佳的K值,這取決于數據。一般情況下,在分類時較大的K值能夠減小噪聲的影響,但會使類別之間的界限變得模糊。

    近鄰算法具有較強的一致性結果。隨著數據趨于無限,算法保證錯誤率不會超過貝葉斯算法錯誤率的兩倍。對于一些好的K值,K近鄰保證錯誤率不會超過貝葉斯理論誤差率。

    • 優點:
      • KNN是一種在線技術,新數據可以直接加入數據集而不必進行重新訓練;
      • KNN理論簡單,容易實現;
    • 缺點:
      • 對于樣本容量大的數據集計算量比較大;
      • 樣本類別不平衡時,預測偏差比較大;
      • KNN每一次分類都會重新進行一次全局運算,訓練時間復雜度為O(n);
      • k值大小的選擇難;
    • 應用:
      • 文本分類、模式識別、聚類分析,多分類領域
  • 決策樹(Decision Tree, DT)
    其本質是一顆由多個判斷節點組成的樹,根據特征集取值不同,將樣本逐層劃分并建立規則,直到某一個樣本集合內的所有樣本屬于同一類。

    在使用模型進行預測時,根據輸入參數依次在各個判斷節點進行判斷游走,最后到葉子節點即為預測結果。

    • 分類樹
      如果目標變量是標稱的,稱為分類樹;如果目標變量是連續的,稱為回歸樹。分類樹是使用樹結構算法將數據分成離散類的方法。
      它們通常都是指決策樹,或更嚴謹一點地稱之為「分類回歸樹(CART)」,這也就是非常著名的 CART 的算法。

    • 優點:

      • 決策樹易于理解和解釋,可以可視化分析,容易提取出規則;
      • 可以同時處理標稱型和數值型數據;
      • 測試數據集時,運行速度比較快;
      • 決策樹可以很好的擴展到大型數據庫中,同時它的大小獨立于數據庫大小;
    • 缺點:

      • 對缺失數據處理比較困難;
      • 容易出現過擬合問題;
      • 忽略數據集中屬性的相互關聯;
    • 改進:

      • 對決策樹進行剪枝。可以采用交叉驗證法和加入正則化的方法;
      • 使用基于決策樹的combination算法,如bagging算法,randomforest算法,可以解決過擬合的問題;
    • 應用:

      • 企業管理實踐,企業投資決策;
  • 深度學習
    深度學習是指能學習極其復雜模式的多層神經網絡。該算法使用在輸入層和輸出層之間的隱藏層對數據的中間表征建模,這也是其他算法很難學到的部分。
    [圖片上傳失敗...(image-e97650-1510761156182)]
    深度學習還有其他幾個重要的機制,如卷積和 drop-out 等,這些機制令該算法能有效地學習到高維數據。然而深度學習相對于其他算法需要更多的數據,因為其有更大數量級的參數需要估計。

    • 優點:

      • 在圖像、音頻和文本等數據上表現優異;
      • 容易對新數據使用反向傳播算法更新模型參數;
      • 它們的架構(即層級的數量和結構)能夠適應于多種問題,并且隱藏層也減少了算法對特征工程的依賴。
    • 缺點:

      • 需要大量的數據;
      • 難調參;
  • 隨機森林(Random Forest)RF
    首先要講一個概念,Bagging(bootstrap aggregation)封袋算法。

    前面講AdaBoost算法,是Boosting的代表。隨機森林是Bagging的代表。

    Bagging:并行式集成學習方法最著名的代表。它抽取訓練樣本采用自助采樣法(bootstrap),所以就叫bootstrap aggregation算法。

    1.從原始樣本集中抽取訓練集。每輪從原始樣本集中使用Bootstraping的方法抽取n個訓練樣本(有放回)。
    共進行k輪抽取,得到k個訓練集。(k個訓練集之間是相互獨立的)
    2.每次使用一個訓練集得到一個模型,k個訓練集共得到k個模型。
    3.對分類問題:將上步得到的k個模型采用投票的方式得到分類結果;
    對回歸問題:計算上述模型的均值作為最后的結果。

    隨機森林(RF),顧名思義,是用隨機的方式建立一個森林,森林里面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。

    在得到森林之后,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬于哪一類(對于分類算法),然后看看哪一類被選擇最多,就預測這個樣本為那一類。

    在建立每一棵決策樹的過程中,有兩點需要注意--采樣與完全分裂。這是兩個隨機采樣的過程,RF對輸入的數據進行 行和列 的采樣。

    1.對于行采樣,采用有放回的方式,也就是在采樣得到的樣本集合中,可能有重復的樣本。
    假設輸入樣本為N個,那么采樣的樣本也為N個。這樣使得在訓練的時候,每一棵樹的輸入樣本都不是全部的樣本,使得相對不容易出現over-fitting。
    2.進行列采樣,從M個feature中,選擇m個(m << M)。
    3.對采樣之后的數據使用完全分裂的方式建立出決策樹。
    這樣決策樹的某一個葉子節點要么是無法繼續分裂的,要么里面的所有樣本的都是指向的同一個分類。

    一般決策樹算法都需要--剪枝,但隨機森林不需要,因為兩個隨機采樣過程保證了隨機性,所以不剪枝,也不會出現過擬合。

    • 優點:

      • 不容易出現過擬合,因為選擇訓練樣本的時候就不是全部樣本。
      • 既可以處理屬性為離散值的量,比如ID3算法來構造樹,也可以處理屬性為連續值的量,比如C4.5算法來構造樹。
      • 對于高維數據集的處理能力令人興奮,它可以處理成千上萬的輸入變量,并確定最重要的變量,因此被認為是一個不錯的降維方法。此外,該模型能夠輸出變量的重要性程度,這是一個非常便利的功能。
      • 分類不平衡的情況時,隨機森林能夠提供平衡數據集誤差的有效方法
    • 缺點:

      • 隨機森林在解決回歸問題時并沒有像它在分類中表現的那么好,這是因為它并不能給出一個連續型的輸出。當進行回歸時,隨機森林不能夠作出超越訓練集數據范圍的預測,這可能導致在對某些還有特定噪聲的數據進行建模時出現過度擬合。
      • 對于許多統計建模者來說,隨機森林給人的感覺像是一個黑盒子——你幾乎無法控制模型內部的運行,只能在不同的參數和隨機種子之間進行嘗試。

2)回歸

回歸
a)概述

回歸算法用于連續型分布預測,針對的是數值型的樣本,使用回歸,可以在給定輸入的時候預測出一個數值,這是對分類方法的提升,因為這樣可以預測連續型數據而不僅僅是離散的類別標簽。

回歸的目的就是建立一個回歸方程用來預測目標值,回歸的求解就是求這個回歸方程的回歸系數。

b)應用:

房價預測、股票走勢或測試成績等連續變化的案例。

c)算法解釋:
  • 線性回歸(Linear Regression)
    線性回歸是處理回歸任務最常用的算法之一。該算法的形式十分簡單,它期望使用一個超平面擬合數據集(只有兩個變量的時候就是一條直線)。如果數據集中的變量存在線性關系,那么其就能擬合地非常好。

    [圖片上傳失敗...(image-13b723-1510761156182)]
    在實踐中,簡單的線性回歸通常被使用正則化的回歸方法(LASSO、Ridge 和 Elastic-Net)所代替。正則化其實就是一種對過多回歸系數采取懲罰以減少過擬合風險的技術。當然,我們還得確定懲罰強度以讓模型在欠擬合和過擬合之間達到平衡。

    • 優點:

      • 實現簡單,計算簡單;
      • 解釋性好,還能通過正則化來降低過擬合的風險;
      • 容易使用隨機梯度下降和新數據更新模型權重;
    • 缺點:

      • 不能擬合非線性數據;
    • 邏輯回歸與線性回歸的關系?
      邏輯回歸(Logistic Regression)與線性回歸(Linear Regression)都是一種廣義線性模型(generalized linear model)。邏輯回歸假設因變量 y 服從伯努利分布,而線性回歸假設因變量 y 服從高斯分布。
      因此與線性回歸有很多相同之處,去除Sigmoid映射函數的話,邏輯回歸算法就是一個線性回歸。
      可以說,邏輯回歸是以線性回歸為理論支持的,但是邏輯回歸通過Sigmoid函數引入了非線性因素,因此可以輕松處理0/1分類問題。

  • 回歸樹
    回歸樹(決策樹的一種)通過將數據集重復分割為不同的分支而實現分層學習,分割的標準是最大化每一次分離的信息增益。這種分支結構讓回歸樹很自然地學習到非線性關系。

    集成方法,如隨機森林(RF)或梯度提升樹(GBM)則組合了許多獨立訓練的樹。

    這種算法的主要思想就是組合多個弱學習算法而成為一種強學習算法。在實踐中 RF 通常很容易有出色的表現,而 GBM 則更難調參,不過通常梯度提升樹具有更高的性能上限。

    • 優點:
      • 參考決策樹;
    • 缺點:
      • 參考決策樹;

3)聚類

無監督學習.png
a)概述

聚類,就是根據數據的"相似性"將數據分為多類的過程。
所有的聚類算法都試圖找到數據的內在結構,以便按照最大的共同點將數據進行歸類。

b)應用:

細分客戶、新聞聚類、文章推薦等。

c)算法解釋:
  • k均值算法 K-means
    K-means算法是發現給定數據集的k個簇的算法。簇個數k是用戶給定的,每個簇通過其質心(centroid),即簇中所有點的中心來描述。

    簡單來說,是將相似的對象歸到同一個蔟中。蔟內的對象越相似,聚類的效果就越好。

    聚類的度量基于樣本點之間的幾何距離(即在坐標平面中的距離)。集群是圍繞在聚類中心的族群,而集群呈現出類球狀并具有相似的大小。

    聚類和分類最大的不同在于,分類的目標事先已知,而聚類則不一樣。其產生的結果和分類相同,而只是類別沒有預先定義。

    步驟
    1.創建k個點作為k個簇的起始質心(經常隨機選擇)。
    2.分別計算剩下的元素到k個簇中心的相異度(距離),將這些元素分別劃歸到相異度最低的簇。
    3.根據聚類結果,重新計算k個簇各自的中心,計算方法是取簇中所有元素各自維度的算術平均值。
    4.將D中全部元素按照新的中心重新聚類。
    5.重復第4步,直到聚類結果不再變化。
    6.最后,輸出聚類結果。

    [圖片上傳失敗...(image-18be97-1510761156182)]

    • 優點:

      • 聚類問題的經典算法,算法簡單、快速。
      • 對處理大數據集,該算法是相對可伸縮的和高效率的,因為它的復雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k<<n。這個算法通常局部收斂。
      • 算法嘗試找出使平方誤差函數值最小的k個劃分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。
    • 缺點:

      • k-平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的數據不適合。
      • 要求用戶必須事先給出要生成的簇的數目k。
      • 對初值敏感,對于不同的初始值,可能會導致不同的聚類結果。
      • 不適合于發現非凸面形狀的簇,或者大小差別很大的簇。
      • 對于"噪聲"和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響。
  • 層次聚類

    試圖在不同層次對數據集進行劃分,從而形成樹形的聚類結構。數據集的劃分可采用“自底向上”的聚合策略,也可采用“自頂向下”的分拆策略。 代表算法:AGNES

    算法過程:

    1、將每個對象歸為一類, 共得到N類, 每類僅包含一個對象. 類與類之間的距離就是它們所包含的對象之間的距離.
    2、 找到最接近的兩個類并合并成一類, 于是總的類數少了一個.
    3、 重新計算新的類與所有舊類之間的距離.
    4、重復第2步和第3步, 直到最后合并成一個類為止(此類包含了N個對象).

    [圖片上傳失敗...(image-3d2ef-1510761156182)]

    • 優點:
      • 集群不再需要假設為類球形,也可以擴展到大數據集。
    • 缺點:
      • 需要設定集群的數量(即在算法完成后需要保留的層次)。

4)降維

a)概述

降維,通過某種數學變換將原始高維屬性空間轉變為一個低維子空間,在這個子空間中樣本密度大幅提高,距離計算也變得更加容易。

降維的方法可以分為:

  • 線性方法:PCA、LDA;
  • 非線性方法:核PCA、多層自動編碼;

說到維度,其目的是用來進行特征選擇和特征提取,注意特征選擇和特征提取這二者的不同之處:
【特征選擇】:選擇重要特征子集,刪除其余特征。
【特征提取】:由原始特征形成較少的新特征。

  • 降維的作用:
    • 降低時間復雜度和空間復雜度;
    • 節省了提取不必要特征的開銷;
    • 去掉數據集中夾雜的噪聲;
    • 較簡單的模型在小數據集上有更強的魯棒性;
    • 當數據能有較少的特征進行解釋,我們可以更好的解釋數據,使得我們可以提取知識;
    • 實現數據可視化;
c)算法解釋
  • 主成分分析算法 (Principal Component Analysis) PCA
    主成分分析算法是最常用的線性降維方法,它的目標是通過某種線性投影,將高維的數據映射到低維的空間中表示,并期望在所投影的維度上數據的方差最大,以此使用較少的數據維度,同時保留住較多的原數據點的特性。

    通俗的理解,如果把所有的點都映射到一起,那么幾乎所有的信息(如點和點之間的距離關系)都丟失了,而如果映射后方差盡可能的大,那么數據點則會分散開來,以此來保留更多的信息。

    可以證明,PCA是丟失原始數據信息最少的一種線性降維方式。(實際上就是最接近原始數據,但是PCA并不試圖去探索數據內在結構)

    image
    • 優點:

      • 可處理大規模數據集
      • 無需在數據上進行假設
    • 缺點:

      • 難以搞定非線性數據
      • 難以理解結果的意義

結束

算法還有很多,且學且珍惜~~

最后,我的目的是成為一名ai pm,求推薦~

-- 原創,未經授權,禁止轉載 2017.11.06 --

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容