原文:http://sebastianraschka.com/Articles/2014_intro_supervised_learning.htmlhtml
摘要:本文全面地介紹了機器學習裏的監督學習的主要概念,並對監督學習的典型工做流程進行了詳細的解析,具備很好的實踐指導意義。python
模式分類(pattern classification)和機器學習(machine learning)是很是熱的話題,幾乎在全部的現代應用程序中都獲得了應用:例如郵局中的光學字符識別(OCR),電子郵件過濾,超市條形碼掃描,等等。git
在這篇文章中,我會簡要描述一個典型的監督學習任務的主要概念,這些概念將做爲未來的文章和實現各類學習算法的基礎。github
預測建模是創建一個可以進行預測的模型的通用概念。一般狀況下,這樣的模型包括一個機器學習算法,以便從訓練數據集中學習某些屬性作出這些預測。算法
預測建模能夠進一步分紅兩個子集:迴歸和模式分類。迴歸模型基於變量和趨勢之間的關係的分析,以便作出關於連續變量的預測,如天氣預報的最高溫度的預測。數組
與迴歸模型不一樣,模式分類的任務是分配離散的類標籤到特定的observation做爲預測的結果。回到上面的例子:在天氣預報中的模式分類任務多是一個晴天、雨天或雪天的預測。網絡
拋開全部的可能性,本文的重點將放在「模式分類」,分配預先定義的類標籤到特定實例將它們分紅不一樣的類別的通常方法。「實例」是「observation」或「樣本」的同義詞,描述由一個或多個特徵(或稱爲「屬性」)組成的「對象」。app
模式分類任務可被分紅兩個主要的子類別:監督學習和無監督學習。在監督學習中,用於構建分類模型的數據的類標籤是已知的。例如,一個垃圾郵件過濾的數據集,它裏面將包含垃圾郵件以及「火腿」(=不是垃圾郵件)消息。在有監督的學習問題中,咱們已經知道了訓練集中的郵件要麼是垃圾郵件,要麼是火腿。咱們將會使用這些信息來訓練咱們的模型,以達到能對新增的不明確的郵件進行分類。機器學習
上圖顯示了一個典型的分類任務,用到的樣本具備兩個隨機變量;訓練數據(帶有類標記)用圖中的散點表示。紅色點劃線代表了線性決策(左側)或者二次決策(右側)的邊界,這些邊界決定了R1和R2的決策區域。新的observation將會根據它們所在的區域而被分配類標籤「w1」或「w2」。對於那些未知的實例,咱們已經假定咱們的分類方法不是完美的,會有必定比例的樣本可能被錯誤分類。函數
若是你對決策邊界是如何被算出來的有興趣,你能夠查看個人模式分類庫中的「統計模式分類示例」這一節的關於「IPython」部分的內容。
與此相反,無監督學習任務處理未標記的實例,而且這些類必須從非結構化數據集中推斷出來。一般狀況下,無監督學習採用聚類技術,使用基於必定的類似性(或距離)的度量方式來將無標記的樣本進行分組。
第三類的學習算法使用「強化學習」這個概念來描述。在這種算法中,模型是經過一系列的操做而最大化「獎勵函數」來進行學習。獎勵函數的最大化,能夠經過懲罰「壞行爲」,和/或經過獎勵「好行爲」來實現。強化學習的一個常見的例子是根據環境反饋而進行學習自動駕駛的訓練過程。我最近還偶然發現了強化學習的另一個很好的例子,就是訓練遊戲「Flappy Bird」,使它可以本身玩。
現今,當在「數據科學」領域開始引入各類概念的時候,著名的「鳶尾花(Iris)」花數據集多是最經常使用的一個例子。1936年,R.A.Fisher在他的判別分析中建立和使用了Iris數據集。Iris如今能夠從UCI機器學習庫中免費獲得。
在一個監督分類任務中,它將會是一個很好的例子。Iris中的花被分爲了三類:Setosa , Virginica , 和Versicolor .而這150個實例中的每個樣本(單花)都有四個屬性:
(全部測量單位都是釐米)
當咱們須要處理一個新的數據集時,採用簡單的可視化技術來解釋數據分析是很是有用的,由於人的眼睛在發現模式方面是很是強大的。然而,有時咱們必須處理的數據由三個以上的維度構成,這樣就沒法在一副圖像中表達出來了。爲了克服這種限制,一種方式能夠將屬性集分解成成對的屬性集,而後建立一個散點圖矩陣。在實踐中,「良好的且有用的」可視化技術的選擇高度依賴於數據的類型,特徵空間的維數,和現實狀況。
下面是Iris數據集的可視化的幾個例子,或多或少有用。
用來建立這些圖形的代碼能夠在「可視化技術進行探索性數據分析」一節中的IPython部分Matplotlib例子中找到。
根據上面的那些圖,特別是散點圖和(1D)直方圖,咱們已經能夠看到,相對於三種不一樣的花,花瓣包含的辨別信息相對於花萼來講要更多一些,由於圖形中花萼的寬度和長度差異更小一些。那麼,該信息就能夠用於特徵選擇,以去除噪聲和減小咱們的數據集的大小。
在下面的章節中,咱們將會看到一些典型的監督學習任務的主要步驟,下圖可讓咱們直觀地瞭解它們是如何鏈接的。
當咱們下載完Iris數據集後,咱們注意到,它已經具備「良好的結構」了,看來是R.A.Fisher已經爲咱們作了一些初步的「預處理」了。沒有丟失的數據和具備數字化的特徵,使得它能夠被一種學習算法所使用。
然而,讓咱們假設該Iris數據集的原始數據是一系列的圖像。在這種狀況下,首先進行的預處理步驟(特徵提取)可能涉及到這些圖像的縮放,平移,和旋轉,這樣纔可以得到以釐米表示的萼片和花瓣的尺寸。
葉子閉塞就成爲一個問題了,這種狀況可能會致使數據丟失:若是數據集中的數據丟失,而算法沒有忽略丟失數據的選項,那麼不少機器學習算法將沒法使用這些數據集正常工做。若是稀疏性(也就是,數據集中空缺數據的數量)並不過高,那麼一般的建議作法是除去任何包含缺失值的樣本的行,或者丟失數據的屬性列。另外一種處理丟失的數據的策略是估算:使用某些統計數據來補充丟失的數據,而不是完全清除掉丟失數據的樣本。對於分類數據,丟失的值能夠從出現頻率最高的類別中獲得;對於一些數值型的屬性,丟失的值可使用樣品的平均值來代替。在通常狀況下,經過k近鄰插補獲得的值來替換丟失數據被認爲是優於使用整體樣本均值進行替換的。
另外的一個關於特徵提取的有趣方法可能包括花瓣和萼片的聚合運算,如花瓣或萼片寬度和高度之間的比率。
假設咱們從原始數據中提取到了某些特徵(在這裏:萼片寬度,萼片長度,花瓣寬度和花瓣長度),咱們如今將把咱們的數據隨機分紅訓練和測試數據集。訓練數據集將被用於訓練模型,而測試數據集的做用是評價每次訓練完成後最終模型的性能。
重要的是,咱們對測試數據集只使用一次,這樣在咱們計算預測偏差指標的時候能夠避免過分擬合。過分擬合致使分類器在訓練的時候表現良好,可是泛化能力通常。這樣會使得在新的模式上面得出的預測偏差值至關高。所以,在模型的建立中使用一些像交叉驗證這樣的技術,就可以提升分類性能。另外的一種策略是從新使用測試數據集來對模型進行評估,這須要建立第三個數據集,即所謂的驗證數據集。
交叉驗證是評估特徵選擇,降維,以及學習算法的不一樣組合的最有用的技術之一。交叉驗證有許多種,最多見的一種極可能是k折交叉驗證了。
在k-折交叉驗證中,原始訓練數據集被分紅k個不一樣的子集(即所謂的「摺疊」),其中,1個摺疊被保留做爲測試集,而另外的K-1個摺疊被用於訓練模型。例如,若是咱們設定k等於4(即,4摺疊),原始訓練集的3個不一樣的子集將被用於訓練模型,而第四個摺疊將用於評價。通過4次迭代後,咱們能夠計算出最終模型的平均錯誤率(和標準差),這個平均錯誤率可讓咱們看到模型的泛化能力如何。
爲了可以比較不一樣的屬性(好比,在聚類分析中經過計算距離或類似性),特別是當屬性具備不一樣的度量時(好比,溫度具備開爾文和攝氏表達方式),就須要用到規範化和其餘的一些屬性變換技術。對特徵進行恰當的變換,是大多數機器學習算法的一個要求。
「規範化」經常使用的代名詞是「最小-最大變換」:屬性值被變換到一個特定的範圍內,好比0到1之間。
另外一種常見的方法是(Z值)「標準化」或「變換到單位方差」的過程:每一個樣品減去屬性的平均值,而後除以標準差,這樣屬性將具備標準正態分佈(μ= 0,σ= 1)的性質。
咱們必需要記住其中很重要的一點:若是咱們在訓練集上使用了任何一種規範化或變換技術,那麼咱們就必須在測試集和未知數據集上使用相同的方法。
更詳細的描述能夠看另外一篇的文章:About Feature Scaling and Normalization and the effect of standardization for machine learning algorithms .
乍一看,特徵選擇和降維之間的區別彷佛違反直覺,由於特徵選擇,最終會致使(降維)到一個較小的特徵空間。在實踐中,術語「特徵選擇」和「降維」之間的主要區別在於:咱們在特徵選擇中保持了「原始特徵座標軸」,而降維一般涉及變換技術。
這兩種方法的主要目的是爲了去除噪聲,經過只保留「有用的」(可區分的)信息提升計算效率,並避免過分擬合(「維數災難」)。
在特徵選擇中,咱們感興趣的是隻保留那些「有意義」的功能,也就是那些能夠幫助創建一個「好」的分類器的功能。舉例來講,若是咱們有一大堆描述花鳶尾的屬性(顏色,高度等),那麼特徵選擇可能最終會只保留4種測量數據,也就是描述花瓣和萼片尺寸的數據。或者,若是咱們一開始就有了4個屬性(萼片和花瓣長度和寬度),咱們能夠進一步縮小咱們的選擇,只保留花瓣的長度和寬度,從而將咱們的特徵空間從4維減小到2維。特徵選擇每每是基於領域知識的(能夠看到,諮詢領域內的專家對特徵選擇老是有幫助的),或探索性分析的,如咱們在前面看到的直方圖或散點圖。想要找到一個特定大小的特徵子集,用來最優化分類模型的性能,每每須要一個窮舉搜索——搜索採樣的全部可能組合。然而,在實際使用中,因爲運算的限制,這種方法可能不具備可行性。因此經常使用序列特徵選擇或遺傳算法來選出一個次優的特徵子集。
經常使用的降維技術是線性變換,如主成分分析(PCA)和線性判別分析(LDA)。PCA能夠當作是一個「無監督」算法,由於它「忽略」了類別,它的目標是找到數據集中方差最大的方向(所謂的主成分)。相對於PCA,LDA是帶「監督」的,它計算出多個類之間的最大區分的方向(「線性判別式」)。
關於PCA和LDA更多細節能夠在這兩篇文章中找到:
下面的圖像顯示了經過線性判別分析(LDA)將Iris數據轉換到二維特徵子空間後的情形。黑線表示了線性決策邊界,它將特徵空間分紅了3個決策區域(R1,R2,R3)。在此決策區域的基礎上,新的觀測結果可被分爲三個不一樣的花種之一:R1 → Virginica , R2 → Versicolor , and R3 → Setosa .
學習算法各式各樣,數量龐大,有各類文章和應用對最流行的算法作了詳細的介紹。下面僅是對四種經常使用的監督學習算法所作的一個很是簡短的總結:
可使用Iris獲得一個很是簡單的決策樹,像這樣:
若是分類器或者評估器的參數不是從機器學習步驟中直接獲得的,而是利用單獨的優化獲得,那麼這些參數稱爲超參數。超參數優化的目標是提升分類器的性能,實現學習算法的良好泛化能力。一種經常使用的超參數優化方法是網格搜索。一般狀況下,網格搜索是經過對候選參數進行窮舉搜索(相對於隨機參數優化)而實現的。當模型的全部參數組合都被評估以後,最佳組合將被保留下來。
混淆矩陣是一種用於性能評估的方便工具,它是一個方陣,裏面的列和行存放的是樣本的實際類vs預測類的數量。
「垃圾郵件與火腿」分類問題的混淆矩陣能夠是這樣的:
一般,使用預測「準確率」或「差錯率」來報告分類性能。準確率定義爲正確分類的樣本佔總樣本的比值;它常常被用做特異性/精密性的同義詞,儘管它的計算方法不一樣。準確率的計算公式是:
其中,TP =真陽性,TN =真陰性,P =陽性,N =陰性。
分類模型的經驗偏差能夠經過計算1-準確率獲得。
然而,如何選擇一個適當的預測偏差度量是高度依賴於具體問題的。在「垃圾郵件」分類的狀況中,咱們更加關注的是低誤報率。固然,垃圾郵件被分紅了火腿確定是煩人的,但不是那麼糟糕。要是一封郵件被誤分爲垃圾郵件,而致使重要信息丟失,那纔是更糟糕的呢。
在如「垃圾郵件」分類的二元分類問題中,有一種方便的方式來調整分類器,稱爲接受者操做特性(ROC或ROC曲線)。
分類性能的其餘指標還有靈敏度,特異性,查全率和精密性。
在一個典型的監督學習的工做流程中,爲了可以選出一個具備滿意性能的模型,咱們將會評估特徵子空間、學習算法和超參數的各類不一樣的組合。正如前面提到的,交叉驗證法是一種好的方法,能夠避免過擬合咱們的訓練數據。