TensorFlow系列專題(二):機器學習基礎

磐創AI發表於2018-11-05

TensorFlow系列專題(二):機器學習基礎

目錄:

  • 資料預處理

    • 歸一化

    • 標準化

    • 離散化

    • 二值化

    • 啞編碼

  • 特徵工程

    • 特徵提取

    • 特徵選擇

  • 模型評估方法

    • 留出法

    • 交叉驗證法

    • 自助法

  • 模型效能度量

    • 正確率(accuracy)和錯誤率(error rate)

    • 查準率(precision)、查全率(recall)與F1

  • 參考文獻

一.資料預處理

資料預處理的方式較多,針對不同型別的資料,預處理的方式和內容也不盡相同,這裡我們簡單介紹幾種較為常用的方式:

(1)歸一化

歸一化是對資料集進行區間縮放,縮放到[0,1]的區間內,把有單位的資料轉化為沒有單位的資料,即統一資料的衡量標準,消除單位的影響。歸一化之後的資料處理起來更方便,同時也能加快程式執行時的收斂速度。

(2)  標準化

標準化是在不改變原資料分佈的前提下,將資料按比例縮放,使之落入一個限定的區間,使資料之間具有可比性。標準化的目的是為了方便資料的下一步處理,比如:進行資料的縮放等變換。常用的標準化方法有z-score標準化、Min-max標準化等。

(3)  離散化

離散化是把連續的數值型特徵進行分段,將落在每一個分段內的資料賦予一個新的統一的符號或數值。可採用相等步長或相等頻率等方式進行離散化。離散化有時是為了適應模型的需要,同時離散化也有助於消除一些異常資料,以及提高演算法的效率等。

(4)  二值化

二值化處理是將數值型資料轉換為0和1兩個值,例如通過設定一個閾值,當特徵的值大於該閾值時,轉換為1,小於或等於該閾值時轉換為0。二值化的目的在於簡化資料,有些時候還可以消除資料中的“雜音”,例如影像資料。

(5)  啞編碼

啞編碼又稱為獨熱編碼(One-Hot Encoding),其作用是將特徵進行量化。例如某個特徵有三個類別:“大”、“中”和“小”,要將這一特徵用於模型中,我們必須將其數值化,一個很容易想到的方式是直接給它們編號“1”、“2”和“3”。這種方式存在一個問題,即引入了額外的關係(例如數值間的大小關係),這可能會“誤導”模型的優化方向。一個更好的方式就是使用啞編碼,例如“大”對應編碼“100”,“中”對應編碼“010”,“小”對應編碼“001”。如果將其對應到一個三維的座標系中,每個類別對應一個點,且三個點之間的歐氏距離相等,均為根號2 

二.特徵工程

特徵工程的目的是把原始的資料轉化為我們的模型可以使用的資料,其主要包括三個子問題,特徵構造、特徵提取和特徵選擇。特徵構造一般是在原有特徵的基礎上做一些“組合”操作,例如對原有特徵進行四則運算,從而得到新的特徵。特徵提取是指使用對映或變換的方法將維數較高的原始特徵轉換為維數較低的新的特徵。特徵選擇即從原始的特徵中挑選出一些最具有代表性,使得模型效果最好的特徵。其中特徵提取和特徵選擇最常使用。

(1)特徵提取

特徵提取又叫作“降維”,目前對於線性特徵的提取,常用方法有主成分分析(PrincipleComponent Analysis,PCA)、線性判別分析(LinearDiscriminant Analysis,LDA)以及獨立成分分析(Independent Component Analysis,ICA)。

   主成分分析(Principle Component Analysis,PCA)[1]

主成分分析(PCA)是一種經典的無監督降維方法,它的主要思想是在降維的過程中實現“減少噪聲”和“去冗餘”從而達到降維的目的。具體來說,“減少噪聲”是指在將維數較高的原始特徵轉換為維數較低的新特徵的過程中保留下維度間相關性儘可能小的特徵維度,這一操作實際上是通過藉助協方差矩陣的原理所實現的;“去冗餘”是指把“減少噪聲”操作之後保留下來的維度再進一步篩選,去掉含有較小“特徵值”的維度,使得留下來的特徵維度含有的“特徵值”儘可能的大,特徵值越大方差就會越大,進而所包含的資訊量就會越大。(注:關於為什麼通過藉助協方差原理可以實現將維數較高的原始特徵轉換為理想的維數較低的新特徵,也就是特徵提取,不在本書的討論範圍內)。

