1. 程式人生 > >淺談對統計機器學習的認識

淺談對統計機器學習的認識

        最早是在《資料處理與優化演算法》課堂上接觸到資料探勘(Data Mining),接著自學Pang-Ning Tan et al.的《資料探勘導論》入門資料探勘。所以我先講一下資料探勘、機器學習(Machine Learning)和統計學(Statistics)的關係。個人理解是傳統統計學往往是更加偏向於純粹的數學,偏向於理論。機器學習偏向於數學與計算機的交叉,統計的理論往往需要通過機器學習的研究來轉化成有效的演算法。資料探勘是機器學習的一個應用領域,資料庫(例如SQL)、大資料並行處理技術(Hadoop+Spark)與機器學習技術是資料探勘的兩大技術支撐。

        機器學習可以分為以支援向量機為代表的統計學習和人工神經網路為代表的聯結主義學習。個人感覺前者是模擬人的邏輯思維,後者是模擬人的形象思維。所以統計學習模型引數往往是可解釋的,而人工神經網路就是一個黑箱。

        目前,主要通過學習李航的《統計學習方法》以及相關文獻、部落格對統計學習方法有一定的瞭解。所以先白話談談自己對統計機器學習的認識。如有敘述與理解不當之處,請不吝賜教。

        什麼是機器學習?要回答這個問題,首先需要明確學習的定義。Herbert Simon曾給出定義:如果一個系統能夠通過執行某個過程改進他的效能,這就是學習。類比人的大腦,不斷地接受資訊,並按照一定的思考邏輯處理資訊,從而思維能力不斷提升,對以前接觸過類似的甚至沒接觸過的新鮮事物的判斷更加準確。機器學習中的數學模型就是大腦,輸入的訓練資料就是資訊,學習演算法就是思考邏輯,學習之後模型的分類預測能力更強,誤差更小,相當於人的思維能力得到提升。所以,機器學習的核心就是數學模型(例如決策樹、支援向量機、神經網路、貝葉斯網路等)。然而這個模型在沒有資料的輸入下是沒有實際用途的,因為沒有形成確定合理的引數,或者模型的結構還不夠完善,就像再聰明的大腦沒有經過實習訓練也難以解決實際問題一樣。所以需要實際的資料對模型進行訓練,當然對統計學習而言,這些資料需要蘊含著相同的資訊(統計規律性),就像人需要針對性學習一樣。訓練過程需要遵從一定的規律,就像人在處理資訊的時候總是總從一定的邏輯,這就是學習方法,而且訓練不能無休無止,得有一個標準來判定什麼時候結束,這就是學習策略。訓練的效果好不好,得看模型的預見性,這就涉及對不同種類模型效能的度量。

        一句話概括,統計機器學習是基於對資料的初步認識以及學習目的的分析,選擇合適的數學模型,並輸入樣本資料,依據一定的策略,運用合適的學習演算法對模型進行訓練,最後運用訓練好的模型對資料進行分析預測。模型種類來自於對學習目的以及資料的初步分析,模型的某些引數來自於運用資料對模型的訓練。學習流程如下:

        統計機器學習三個要素:

  1. 模型(model).例如支援向量機、人工神經網路模型等。模型在未進行訓練前,其可能的引數是多個甚至無窮的,故可能的模型也是多個甚至無窮的,這些模型構成的集合就是假設空間(hypothesis space)。
  2. 策略(strategy).即從假設空間中挑選出引數最優的模型的準則。模型的分類或預測結果與實際情況的誤差(損失函式)越小,模型就越好。那麼策略就是誤差最小。針對樣本資料的誤差是經驗風險,但樣本數目較小時不能代替資料的全部資訊,故容易出現過擬合現象,即模型過度擬合小容量樣本資料,從而泛化能力降低。期望風險就是針對所有資料的誤差,但這裡出現一個悖論,正因為存在需要預測的資料,才需要訓練模型,如果所有資料的誤差都能計算,那就無需訓練了。故引入結構風險,就是在經驗風險的基礎上引入罰項(penalty term)或稱正則化項(regularization),表示模型的複雜程度,以防止過擬合。
  3. 演算法(algorithm).即從假設空間中挑選模型的方法(等同於求解最佳的模型引數)。機器學習的引數求解通常都會轉化為最優化問題,例如支援向量機實質上就是求解凸二次規劃問題。故學習演算法通常是最優化演算法,例如最速梯度下降法、牛頓法以及擬牛頓法等。

        之前運用機器學習演算法進行資料探勘的經歷告訴我對於應用而言,模型的選擇(model selection)是最為關鍵的。首先沒有哪一種演算法是適用於所有情況的。例如,樸素貝葉斯分類器在輸入資料各維度間相關性較大時分類效果差,而使用最為普遍的支援向量機在多分類領域表現不如隨機森林且計算耗時。所以,選擇模型需要在深刻明確學習目的,瞭解模型的理論、優缺點以及資料的特徵基礎上。業界有句話:真正的資料探勘高手往往都是擅長業務的。因為業務能力強的人對資料的特徵理解最為清楚。選擇好合理的模型後,超引數是需要人為設定的,例如懲罰因子、學習率以及核函式等。這些引數至關重要,直接決定訓練結果的好壞。如何選擇這些設定引數呢?首先需要了解模型的理論,其次是豐富的調參經驗(這需要建立在具體業務問題上,技術只有結合業務才能發揮用途)。Python的sklearn.model_selection.GridSearchCV可以實現自動化調參。調參過程中有幾個準則需要遵守:

  1. 正則化。實質就是權衡損失函式與模型複雜度。換句話說,在降低經驗誤差的同時,使模型儘量簡單,保證其泛化能力。這種思想符合奧卡姆剃刀(Occam`s razor)原理。
  2. 交叉驗證。將訓練樣本分成N個大小相同的子資料集,每次訓練選取其中一個作為測試資料集,其餘均作為訓練資料集。選取N次訓練的平均誤差最小的引數。

        接下來,講一下機器學習的分類。學習種類可以分為:

  1. 監督學習( supervised learning)。說白了,訓練資料集包含輸入X及相應的標記(輸出y)兩個部分。學習目的就是獲得一個從X→y的對映。分類與迴歸問題是典型的監督學習。
  2. 非監督學習(unsupervised learning)。訓練資料集只包含輸入X。學習的目的在於找到資料集種隱含的結構。關聯分析與大多聚類分析是典型的非監督學習。
  3. 半監督學習(semi-supervised Learning)。監督學習與非監督學習的結合。輸入X,小部分有標記,大部分沒有標記。標籤傳播演算法(label propagation)是典型的半監督學習演算法, 該演算法充分利用已標記的樣本點的資訊,將其標籤傳播至未標記樣本點,從而實現所有資料的聚類。

        機器學習在資料探勘領域的應用可分為三大部分:分類與迴歸,關聯分析和聚類分析。

  1. 分類(classification)與迴歸(regression)。分為學習與預測兩個階段。學習是建立輸入到輸出的對映。預測是運用對映預測X對應的輸出。分類針對輸出是離散值的情況,迴歸針對輸出是連續值的情況。經典的演算法有:決策樹、CART迴歸、線性迴歸、K近鄰、邏輯斯諦迴歸、SoftMax、最大熵、樸素貝葉斯、感知機、支援向量機、Adaboost、提升樹以及隨機森林。
  2. 關聯分析(association)。發現隱藏在大型資料集中的有意義的聯絡。經典的演算法有:Apriori和FP-Growth。
  3. 聚類(cluster)。發現數據間的潛在關係,自動將資料歸類(簇)。相關演算法通常分為兩類,一類需要確定簇的個數,例如K均值、譜聚類和高斯混合模型等;另一類自動確定簇的個數,例如DBSCAN、MeanShift、標籤傳播等。

    [我的GitHub](https://github.com/Shi-Lixin)
    注:如有不當之處,請指正。