1. 程式人生 > >機器學習(1、2)預備知識

機器學習(1、2)預備知識

摘要:機器學習一直是電腦科學中非常熱門的領域。本文對過去幾十年中被普遍認可的機器學習演算法進行了概括,包括線性模型、決策樹、支援向量機、貝葉斯分類器、聚類、整合學習、神經網路、強化學習等(由於是我個人的理解,所以可能有些是錯的)。演算法和公式是機器學習的核心,但是本文企圖使用盡可能少的公式和符號來把各種機器學習演算法描述清楚。機器學習演算法眾多,沒有人能夠也沒有必要真正瞭解清楚所有的演算法。而這些概述能對今後再深入學習某一個方向的演算法打下一些基礎。

關鍵詞:機器學習 分類 迴歸 聚類 整合學習 神經網路 強化學習

1 引言

機器學習大致是利用經驗來改善系統性能的一種手段。所謂的“經驗”對於計算機系統而言自然就是“資料”。“系統”就是所謂的“模型”,或者是包含“模型”的事物,我們改善系統的手段就是通過“資料”來改進模型——不管是發明新模型也好,改進模型的引數也好。


2 預備知識概述

2.1機器學習概述

按訓練資料是否有標記資訊,機器學習可分為“監督學習”(Supervised Learning)和“無監督學習”(Unsupervised Learning)。前者的代表有分類和迴歸,後者的代表有聚類。

    歸納與演繹是科學推理的兩大手段。機器學習如果是從樣例中學習,則是屬於歸納學習。樣例構成資料集,一般情況下一個樣例包含屬性(一般有多個)和類標兩部分。基本上的機器學習都是屬於歸納學習,而強化學習(Reinforce Learning)中的免模型學習似乎是個例外。

    我們可以把學習過程看作一個在所有關於模型的假設組成的空間裡進行搜尋的過程,目標是找到與訓練集匹配的假設。和我們資料相符的假設會有很多種,每種假設都有自己的偏好,也就是針對我們輸入的新資料,其輸出可能會有不同的傾向。評判這些假設的好壞是一個非常難的問題。因為假如這個假設對我們的訓練資料符合的極好,可能會出現“過擬合”(Over-fitting)的問題,而符合的不好,則又會有“欠擬合”(Under-fitting)的問題。一種看上去比較好的辦法是,選擇這些假設中最簡單的那個,比如有樣本,我們應該選擇假設:而不該選.但是如何評判假設的簡單性也是一個難題,比如上述例子,假設和到底誰更簡單?

    事實上選擇還是要看具體情況。有一個著名的NFL(No Free Lunch Theorem)定理:無論學習演算法A多聰明,學習演算法B多笨拙(比如是胡亂猜的),他們的期望效能是相同的。但是這個定理的前提是:演算法所面臨的問題的所有的方面同等重要。但是生活中的實際問題往往不是,因為具體問題中,我們往往會偏向某個方面而忽視其他一些方面。所以機器學習的關鍵是具體情況具體分析,脫離實際問題什麼都沒有意義。

    實際上,評判一個機器學習模型的好壞程度是通過評判其泛化效能(Generalization Property)來判別的。泛化效能是指學習模型經過訓練集的訓練以後對訓練集以外的資料的預測能力(分類和迴歸都可以看成是一種預測,其實際結果就是類標)。為了得到好的模型,我們自然需要來評估一下各個模型的泛化能力。

2.2泛化能力評估方法

泛化能力評估方法有留出法、交叉驗證法、自助法等。泛化能力評估其實就是講我們用的資料集劃分為訓練集和測試集。訓練集用來訓練,測試集用來看看模型的泛化能力。如果泛化能力比較差,則需要換個模型重新訓練。如果泛化能力不錯,就將測試集與訓練集合並然後重新訓練(也可以採用增量式的方法避免重新訓練),再將得到的模型給顧客。

