1. 前言
模型的評估方法主要是針對有監督學習的。
2. 數據集划分方法
我們在拿到數據的時候,數據的表現形式會呈現多種多樣性,我們首先需要做的是把數據格式化,把數據處理成計算機可以認識的結構。處理數據的過程叫做特征工程,特征工程是一個在機器學習的過程中,非常重要的一個過程,特征工程做的好壞,會直接影響到最后的模型准確度的一個上限。特征工程我后面會詳細介紹,今天介紹的是在特征工程處理完后的,數據集的划分和性能的度量方式。
2.1 留出法
留出法就是把數據集切分成訓練集和測試集,留出法最重要的一點是要保證訓練集和測試集的數據分布要相同,避免因為數據划分不均勻而引入的額外的偏差。從樣本采樣的角度來看待數據集的划分過程,則保留類別比例的采樣方式叫做“分層采樣”。為了讓留出法能夠有比較好的效果一般會重復多次進行平均。
2.2 交叉驗證
交叉驗證一般是在訓練集的基礎上進行的。因為測試集是最后用來評價模型的好壞的,不能讓模型提前看到測試集。
交叉驗證有一個超參數K。K代表的意思是從訓練集D中,分層采樣的方式得到K個互斥的\(D_i\)(K折交叉驗證)。然后通過K-1個子數據集的並集進行訓練,用剩下的一個子數據集進行驗證。就可以得到K個模型,最后返回K個模型的平均值。
過程如下圖所示:
交叉驗證中有一個特殊的方法交“留一法”,它的意思是如果訓練集中有m個數據,那我就進行“m折交叉驗證”,每次用一個數據進行驗證,這樣最大的好處是避免了隨機樣本划分來帶的影響。留一法的結果往往認為是准確的。但是留一法也是計算開銷最大的一種方式,一般只會在學術論文中為了追求最好的效果才可能去嘗試的辦法。
2.3 自助法
我們希望評估的是用整個訓練集D訓練出來的模型,但是無論是留一法還是交叉驗證法,都會切分一部分數據為測試數據,這必然會引入一定的誤差。
自助法直接以自助采樣(bootstrap sample)為基礎。自助采樣是每次在數據集D中隨機采樣產生子數據集D1,然后放回,這個過程重復進行m次采樣,獲得m個子數據集D1,再對m個子數據集進行訓練,獲得一個平均的模型。
自助法會有一部分數據一直沒有被訓練到。這部分數據稱為“包外估計”簡稱OOB,這部分數據量約為36.8%。自助法現在一般運用在隨機森林(Random Forest)里面比較多。
3. 性能度量
性能度量是用來衡量模型泛化能力的評價標准。
性能度量可以用來在對同一個問題,評價不同模型的泛化能力的好壞,也可以針對同一個模型的泛化能力是否有所提升。
假定在預測任務中,給定的樣本集\(D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}\),其中\(y_i\)是\(x_i\)的標記,\(f(x)\)是模型對x的預測值。
3.1 回歸任務
回歸任務中,常用的是均方誤差
更一般的情況,對於數據分布D和概率密度P,均方誤差可以改寫為
3.2 分類任務
3.2.1 准確度
在分類任務中,如果類別的個數是平衡,那么最普遍的一個度量性能的方法是准確度,准確度代表的意思是,預測類別和真實類別進行比較,統計分對的類別的比例。
更一般的情況,對於數據分布D和概率密度P,准確度可以改寫為
3.2.2 精准率、召回率、F1
在分類任務中,有一類比較常見的問題,就是數據不平衡的問題。比如癌症預測,針對癌症預測這個問題,本身癌症的發病數相對身體正常的數要低很多。
假設我們的數據是10000個樣本,里面有9990個正常值,10個是癌症患者(0代表正常,1代表癌症患者)。如果我們什么都不做的情況下,預測所有人都是0,那正確率是99.9%,感覺是不是准確度已經很高啦,模型已經很不錯了?但是這個模型真的有用嗎,其實真正的情況是,我們一個癌症患者都沒預測出來。所以在這種情況下,用准確度來度量模型的好壞是不對的。我們需要用另外的一種性能度量方式,精准率,召回率和F1值。精准率又叫做查准率,召回率又叫做查全率。