主成分分析(PCA)法一大特點就是它是完全無引數限制的,也就是說PCA的結果只與資料有關,而使用者是無法進行干預的。這是它的優點,同時也是缺點。針對這一特點,PCA核方法kernel-PCA後來被提出,使得使用者可以根據先驗知識預先對資料進行非線性轉換,它也是當下比較流行的方法之一。

   線性判別分析(Linear Discriminant Analysis,LDA)[2]

線性判別分析(LDA)是一種經典的有監督降維演算法,它的主要思想是藉助協方差矩陣、廣義瑞利熵等原理實現資料類別間距離的最大化和類別內距離的最小化。瞭解了其主要思想,那麼線性判別分析(LDA)又是怎樣實現的呢?這裡以二分類LDA為例,二維特徵通過一系列矩陣運算實現從二維平面到一條直線的投影,期間同時通過藉助協方差矩陣、廣義瑞利熵等實現類間資料的最大化與類內資料的最小化。從二分類推廣到多分類是在二分類的基礎上增加了“全域性散度矩陣”來實現最終目標優化函式的設定,從而實現類間距離的最大化和類內距離的最小化。顯然,由於它是針對各個類別做的降維,所以資料經過線性判別分析(LDA)降維後,最多隻能降到原來的類別數減一的維度。

正因為如上特性,線性判別分析(LDA)除了可以實現降維外還可以實現分類[3]。另外,對比前文講的主成分分析(PCA)可以看出,LDA在降維過程中著重考慮分類效能,而PCA著重考慮特徵維度之間的差異性與方差的大小即資訊量的大小。

   獨立成分分析(Independent Component Analysis,ICA)[4]

獨立成分分析(ICA)的主要思想是在降維的過程中保留相互獨立的特徵維度。這比PCA更進一步,在保證特徵維度之間不相關的同時保證相互獨立。不相關只是保證了沒有線性關係,而並不能保證是獨立的。

正因為其是以保證特徵維度之間的相互獨立性為目標,獨立成分分析(ICA)往往會比PCA有更好的降維效果。獨立成分分析(ICA)目前已經廣泛的應用到資料探勘、影像處理等多個領域。

(2)特徵選擇

不同的特徵對模型的影響程度不同,我們要選擇出重要的一些特徵,移除與問題相關性不是很大的特徵,這個過程就叫做特徵選擇。特徵選擇的最終目的是通過減少冗餘特徵以達到減少過擬合、提高模型準確度和在一定程度上減少訓練時間的效果。對比前文介紹的特徵提取,特徵選擇是對原始特徵取特徵子集的一個操作,而特徵提取則是對原始特徵進行對映或者變換操作以得到低維的新特徵。

特徵的選擇在特徵工程中十分重要,往往可以很大程度上決定最後模型訓練結果的好壞。常用的特徵選擇方法有:過濾式(filter)、包裹式(wrapper)以及嵌入式(embedding)。

① 過濾式

過濾式特徵選擇一般是通過統計度量的方法評估每個特徵和結果的相關性,來對特徵進行篩選,留下相關性較強的特徵。其核心思想是:先對資料集進行特徵選擇,然後再進行模型的訓練。即過濾式特徵選擇是獨立於特定的學習演算法的。也正因如此,過濾式特徵選擇擁有較高的通用性,可適用於大規模資料集。同樣地,正是由於其獨立於特定的學習演算法,也造成了其在後面的模型表現即分類準確率方面可能會表現欠佳。常用的過濾式特徵選擇方法有Pearson相關係數法、方差選擇法、假設檢驗、互資訊法等。這些方法通常是單變數的。

② 包裹式

