求大神通俗易懂的解釋下交叉驗證cross-validation?
多謝!
你只有A、B、C三條數據,交叉驗證:
1. A、B作訓練集,C作測試集;
2. A、C作訓練集,B作測試集;
3. B、C作訓練集,A作測試集;然後三組測試結果取平均。作者:許鐵-巡洋艦科技
鏈接:知乎專欄
來源:知乎著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。稍微了解一點機器學習的都會知道cross-validation,作為一個驗證演算法是否靠譜(具有可推廣到新數據的能力)的主要方法。然而,魔鬼往往藏在細節中,這篇文章調查了之前學者做的cross validation 是那個版本的,為後來的研究者指出了一些方法論上需要注意的地方。BioRivx是生物界的論文預印本網站,目前生物界的還沒有把文章放到preprint上的習慣,不過很多和計算相關的文章,都可以在這裡找到。這篇文章的標題是「Voodoo Machine Learning for Clinical Predictions」。Voodoo 就是巫毒教的意思,這個題目夠逗吧。
開篇介紹背景,智能手機和可穿戴設備的普及使得研究者積累了人類行為的大量數據,從而使得使用機器學習的方法來預測精神類疾病成為了可能。當越來越多的演算法被使用,如何量化的評估這些方法的好壞變成了一個重要的問題。
接著作者介紹了這篇文章的核心概念,record-wise vs subject-wise cross-validation,作者發現record-wise cross-validation often massively overestimates the prediction accuracy of the algorithms,同時this erroneous method is used by almost half of the retrieved studies that used accelerometers, wearable sensors, or smart phones to predict clinical outcomes. 因此,為了讓之後的研究成果更加靠譜,作者提倡我們都要用正確的交叉驗證方法。
這幅圖看懂了就明白了這兩種方法的區別了,subject wise的不會讓test集合中的數據進入訓練集,而record wise則會對於每一個data,使用其他所有的數據作為訓練集。The problem is, that if the algorithm can (implicitly) detect the identity of the person based on the features, it can automatically also 「diagnose」 the disease.這句說的是如果演算法能夠看出test set是對應的哪一個樣本,那麼其就可以判斷出這個樣本是否患病。接下來舉一個簡單的例子。Imagine we recruit 4 subjects, 2 healthy and 2 affected by Parkinson』s disease (PD). We have a machine learning algorithm that estimates if a person has PD based on their walking speed. Let our two healthy subjects have constant walking speeds of 1 meter per second (m/s) and 0.4 m/s, and our two PD patients 0.6 m/s and 0.2 m/s. If we do subject-wise CV, we will be unable to predict the performance of the slow healthy subject as well as the fast PD subject, resulting in a prediction accuracy of roughly 50%.
然而如果是Leave-One-Subject-Out的方式,那麼這個問題就簡化了,在這種情況下,演算法給出的預測準確度會是100%,然而這樣的結果是不能泛化的。
接著看看作者做到對已有文獻的調查分析時用的流程圖吧
那這些文章的結論質量如何了,下圖給出了總結,左邊的是不同類項文章的預測錯誤的箱圖,右側是這些文章的引用次數。我們可以看出,使用了subject wise的文章預測錯誤率更高。
說了這麼多,用作者的句子總結一下這篇小文。The use of machine learning for clinical predictions is growing in popularity. Yet, such erroneously positive results threaten the progress in the field. Such results might contribute to the problem of irreproducibility of research findings and thereby undermine the trust in both medicine and data science. Only with meaningful validation procedures can the transition into machine learning driven, data-rich medicine succeed.
- 在保留交叉驗證(hand-out cross validation)中,隨機將訓練樣本集分成訓練集(training set)和交叉驗證集(cross validation set),比如分別佔70%,30%。然後使用模型在訓練集上學習得到假設。最後使用交叉驗證集對假設進行驗證,看預測的是否準確,選擇具有誤差小的模型。
- k折交叉驗證(K-fold cross validation),就是把樣本集S分成k份,分別使用其中的(k-1)份作為訓練集,剩下的1份作為交叉驗證集,最後取最後的平均誤差,來評估這個模型。
- 留一法(leave one out, LOO)就是m-fold cross validation,m是樣本集的大小,就是只留下一個樣本來驗證模型的準確性。
你有5個數據點,用其中4個train你的模型,然後用最後一個數據點測試。你的模型可能給出正確的結果,也可能給出錯誤的結果。
重複上述過程5次,毎次用不同的數據點做測試。最後你的模型有4次正確1次錯誤。你得出結論。用4個點train你的模型,得到的結果有80%的成功率。
最後你用5個點train你的模型,它的成功率應該略好於80%。這個最後的估計就是你做cross validation的目的。
以上是所謂的leave one out. 如果你有更多的數據你可以分成若干份,每次用一份做測試。首先,交叉驗證是用來估計預測誤差的,從而進行模型選擇,這一點與AIC、BIC本質沒有區別。但是AIC、BIC等準則是從統計理論中推導出來的,而交叉驗證是完完全全基於給定的樣本。
假設有n個觀測值,我們將其均分為K組。用其中K-1組來訓練模型,然後用訓練得到的模型對剩下的一組進行預測,並在該組上計算預測誤差。因為從K組中選擇K-1組有K種選擇,也可以理解為這K個組都有可能成為剩下的那一個預測組。所以便會計算K次的預測誤差,對這K次的預測誤差平均便得到一個交叉驗證誤差。以上過程便稱為K-fold交叉驗證。
在模型選擇時,假設模型序列有個tuning parameter,不同的tuning parameter便確定一個模型,計算其交叉驗證誤差,最後選擇使得交叉驗證誤差最小的那一個tuning parameter。這便是模型選擇過程。
推薦閱讀:
※IBM 是如何訓練「沃森」人工智慧平台的?
※家庭智能機器人現在已經萬事俱備只欠喬布斯了,對嗎?
※微軟的 HoloLens 會不會有全息投影 Cortana 的功能?