模式分類(pattern classification)和機器學習(machine learning)是非常熱的話題,幾乎在所有的現代應用程式中都得到了應用:例如郵局中的光學字符識別(OCR),電子郵件過濾,超市條形碼掃描,等等。
在這篇文章中,我會簡要描述一個典型的監督學習任務的主要概念,這些概念將作為將來的文章和實現各種學習算法的基礎。
機器學習和模式分類預測建模是建立一個能夠進行預測的模型的通用概念。通常情況下,這樣的模型包括一個機器學習算法,以便從訓練數據集中學習某些屬性做出這些預測。
預測建模可以進一步分成兩個子集:回歸和模式分類。回歸模型基於變量和趨勢之間的關係的分析,以便做出關於連續變量的預測,如天氣預報的最高溫度的預測。
與回歸模型不同,模式分類的任務是分配離散的類標籤到特定的observation作為預測的結果。回到上面的例子:在天氣預報中的模式分類任務可能是一個晴天、雨天或雪天的預測。
拋開所有的可能性,本文的重點將放在「模式分類」,分配預先定義的類標籤到特定實例將它們分成不同的類別的一般方法。「實例」是「observation」或「樣本」的同義詞,描述由一個或多個特徵(或稱為「屬性」)組成的「對象」。
監督學習、無監督學習和強化學習模式分類任務可被分成兩個主要的子類別:監督學習和無監督學習。在監督學習中,用於構建分類模型的數據的類標籤是已知的。例如,一個垃圾郵件過濾的數據集,它裡面將包含垃圾郵件以及「火腿」(=不是垃圾郵件)消息。在有監督的學習問題中,我們已經知道了訓練集中的郵件要麼是垃圾郵件,要麼是火腿。我們將會使用這些信息來訓練我們的模型,以達到能對新增的不明確的郵件進行分類。
上圖顯示了一個典型的分類任務,用到的樣本具有兩個隨機變量;訓練數據(帶有類標記)用圖中的散點表示。紅色點劃線表明了線性決策(左側)或者二次決策(右側)的邊界,這些邊界決定了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 .
學習算法各式各樣,數量龐大,有各種文章和應用對最流行的算法做了詳細的介紹。下面僅是對四種常用的監督學習算法所做的一個非常簡短的總結:
支持向量機(SVM)是利用採樣超平面分隔兩個或多個類的分類方法。最終,具有最大間隔的超平面被保留,其中「間隔」指的是從採樣點到超平面的最小距離。組成間隔的採樣點稱為支持向量,從而建立起最終的SVM模型。貝葉斯分類器是基於一個統計的模型(即貝葉斯定理:後驗概率的計算基於先驗概率和所謂的似然)。一個樸素貝葉斯分類器假定所有屬性都是條件獨立的,因此,計算似然可以簡化為計算帶有特定類標籤的獨立屬性的條件概率的乘積就行了。人工神經網絡(ANN)是模仿人或動物「大腦」的圖類分類器,其中相互連接的節點模擬的是神經元。決策樹分類器 是樹形圖,其中,圖中的節點用於測試某個特徵子集的特定條件,然後分支把決策分割到葉子節點上。圖中的樹葉表示最低級別,用於確定類的標籤。通過最小化基尼雜質,或者最大化信息增益可以訓練成為最佳樹。可以使用Iris得到一個非常簡單的決策樹,像這樣:
如果分類器或者評估器的參數不是從機器學習步驟中直接得到的,而是利用單獨的優化得到,那麼這些參數稱為超參數。超參數優化的目標是提高分類器的性能,實現學習算法的良好泛化能力。一種常用的超參數優化方法是網格搜索。通常情況下,網格搜索是通過對候選參數進行窮舉搜索(相對於隨機參數優化)而實現的。當模型的所有參數組合都被評估之後,最佳組合將被保留下來。
預測誤差指標和模型選擇混淆矩陣是一種用於性能評估的方便工具,它是一個方陣,裡面的列和行存放的是樣本的實際類vs預測類的數量。
「垃圾郵件與火腿」分類問題的混淆矩陣可以是這樣的:
通常,使用預測「準確率」或「差錯率」來報告分類性能。準確率定義為正確分類的樣本佔總樣本的比值;它經常被用作特異性/精密性的同義詞,儘管它的計算方法不同。準確率的計算公式是:
其中,TP =真陽性,TN =真陰性,P =陽性,N =陰性。
分類模型的經驗誤差可以通過計算1-準確率得到。
然而,如何選擇一個適當的預測誤差度量是高度依賴於具體問題的。在「垃圾郵件」分類的情況中,我們更加關注的是低誤報率。當然,垃圾郵件被分成了火腿肯定是煩人的,但不是那麼糟糕。要是一封郵件被誤分為垃圾郵件,而導致重要信息丟失,那才是更糟糕的呢。
在如「垃圾郵件」分類的二元分類問題中,有一種方便的方式來調整分類器,稱為接受者操作特性(ROC或ROC曲線)。
分類性能的其他指標還有靈敏度,特異性,查全率和精密性。
靈敏度(同查全率)和精密性用來評估二元分類問題中的「真陽性率」:也就是對「陽性/真」預測準確的概率(比如,當試圖預測某種疾病的時候,如果一個病人長了這種病,那么正確的預測出這個人長了這種病,就是「陽性/真」)。在一個典型的監督學習的工作流程中,為了能夠選出一個具有滿意性能的模型,我們將會評估特徵子空間、學習算法和超參數的各種不同的組合。正如前面提到的,交叉驗證法是一種好的方法,可以避免過擬合我們的訓練數據。
原文: Predictive modeling, supervised machine learning, and pattern classification - the big picture(翻譯/Fashionxu 審校/周建丁)
本文為CSDN編譯整理,未經允許不得轉載,如需轉載請聯繫market#csdn.net(#換成@)