包裹式特徵選擇通常是把最終機器學習模型的表現作為特徵選擇的重要依據,一步步篩選特徵。這種一步步篩選特徵的過程可以看作是目標特徵組合的搜尋過程,這種搜尋過程可以是最佳優先搜尋、隨機爬山演算法等。目前比較常用的一種包裹式特徵選擇法為遞迴特徵消除法,其原理是使用一個基模型(如:隨機森林、邏輯迴歸等)進行多輪訓練,每輪訓練結束後,消除若干權值係數較低的特徵,再基於新的特徵集進行新的一輪訓練。

正是由於包裹式特徵選擇是根據最終的模型表現來選擇特徵的,故通常其要比前文提到的過濾式特徵選擇有著更好的模型表現。同樣的,由於訓練過程時間久,系統的開銷也更大,一般來說不太適用於大規模資料集。

  嵌入式

嵌入式特徵選擇同樣是根據機器學習的演算法、模型來分析特徵的重要性,從而選擇比較重要的N個特徵。與包裹式特徵選擇法最大的不同是,嵌入式方法是將特徵選擇過程與模型的訓練過程結合為一體,這樣就可以快速地找到最佳的特徵集合,更加高效、快捷。簡而言之,嵌入式特徵選擇是將全部的資料一起輸入模型中進行訓練和評測,而包裹式特徵選擇一般是一步步篩選特徵,一步步減少特徵進而得到所需要的特徵維度。常用的嵌入式特徵選擇方法有基於正則化項的特徵選擇法(如:Lasso)和基於樹模型的特徵選擇法(如:GBDT)。

三.模型評估方法

對於訓練得到的模型,我們肯定希望它在新的資料上也總是能夠表現出很好的效能,所以我們希望模型能夠儘可能多的學習到訓練資料的特徵。在機器學習中有兩個常見的現象,分別是“過擬合”和“欠擬合”。當模型把訓練資料的特徵學習的“太好”的時候,往往會出現“過擬合”的現象,與之相對應的就是“欠擬合”,即模型沒有學習好訓練資料的特徵。圖1-4是一個簡單的例子。

TensorFlow系列專題(二):機器學習基礎圖一 “過擬合”和‘’欠擬合‘’示例(從左至右依次為:理想情況、欠擬合和過擬合)

無論是“過擬合”還是“欠擬合”,這都不是我們希望看到的。“欠擬合”通常是由於模型過於簡單或者學習不夠充分等等原因導致的,相對來說也比較容易解決。而“過擬合”一般是由於資料中的“噪聲”、或者是模型將訓練資料特有的一些特徵當成了該類資料都會具有的一般特徵,通常在訓練資料過少、模型過於複雜或者引數過多的時候容易出現“過擬合”問題。

為了得到一個效果最好的模型,我們通常會選擇多種演算法,對於每種演算法都會嘗試不同的引數組合,並比較哪一種演算法、哪一種引數設定更好,這就是模型的選擇。為了比較這些模型的優劣,我們需要有一些相應的評估方法和評價標準。這裡我們先來介紹一些常用的模型評估的方法,後面的內容裡我們會接著介紹模型評價的一些標準,又稱為模型的“效能度量”。

在介紹具體的模型評估的方法之前,我們需要先弄清楚幾個簡單的概念。第一,我們常說的“引數”和“超引數”分別指什麼?第二,“訓練集”、“測試集”和“驗證集”怎麼劃分?

首先,什麼是“引數”和“超引數”?這裡的“引數”既是我們的模型需要學習的內容,它是模型“內部”的變數,比如模型的權重矩陣和偏置。而超引數是指在一個模型中,我們可以人為設定和修改的引數,例如神經網路的層數、學習率以及隱藏層神經元的個數等等。模型的選擇除了選擇具體的模型外(例如是選擇LSTM還是選擇Bi-LSTM),還需要選擇模型的“超引數”。

