週末在家無聊閒逛github,發現一個很有趣的開源專案,作者用手繪圖的方式講解了機器學習模型構建的全流程,邏輯清晰、生動形象。同時,作者也對幾張圖進行了詳細的講解,學習之後,收穫很多,於是將其翻譯下來,和大家一起學習。
地址:https://github.com/dataprofessor/infographic
全文如下:
感覺學習數據科學枯燥無味,那如何能讓學習數據科學變得有趣而簡單呢?帶着這個目標,我開始在iPad上塗鴉建立機器學習模型所需的流程。經過幾天的努力,上圖所示的資訊圖就是我的成果,內容已經被髮布在GitHub上。
數據集是你構建機器學習模型歷程中的起點。簡單來說,數據集本質上是一個M×N矩陣,其中M代表列(特徵),N代錶行(樣本)。
列可以分解爲X和Y,首先,X是幾個類似術語的同義詞,如特徵、獨立變數和輸入變數。其次,Y也是幾個術語的同義詞,即類別標籤、因變數和輸出變數。
圖1. 數據集的卡通插圖
應該注意的是,一個可以用於監督學習的數據集(可以執行迴歸或分類)將同時包含X和Y,而一個可以用於無監督學習的數據集將只有X。
此外,如果Y包含定量值,那麼數據集(由X和Y組成)可以用於迴歸任務,而如果Y包含定性值,那麼數據集(由X和Y組成)可以用於分類任務。
進行探索性數據分析(EDA)是爲了獲得對數據的初步瞭解。在一個典型的數據科學專案中,我會做的第一件事就是通過執行EDA來 "盯住數據",以便更好地瞭解數據。
我通常使用的三大EDA方法包括:
描述性統計:平均數、中位數、模式、標準差。
數據視覺化:熱力圖(辨別特徵內部相關性)、箱形圖(視覺化羣體差異)、散點圖(視覺化特徵之間的相關性)、主成分分析(視覺化數據集中呈現的聚類分佈)等。
數據整形:對數據進行透視、分組、過濾等。
圖2. NBA球員統計數據的箱形圖範例
圖3. NBA球員統計數據的相關熱力圖範例
圖4. NBA球員統計數據的直方圖範例
圖5. NBA球員統計數據的散佈圖範例
數據預處理(又稱數據清理、數據整理或數據處理)是指對數據進行各種檢查和審查的過程,以糾正缺失值、拼寫錯誤、使數值正常化/標準化以使其具有可比性、轉換數據(如對數轉換)等問題。
"Garbage in, Garbage out."
正如上面的引言所說,數據的品質將對生成模型的品質產生很大的影響。因此,爲了達到最高的模型品質,應該在數據預處理階段花費大量精力。一般來說,數據預處理可以輕鬆地佔到數據科學專案所花費時間的80%,而實際的模型建立階段和後續的模型分析僅佔到剩餘的20%。
在機器學習模型的開發過程中,希望訓練好的模型能在新的、未見過的數據上表現良好。爲了模擬新的、未見過的數據,對可用數據進行數據分割,從而將其分割成2部分(有時稱爲訓練—測試分割)。特別是,第一部分是較大的數據子集,用作訓練集(如佔原始數據的80%),第二部分通常是較小的子集,用作測試集(其餘20%的數據)。需要注意的是,這種數據拆分只進行一次。
接下來,利用訓練集建立預測模型,然後將這種訓練好的模型應用於測試集(即作爲新的、未見過的數據)上進行預測。根據模型在測試集上的表現來選擇最佳模型,爲了獲得最佳模型,還可以進行超參數優化。
圖6. 訓練—測試集分割示意圖
另一種常見的數據分割方法是將數據分割成3部分。(1) 訓練集,(2) 驗證集和(3) 測試集。與上面解釋的類似,訓練集用於建立預測模型,同時對驗證集進行評估,據此進行預測,可以進行模型調優(如超參數優化),並根據驗證集的結果選擇效能最好的模型。正如我們所看到的,類似於上面對測試集進行的操作,這裏我們在驗證集上做同樣的操作。請注意,測試集不參與任何模型的建立和準備。因此,測試集可以真正充當新的、未知的數據。Google的《機器學習速成班》對這個話題進行了更深入的處理。
圖7. 訓練—驗證—測試集分割示意圖
爲了最經濟地利用現有數據,通常使用N倍交叉驗證(CV),將數據集分割成N個折(即通常使用5倍或10倍CV)。在這樣的N倍CV中,其中一個折被留作測試數據,而其餘的折則被用作建立模型的訓練數據。
例如,在5倍CV中,有1個折被省略,作爲測試數據,而剩下的4個被集中起來,作爲建立模型的訓練數據。然後,將訓練好的模型應用於上述遺漏的折(即測試數據)。這個過程反覆 反復進行,直到所有的折都有機會被留出作爲測試數據。因此,我們將建立5個模型(即5個折中的每個折都被留出作爲測試集),其中5個模型中的每個模型都包含相關的效能指標(我們將在接下來的部分討論)。最後,度量(指標)值是基於5個模型計算出的平均效能。
圖8. 交叉驗證示意圖
在N等於數據樣本數的情況下,我們稱這種留一的交叉驗證。在這種型別的CV中,每個數據樣本代表一個折。例如,如果N等於30,那麼就有30個折(每個折有1個樣本)。在任何其他N折CV中,1個折點被留出作爲測試集,而剩下的29個折點被用來建立模型。接下來,將建立的模型應用於對留出的折進行預測。與之前一樣,這個過程反覆 反復進行,共30次;計算30個模型的平均效能,並將其作爲CV效能指標。
現在,有趣的部分來了,我們終於可以使用精心準備的數據來建立模型了。根據目標變數(通常稱爲Y變數)的數據型別(定性或定量),我們要建立一個分類(如果Y是定性的)或迴歸(如果Y是定量的)模型。
監督學習:是一種機器學習任務,建立輸入X和輸出Y變數之間的數學(對映)關係。這樣的X、Y對構成了用於建立模型的標籤數據,以便學習如何從輸入中預測輸出。
無監督學習:是一種只利用輸入X變數的機器學習任務。這種 X 變數是未標記的數據,學習演算法在建模時使用的是數據的固有結構。
強化學習:是一種決定下一步行動方案的機器學習任務,它通過試錯學習來實現這一目標,努力使回報最大化。
超參數本質上是機器學習演算法的參數,直接影響學習過程和預測效能。由於沒有 "一刀切 "的超參數設定,可以普遍適用於所有數據集,因此需要進行超參數優化(也稱爲超參數調整或模型調整)。
我們以隨機森林爲例。在使用randomForest R包時,通常會對兩個常見的超參數進行優化,其中包括mtry和ntree參數(這對應於scikit-learnPython庫中RandomForestClassifier()和RandomForestRegressor()函數中的nestimators和maxfeatures)。mtry(maxfeatures)代表在每次分裂時作爲候選變數隨機採樣的變數數量,而ntree(nestimators)代表要生長的樹的數量。
另一種流行的機器學習演算法是支援向量機。需要優化的超參數是徑向基函數(RBF)內核的C參數和gamma參數(即線性內核只有C參數;多項式內核的C和指數)。C參數是一個限制過擬合的懲罰項,而gamma參數則控制RBF核的寬度。如上所述,調優通常是爲了得出超參數的最佳值集,儘管如此,也有一些研究旨在爲C參數和gamma參數找到良好的起始值(Alvarsson等人,2014)。
地址:https://pubs.acs.org/doi/10.1021/ci500344v
顧名思義,特徵選擇從字面上看就是從最初的大量特徵中選擇一個特徵子集的過程。除了實現高精度的模型外,機器學習模型構建最重要的一個方面是獲得可操作的見解,爲了實現這一目標,能夠從大量的特徵中選擇出重要的特徵子集非常重要。
特徵選擇的任務本身就可以構成一個全新的研究領域,在這個領域中,大量的努力都是爲了設計新穎的演算法和方法。從衆多可用的特徵選擇演算法中,一些經典的方法是基於模擬退火和遺傳演算法。除此之外,還有大量基於進化演算法(如粒子羣優化、蟻羣優化等)和隨機方法(如蒙特卡洛)的方法。
我們自己的研究小組也在對醛糖還原酶抑制劑的定量結構—活性關係建模的研究中,探索了利用蒙特卡洛模擬進行特徵選擇的方法(Nantasenamat等,2014)。
地址:https://doi.org/10.1016/j.ejmech.2014.02.043
在《遺傳演算法搜尋空間拼接粒子羣優化作爲通用優化器》的工作中,我們還設計了一種基於結合兩種流行的進化演算法即遺傳演算法和粒子羣演算法的新型特徵選擇方法(Li等,2013)。
地址:https://doi.org/10.1016/j.chemolab.2013.08.009
圖9. 遺傳演算法搜尋空間拼接粒子羣優化(GA-SSS-PSO)方法的原理示意圖,用Schwefel函數在2維度上進行說明
"原搜尋空間(a)x∈[-500,0]在每個維度上以2的固定間隔拼接成子空間(圖中一個維度等於一個橫軸)。這樣就得到了4個子空間(b-e),其中x在每個維度上的範圍是原始空間的一半。GA的每一個字串都會編碼一個子空間的索引。然後,GA啓發式地選擇一個子空間(e),並在那裏啓動PSO(粒子顯示爲紅點)。PSO搜尋子空間的全域性最小值,最好的粒子適應性作爲編碼該子空間索引的GA字串的適應性。最後,GA進行進化,選擇一個新的子空間進行探索。整個過程重複進行,直到達到滿意的誤差水平。"
在監督學習中,兩個常見的機器學習任務包括分類和迴歸。
一個訓練有素的分類模型將一組變數(定量或定性)作爲輸入,並預測輸出的類標籤(定性)。下圖是由不同顏色和標籤表示的三個類。每一個小的彩色球體代表一個數據樣本。
圖10. 多類別分類問題的示意圖
三類數據樣本在二維中的顯示。上圖顯示的是數據樣本的假設分佈。這種視覺化圖可以通過執行PCA分析並顯示前兩個主成分(PC)來建立;或者也可以選擇兩個變數的簡單散點圖視覺化。
以企鵝數據集(Penguins Dataset)爲例(最近提出作爲大量使用的Iris數據集的替代數據集),我們將定量(喙長、喙深、鰭長和身體品質)和定性(性別和島嶼)特徵作爲輸入,這些特徵唯一地描述了企鵝的特徵,並將其歸入三個物種類別標籤(Adelie、Chinstrap或Gentoo)之一。該數據集由344行和8列組成。之前的分析顯示,該數據集包含333個完整的案例,其中11個不完整的案例中出現了19個缺失值。
圖11. 三個企鵝物種的類別標籤(Chinstrap、Gentoo和Adelie)
如何知道我們的模型表現好或壞?答案是使用效能指標,一些常見的評估分類效能的指標包括準確率(Ac)、靈敏度(Sn)、特異性(Sp)和馬太相關係數(MCC)。
其中TP、TN、FP和FN分別表示真陽性、真陰性、假陽性和假陰性的範例。應該注意的是,MCC的範圍從-1到1,其中MCC爲-1表示最壞的可能預測,而值爲1表示最好的可能預測方案。此外,MCC爲0表示隨機預測。
簡而言之,可以通過以下簡單等式很好地總結訓練有素的迴歸模型:Y = f(X)。其中,Y對應量化輸出變數,X指輸入變數,f指計算輸出值作爲輸入特徵的對映函數(從訓練模型中得到)。上面的迴歸例子公式的實質是,如果X已知,就可以推導出Y。一旦Y被計算出來(我們也可以說是 "預測"),一個流行的視覺化方式是將實際值與預測值做一個簡單的散點圖,如下圖所示。
圖12. 實際值與預測值的簡單散點圖
波士頓住房數據集(Boston Housing Dataset)是數據科學教學中通常使用的一個熱門範例數據集。該數據集由506行和14列組成。爲了簡潔起見,下面 下麪顯示的是標題(顯示變數名稱)加上數據集的前4行。
在14列中,前13個變數被用作輸入變數,而房價中位數(medv)被用作輸出變數。可以看出,所有14個變數都包含了量化的數值,因此適合進行迴歸分析。我還在YouTube上做了一個逐步演示如何用Python建立線性迴歸模型的視訊。
地址:https://youtu.be/R15LjD8aCzc
在視訊中,我首先向大家展示瞭如何讀取波士頓房屋數據集,將數據分離爲X和Y矩陣,進行80/20的數據拆分,利用80%的子集建立線性迴歸模型,並應用訓練好的模型對20%的子集進行預測。最後顯示了實際與預測medv值的效能指標和散點圖。
圖13. 測試集的實際medv值與預測medv值(20%子集)的散點圖。
對迴歸模型的效能進行評估,以評估擬合模型可以準確預測輸入數據值的程度。
評估迴歸模型效能的常用指標是確定係數(R²)。
從公式中可以看出,R²實質上是1減去殘差平方和(SSres)與總平方和(SStot)的比值。簡單來說,可以說它代表瞭解釋方差的相對量度。例如,如果R²=0.6,那麼意味着該模型可以解釋60%的方差(即60%的數據符合迴歸模型),而未解釋的方差佔剩餘的40%。
此外,均方誤差(MSE)以及均方根誤差(RMSE)也是衡量殘差或預測誤差的常用指標。
從上面的公式可以看出,MSE顧名思義是很容易計算的,取平方誤差的平均值。此外,MSE的簡單平方根可以得到RMSE。
現在我們再來看看分類模型的整個過程。以企鵝數據集爲例,我們可以看到,企鵝可以通過4個定量特徵和2個定性特徵來描述,然後將這些特徵作爲訓練分類模型的輸入。在訓練模型的過程中,需要考慮的問題包括以下幾點。
使用什麼機器學習演算法?
應該探索什麼樣的搜尋空間進行超參數優化?
使用哪種數據分割方案?80/20分割還是60/20/20分割?還是10倍CV?
一旦模型被訓練,得到的模型就可以用來對類別標籤(即在我們的案例中企鵝種類)進行預測,可以是三種企鵝種類中的一種:Adelie、Chinstrap或Gentoo。
除了只進行分類建模,我們還可以進行主成分分析(PCA),這將只利用X(獨立)變數來辨別數據的底層結構,並在這樣做的過程中允許將固有的數據簇視覺化(如下圖所示爲一個假設圖,其中簇根據3種企鵝物種進行了顏色編碼)。
圖14. 建立一個分類模型的過程示意圖