留出法(Hold-out)是直接將擁有的資料集D劃分為兩個互不包含的集合——訓練集S、測試集T(S一般佔D樣本數的2/3~4/5。劃分需要注意的是儘量保證2個集合的資料類別比例一致。如果D有1000個樣本,其中300個正例,700個反例。則S和T中正反例的比例也應該為3:7。這叫做“分層取樣”(Stratified Sampling)。而且一般對D會進行多次隨機劃分,比如100次,然後進行100次訓練和評估,最後返回的泛化效能就是這100次的平均。

交叉驗證法(Cross Validation)先將D劃分為k個大小相似的互不相互包含的子集(k常取5,10,20等),同時每個子集都儘量分層取樣。然後將k-1個子集用作訓練,剩下一個用作測試。這樣就能進行k次訓練和評估,然後返回的泛化效能就是這k次的平均。交叉驗證的關鍵是k的取值,因此,交叉驗證常常也被成為“k折交叉驗證”(k-fold Cross Validation)。如果k等於D的樣本總數,則測試集中只有一個樣本,此時稱為留一法(LOO,Leave-One-Out)。留一法的評估結果往往被認為比較準確,但其訓練開銷較大。

自助法(Bootstrapping)以自助取樣法(Bootstrap Sampling)為基礎,以資料集D為例(設其包含m個樣本),一開始另一個數據集。然後每次從D中隨機複製一個樣本到一個D’資料集中,重複m次。顯然,D中一部分樣本會在D’中多次出現,而有些樣本則不會出現。由概統知識可以知道,在D’中一次都不出現的樣本數約為0.368m。最終,我們將D’作為訓練集,D-D’作為測試集(因此需要知道到底哪些樣本複製進D’了)。

自助法一般用於資料集較小、難以有效劃分訓練/測試集時,而在初始資料量足夠時,留出法和交叉驗證法用的多一些。

另外在實際訓練中,當我們選定了模型之後,要通過機器學習演算法來確定最優引數,但是引數的定義域往往是連續的,所以我們往往將引數選定一個範圍,然後確定一個步長,通過訓練一步一步找出最優的引數。

2.3泛化能力評估指標

泛化能力評估指標就是效能度量的指標。之前我們介紹了各種來評估模型的手段,最後需要通過一些指標來從數字上比較出哪些模型更好。

要評價效能,就需要將學習器f的預測結果f(x)與真實標記y進行對比。常用的效能度量是均方誤差(MSE, Mean Squared error)。具體而言,有錯誤率和精度、查全率和查準率、代價敏感錯誤率和代價曲線等方法。

錯誤率就是分類錯誤的樣本數佔樣本數的比例,精度則相反。

很多時候我們關心的問題不是我的模型的準確程度,而是“我們遇到的新的資料中有多少比例是屬於我想要的類的”、“或者我想要的那個類的資料有多少被我挖掘出來了”。這時就應該使用查準率(precision)和查全率(recall)這樣的指標。要使用查全率和查準率指標,可以繪製P-R曲線,或者在一張P-R圖上繪製多條P-R曲線。一條P-R曲線如果包圍了另一臺P-R曲線,則說明對應的學習器較優。但是如果兩者相交就比較難判斷誰更優。比較一般的比較方法是可以比較曲線與查全率=查準率的那條直線與曲線的交點(即平衡點, BEP, Break-Even Point),交點越高,效能越優。但實際上我們也可以根據自己的需要(偏重查全率還是查準率)來選擇不同的模型。

代價可以用來描述分類錯誤帶來的代價,代價其實是錯誤率的高階形態,有一種權重概念。我們可以定義將A類誤歸成B類的代價和將C類誤歸成B類的代價不同。在此種前提下,我們可以用一種代價曲線來描述一個模型,它的AUC(Area Under Curve)就是期望代價。

除了這些評價指標以後,其實還有非常多的指標或者評價方法,比如ROC、比較檢驗等。