“訓練集”、“測試集”和“驗證集”的劃分是模型的選擇和訓練過程中的一個重要環節。可能有部分讀者對“測試集”和“驗證集”的關係不是很清楚。“測試集”的作用很好理解,當我們訓練好了一個模型之後,我們想要知道這個模型的泛化能力好不好,這時候我們可以用模型在“測試集”上的表現來近似評價模型的泛化能力。那麼“驗證集”又是什麼呢?舉個簡單的例子:假設我們有一個訓練集A和一個測試集B,兩個資料集沒有重疊。當我們在進行模型的選擇的時候,我們用訓練集A來訓練模型,然後用測試集B來評估模型的“好壞”。這個時候可能會出現一種問題,由於我們是以模型在測試集B上的表現來評價模型的“好壞”,所以我們最後選擇的模型可能剛好在測試集B上的表現比較好,這就是我們常說的“過擬合”。那麼要如何避免這種問題呢?方法就是再增加一個“驗證集”,在選擇模型的時候,我們使用“驗證集”來評估模型的“好壞”。對於最終選定和訓練好的模型,我們用“測試集”來評估模型的泛化能力。“訓練集”、“測試集”和“驗證集”的資料均不能有重疊,通常三個資料集的劃分比列為:8:1:1。雖然在平時表述的時候,我們通常不會嚴格的區分“測試集”和“驗證集”(一般習慣性的都用“測試集”表述),但是為了避免混淆以及確保規範,在本書中統一使用“驗證集”。另外,在本小節裡,所有的資料集劃分,都只是劃分“訓練集”和“驗證集”,不涉及到“測試集”。讀者可以理解為我們已經有了“訓練集”和“測試集”,本小節所介紹的模型評估的方法是要在“訓練集”的基礎上進一步劃分出“訓練集”和“驗證集”。

接下來我們介紹幾種常見的模型評估的方法:留出法、交叉驗證法、留一法(交叉驗證法的一個特例)以及自助法。

(1)留出法

“留出法”(hold-out)是一種較為簡單的方法,它直接將資料集劃分為訓練集和驗證集,集合和集合是互斥的,TensorFlow系列專題(二):機器學習基礎

需要注意的是,為了確保“訓練集”和“驗證集”中資料分佈的一致性,我們需要使用“分層取樣”的方式劃分資料集。舉個簡單的例子,假設我們的資料集中有100個樣本,其中有50個正例和50個負例。我們假設訓練集和驗證集的樣本數比例為,即訓練集有80個樣本,驗證集有20個樣本。若使用“分層取樣”,則訓練集中應該有40個正例和40個負例,而驗證集中應該有10個正例和10個負例。

由於資料的劃分具有隨機性,通過一次劃分資料集訓練後得到的模型,在“驗證集”上的表現不一定能體現出模型真正的效果。因此我們一般會多次劃分資料集並訓練模型,並取多次實驗結果的平均值作為最終模型評估的結果。

“留出法”還存在一個問題,那就是“訓練集”和“驗證集”的比例該如何確定。這個問題在資料樣本足夠多的時候可以不用考慮,但在資料樣本不是特別多的時候就會造成一定困擾,一般的做法是將的資料作為“驗證集”。

(2)交叉驗證法

“交叉驗證法”(cross validation)將資料集劃分為個大小相同,但互斥的子集,即。為了確保資料分佈的一致性,這裡我們同樣使用“分層取樣”的方式劃分資料集。

對於劃分得到的個資料集,我們每次使用其中的一個作為“驗證集”,剩下的個作為“訓練集”,將得到的個結果取平均值,作為最終模型評估的結果,我們稱這種方法為“k折交叉驗證”。和“留出法”一樣,為了排除資料集劃分的影響,我們對資料集進行次劃分,每次劃分得到個子集,然後進行次“k折交叉驗證”,並取這次“k折交叉驗證”結果的平均值作為最終的結果。我們稱這種方法為“次k折交叉驗證”,常見的有“5次10折交叉驗證”或“10次10折交叉驗證”。

“交叉驗證法”有一種特殊地情況,假設我們的資料集大小為,若使得的值等於,則把這種情況稱為“留一法”,因為這時我們的“驗證集”中只有一個樣本。“留一法”的優點是不存在資料集劃分所產生的影響,但是當資料集較大時,對於樣本數量為的資料集,使用“留一法”需要訓練個模型,這會需要很大的計算開銷。

(3)自助法

“自助法”是一種基於自助取樣的方法,通過取樣從原始資料集中產生一個訓練集。假設我們的資料集中包含有個樣本,每次隨機的且有放回的從資料集中挑選出一個樣本新增到資料集中,重複進行次後,我們會得到一個和原始資料集大小相同的資料集。在資料集中,樣本在次取樣中均不被抽到的概率為:TensorFlow系列專題(二):機器學習基礎,取極限可以得到:

TensorFlow系列專題(二):機器學習基礎                       式1-1

求解式1-1可以得到其值為1/e,約等於36.8%。因此,在m次取樣後,資料集D中仍然有約36.8%的樣本沒有被抽到,我們可以用這些資料作為驗證集,即:TensorFlow系列專題(二):機器學習基礎

“自助法”在樣本數量較少的時候比較適用,因為即使劃分了驗證集也並沒有減少訓練集的數量;此外,使用“自助法”可以從原始資料集中產生出多個互不相同的訓練集,這對整合學習很有幫助。“自助法”也有缺點,因為訓練集的產生是隨機取樣得到的,因此資料樣本分佈的一致性被破壞了。

下表是對幾種模型評估方法的總結:

表1-1 常用的模型評估方法

評估方法

集合關係

注意事項

優缺點

留出法

(hold-out)


要分層取樣,儘可能保持資料分佈的一致性;為了保證可靠性,需要重複實驗後取平均值作為最終的結果。

訓練集/測試集的劃分不好控制,測試集劃分的過小或者過大,都會導致測試結果的有效性得不到保證。

交叉驗證法

(cross validation)


為了排除資料劃分引入的誤差,通常使用“p次k折交叉驗證”。

穩定性和保真性很大程度上取決於k的值。

留一法

(Leave-One-Out,LOO)


交叉驗證法的特例,k值取總資料集的大小。

不受樣本劃分的影響,但是當資料量較大時,計算量也較大。

自助法

(bootstrapping)


有放回的重複取樣。

適合在資料量較少的時候使用;有放回的取樣破壞了原始資料的分佈,會引入估計偏差。

 四.模型效能度量

前面我們介紹了一些常用的模型評估的方法,有了評估的方法,我們還需要有評價的標準,才能對機器學習模型進行評估和對比。在這部分內容裡我們就來了解一些用來衡量機器學習模型泛化能力的評價標準,我們稱之為模型的效能度量(performance measure)。

(1)正確率(accuracy)和錯誤率(errorrate)

正確率與錯誤率是分類任務中最常用的兩個評價指標,它的概念也很好理解。正確率是指分類器預測正確的資料樣本數佔測試集(或驗證集)中樣本總數的比例。相應地,錯誤率是指在測試集或驗證集上,分類器預測錯誤的資料樣本數佔測試集(或驗證集)中樣本總數的比例。具體計算方式如下:

TensorFlow系列專題(二):機器學習基礎

         (2)查準率(precision)、查全率(recall)與F1

正確率和錯誤率是最為常用的效能度量指標,但在有些時候我們可能需要更細緻的度量指標,舉個例子,假設我們訓練好了一個垃圾郵件分類的模型,這是一個簡單的二分類模型,我們要用這個模型將垃圾郵件和正常郵件進行分類。模型都不會是百分之百準確的,所以這個時候就需要有一個考量。對於有些使用者來說,他們希望儘可能的排除掉所有的垃圾郵件,哪怕偶爾將一些正常郵件誤判為垃圾郵件。還有一些使用者可能會有很多重要的郵件,所以他們希望這些重要的郵件都能正常收到,哪怕也收到少數垃圾郵件。所以,這個時候我們關心的有兩點:第一點,在分類得到的“正常郵件”中有多少是真正的正常郵件;第二點,所有的正常郵件中,有多少被正確的分類了。這個時候,我們就需要有新的度量指標:查準率和查全率(也稱為“召回率”)。

以二分類為例,我們把分類器的分類結果進行統計,需要統計四種資料,如下表所示:

表1-2 計算查準率和查全率時需要統計的資料

條目

描述

真正例(true positive)

真實值(actual)= 1,預測值(predicted)=  1

假正例(false positive)

真實值(actual)= 0,預測值(predicted)=  1

真反例(true negative)

真實值(actual)= 0,預測值(predicted)=  0

假反例(false negative)

真實值(actual)= 1,預測值(predicted)=  0

令TP、FP、TN和FN分別表示上述四種情況所對應的資料樣本個數,根據統計的資料,我們可以做出一張表,稱為“混淆矩陣(Confusion Matrix)”:

表1-3 分類結果的混淆矩陣

真實值       預測值

正例(positive)

反例(negative)



正例(positive)

TP(真正例)

FN(假反例)


反例(negative)

FP(假正例)

TN(真反例)



查準率(precision)與查全率(recall)的定義如下:

TensorFlow系列專題(二):機器學習基礎

                相應地,正確率(accuracy)和錯誤率(error rate)可以表示為:

TensorFlow系列專題(二):機器學習基礎

              下面我們看一個簡單的例子,這是一個三分類的例子。假設我們需要實現貓、狗和兔子的分類,我們用訓練好的模型對測試集(約定測試集中每個類別有1000個資料樣本)進行判別。我們得到了如下表所示的混淆矩陣:

表1-4 三分類結果的混淆矩陣

真實值       預測值

兔子

812

88

132

60

908

70

兔子

132

32

798

對應上面的混淆矩陣,我們可以將其拆成三個二分類的矩陣,以貓為例:

表1-5 對於貓的二分類混淆矩陣

真實值       預測值

狗、兔子

TP = 812

FN = 88+100

狗、兔子

FN = 60+132

TN = (908+32)+(70+798)

根據公式1-4與公式1-5可得:

TensorFlow系列專題(二):機器學習基礎


在絕大多數情況下,查準率(precision)和查全率(recall)總是相對立的,當查準率高的時候,查全率往往會偏低,而當查全率高的時候,查準率又會偏低。例如我們前面提到的垃圾郵件過濾的例子,我們如果想要儘可能的過濾掉垃圾郵件,那就免不掉會把一些正常郵件也誤判為垃圾郵件;如果我們想要儘可能的保留所有的正常郵件,那就免不了也會保留一些垃圾郵件。所以,在通常情況下,我們需要根據自己的實際需要來設定一個合適的閾值,使得查準率和查全率的平衡點能最好的滿足我們的需求。

在以正確率和錯誤率作為模型的評價指標時,我們可以簡單的通過比較兩個模型的正確率來判斷孰優孰劣。那在以查準率和查全率為評價指標時,我們要如何比較呢。一般常見的有兩種方法,一種是做“P-R圖”,另一種是計算“F1”度量值。這裡本書選擇介紹後者,這是一種更常用、更直接的度量方法,在阿里天池、Kaggle等比賽中,也都是使用“F1”度量作為模型的評價指標,它是查準率和查全率的一種加權平均。

度量的計算公式如下:(約定用P表示查準率(precision),R表示查全率(Recall)):

TensorFlow系列專題(二):機器學習基礎

          由於在不同情況下我們對查準率和查全率的側重不同,所以我們需要有一個一般形式的度量,記為TensorFlow系列專題(二):機器學習基礎

TensorFlow系列專題(二):機器學習基礎

              

上式中,當的值大於1時,代表模型的評價更側重於查全率,當TensorFlow系列專題(二):機器學習基礎時,模型的評價更側重於查準率,TensorFlow系列專題(二):機器學習基礎

五.參考文獻

[1] ATUTORIAL ON PRINCIPAL COMPONENT ANALYSIS Derivation, Discussion and SingularValue Decomposition, Jon Shlens , 2003

[2] David M. Blei, Andrew Y. Ng, and Michael I. Jordan. Latentdirichlet allocation. J. Mach. Learn. Res.,3:993–1022, March 2003.

[3] Ivan Titov and Ryan McDonald. Modelingonline reviews with multi-grain topic models. In Proceeding ofthe 17th international conference on World Wide Web, WWW ’08, pages 111–120,New York, NY, USA, 2008. ACM.

[4] Independentcomponent analysis: algorithms and applications, A Hyvärinen E Oja, 2000 , 13 (4) :411-430

 原文連結:https://mp.weixin.qq.com/s/pBZxfhTY1x3DpzRmbDeoVw

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31555081/viewspace-2218763/,如需轉載,請註明出處,否則將追究法律責任。

相關文章