Re: [問題] Validation set 到底在做什麼?

看板DataScience作者 (如果狗狗飛上天)時間6年前 (2018/03/27 00:56), 6年前編輯推噓23(331044)
留言87則, 37人參與, 6年前最新討論串2/8 (看更多)
既然都講了,乾脆好人做到底,把cross validation(cv)也講完好了.很多人都知道cv 怎麼操作,但是我相信很少人真的明白做cv的意義.以及什麼情況下我們很要求做cv. 這是很正常的,因為你去看很多教科書,他們就從沒講好cv的意義過. 以下我談談我對 cv的見解. 歡迎各位補充分享自己的看法. cv是個大故事,你得從為什麼要做特徵工程講起. 1. 數據的線性空間 data science裡面,最核心的觀念之一,就是資料空間. 想像一下我們有10K筆資料, 然後N個feature. 所以這10K的資料就會散布在這個N維的線性(線性是一個假設,方 便我們對數據進行理解跟操作)空間裡面.每一個feature就代表一個維度. 好了,那讓我們先考慮維度問題. 如果我有10K筆資料.我透過rescale把每個Feature 都歸一化到0~10之間(通常是0~1,但我為了舉例,先假設我歸一化到0~10). 好了,那 讓我們看看特徵的增減會發生什麼事情. 假如每筆資料只有2個feature,而每個feature又都歸一到0~10之間,這意味著平均 每1^2的超空間裡有10K/(10)^2=100筆資料. 滿不錯的,很夠了. 但如果我有10個feature呢? 這意味著每1^10的超空間裡,只有10K/(10^10)=10^-6 筆資料! 天啊~10個feature,這不算多吧? 但是平均下來資料竟變得如此稀疏. 這表示,當你的feature一多起來,你將建構出一個非常高維的線性空間,而維度越高, 數據就越稀疏,每筆數據之間在空間中的距離就會成指數型式越拉越遠. 如同我們 的宇宙一般,數據變成非常離散,彼此之間間隔非常非常遙遠,當維度趨近無窮大, 任何一筆資料的距離將變成無窮遠. 這同時也表示,當你對資料做採樣,你非常有可能採樣出不具代表性的樣本出來, 因為空間中的樣本非常稀疏,你一但少採樣到幾個,很可能空間中就有一塊很巨大 的區域沒有被你適當的採樣到! 你採樣出來的東西就會有高度偏差. 所以越高維的資料,要做出正確的採樣越困難! 你訓練出來的模型越可能 泛化能力很差,因為你的train跟validation很可能採樣到了數據中的不同空間, 導致validation裡面一些數據空間在train中根本沒出現過,所以明明train表現 的不錯,但是一到了validation就不行.這就稱作過擬合. 這種維度造成的採樣不均現象這叫做維度災難! 2. 怎麼解決維度災難? 維度災難的核心問題在於,你會無法適當採樣(i.e.難以分割train跟validatio) . 所以解決維度災難,本質上就是要設法改善數據結構,讓你可以做出適當採樣. 要做到這點,你必須要完成兩件事情. 第一,你要盡可能的刪去不需要的,多餘的維 度. 至於該怎麼做,這就是"特徵工程"的核心問題.這幾天幾夜都說不完,就不提了. 第二,你要盡可能讓你的數據分布的均勻. 如果你的數據是這邊一坨,那邊一坨, 你一但把資料分割成train跟valdation,你非常有可能割出不具代表性的資料集. 但如果你的數據本來就已經分布很均勻了,那你越不容易產生採樣上的偏差. 面對相對均勻的數據,我們常用的作法就是歸一,把所有的特徵的數值都取在[0,1], 這樣數據的scale差距就不會太大,所有數據均勻的分佈在[0,1]的高維空間中,容 易正確採樣. 但如果你的數據分布就是很不均勻,這邊一坨那邊一坨,這時候我們會試著把數據 歸一成標準常態分佈(均值=0,標準差=1),這會讓原本離很遠的兩坨變得靠近一些. 總之,各種特徵工程裡的奇淫巧技,為的就是想讓數據分布的越均勻越好. 好的分布是你能夠正確分割train與validation的前提. 3. 為什麼需要cross validation? 前面都講了,越高維的時候,適當的分割數據將會越困難. 而之前的文章我又談到 ,模型的好壞本質上就是由兩個資料集決定的: train, validation,前者決定 淺在參數,後者決定超參數. 所以一但這兩個資料集在分割的時候產生了偏差,不 具代表性,那我的一切都只是在做白工. 而且越是高維度的資料,我們越難適當的 分割出具代表性的資料. 你的一切訓練都只是一場幻覺,所有美好的loss都只是 自己騙自己的假象,因為你的train跟validation一開始就形同垃圾! 但怎麼辦? 我們不是上帝,無法以N+1維的角度審視我們的資料啊,難道只能認了? 但凡人畢竟有凡人的做法,是的,我們沒有上帝視角,但我們盡可能對數據做不同 的採樣,這總可以吧? 這就是cross validation的由來. 我們把數據分割成三等分,每次取一份出來做validation,另外兩份作trian 來生成模型,這樣每一次我就會生成三個模型,給出三個performance,然後我拿 三個performance來取平均作為總的performance,以衡量我模型的好壞. 用平均表現去取代單次表現,抹平了因偏差而造成的極端情形. 這樣是不是就盡可能的避免了我在切割train與validation時偏差的問題? ================================================================ 結論: 洋洋灑灑寫了一堆,我想講的觀念只有一個 => 在高維空間中正確的分割train與validation是極其困難的! 這是機器學習成功的最關鍵前提,很多人也不覺得這步有啥特別,隨便切個7:3 就是了.殊不知這一步乃是機器學習的最核心,它超越了一切算法與架構.與高手 過招,其實早在這一步就已經決定往後的命運了. 算法問題,坦白說,老狗變不出新把戲,你會玩的模型書上都教了,誰不會? 但是建構好的特徵來正確的分割具有代表性的資料集,那可就是拚經驗,拚功力, 各種奇淫巧技,各門各派,各有巧思.面對怎樣的數據該怎麼做,靠的都是老司機 引路,從沒有GPS可以看,在教科書上也絕對找不到完整的論述. 所以先忘了那些高深的算法吧,蹲好馬步,從洗資料,篩特徵開始打好基礎.特徵 工程看似不痛不癢,實乃重中之重. 其核心思想,就是想方設法讓數據盡可能分布的均勻,盡可能做到讓我們隨機分 割數據集也不致過度偏差.但這畢竟是不夠的,我們沒有上帝視角,永遠不曉得我 們分割得好不好. 所以只能引進cross validation,透過平均表現來抹去因偏 差而造成的極端表現,訓練出真正具有泛化能力的模型. 不曉得這樣講完後,有沒有對cross validation更了解一點? -- ★人生中最溫暖的夏天是在紐約的冬天 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.66.168.95 ※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1522083370.A.C1F.html ※ 編輯: pipidog (73.66.168.95), 03/27/2018 01:03:54

03/27 01:18, 6年前 , 1F
清楚明瞭 優質文給推
03/27 01:18, 1F

03/27 01:21, 6年前 , 2F
推~
03/27 01:21, 2F

03/27 02:10, 6年前 , 3F
推 奇淫巧技
03/27 02:10, 3F

03/27 02:35, 6年前 , 4F
這篇厲害
03/27 02:35, 4F

03/27 02:54, 6年前 , 5F
必須推
03/27 02:54, 5F

03/27 03:07, 6年前 , 6F
BTW,文中說的cv分三份只是舉例,實際上可能更多份,依數
03/27 03:07, 6F

03/27 03:07, 6年前 , 7F
據大小而定。盡可能做到每份validation不失代表性
03/27 03:07, 7F

03/27 03:11, 6年前 , 8F
教科書的範例,你隨便切都不會出大問題,但現實中差得遠了
03/27 03:11, 8F

03/27 03:45, 6年前 , 9F
老司機推 奇淫巧技也推
03/27 03:45, 9F

03/27 07:49, 6年前 , 10F
清楚明瞭!
03/27 07:49, 10F

03/27 08:14, 6年前 , 11F
有招stratified cv,每次取validate set之前資料都會shuffle
03/27 08:14, 11F

03/27 08:16, 6年前 , 12F
隨機性更高
03/27 08:16, 12F

03/27 08:46, 6年前 , 13F
03/27 08:46, 13F

03/27 09:25, 6年前 , 14F
"每1^2的超空間裡有10K/(10)^2" <- "每10^2的" 有漏字?
03/27 09:25, 14F

03/27 09:26, 6年前 , 15F
推說的淺顯易懂
03/27 09:26, 15F

03/27 09:38, 6年前 , 16F
推! 這有沒有精華區可以放進去啊
03/27 09:38, 16F

03/27 09:40, 6年前 , 17F
推一下
03/27 09:40, 17F

03/27 09:54, 6年前 , 18F
還有一種Monte-Carlo Cross Validation 隨機選取樣本
03/27 09:54, 18F

03/27 09:54, 6年前 , 19F
來做validation
03/27 09:54, 19F

03/27 10:04, 6年前 , 20F
推推
03/27 10:04, 20F

03/27 10:55, 6年前 , 21F
第三點後面是在講 K-fold ? 這招也不錯
03/27 10:55, 21F

03/27 10:55, 6年前 , 22F
只是在 train 時, 就是以時間去換準確率
03/27 10:55, 22F

03/27 10:57, 6年前 , 23F
特徵工程真的是重中之重, model 大家都會用
03/27 10:57, 23F

03/27 10:57, 6年前 , 24F
16樓~我回家後會收入精華問題與討論中
03/27 10:57, 24F

03/27 11:30, 6年前 , 25F
推 可惜 有錯字
03/27 11:30, 25F

03/27 11:44, 6年前 , 26F
03/27 11:44, 26F

03/27 17:10, 6年前 , 27F
推,謝謝分享
03/27 17:10, 27F

03/27 18:20, 6年前 , 28F
推說明清楚
03/27 18:20, 28F

03/27 20:32, 6年前 , 29F
FE不管在比賽還是現實都是關鍵,每個人幾乎都是把時間
03/27 20:32, 29F

03/27 20:32, 6年前 , 30F
花在這
03/27 20:32, 30F

03/27 20:49, 6年前 , 31F
有間公司的產品主打省掉80%FE的時間,加速顧客的分析
03/27 20:49, 31F

03/27 22:54, 6年前 , 32F
Push
03/27 22:54, 32F

03/27 23:38, 6年前 , 33F
謝謝分享,越看越是喜歡這個領域
03/27 23:38, 33F

03/28 00:01, 6年前 , 34F
感謝用心分享
03/28 00:01, 34F

03/28 02:12, 6年前 , 35F
上面一堆推是ﴠ這整個是錯的 去看一下田神的課好嗎
03/28 02:12, 35F

03/28 02:19, 6年前 , 36F
樓上,你若要求有意義的討論,最好就是回這篇文把你不同意
03/28 02:19, 36F

03/28 02:19, 6年前 , 37F
的地方拿出來討論,而不是這種上對下叫別人去看什麼的態度
03/28 02:19, 37F

03/28 02:24, 6年前 , 38F
沒錯 請樓樓上回文 討論這篇哪裡講錯 指導一下
03/28 02:24, 38F

03/28 02:53, 6年前 , 39F
大大指正後才跳出來馬後炮開噓,不知道這心態是如何。
03/28 02:53, 39F

03/28 03:13, 6年前 , 40F
嚴格來說就是誤導啊 以後的人如果看到一堆推就以為是
03/28 03:13, 40F

03/28 03:13, 6年前 , 41F
正解不就GG?
03/28 03:13, 41F

03/28 04:17, 6年前 , 42F
講錯就是誤導,那我這輩子遇過的教授嚴格來說都在誤導學生
03/28 04:17, 42F

03/28 04:17, 6年前 , 43F
學問這東西就是要討論,不喜歡就把你觀點/文獻拿出來戰
03/28 04:17, 43F

03/28 04:17, 6年前 , 44F
不然嚴格來說也只是鍵盤噓文家
03/28 04:17, 44F

03/28 10:33, 6年前 , 45F
原po開頭就說是自己的見解了,只是因為他對cv存在的理由
03/28 10:33, 45F

03/28 10:33, 6年前 , 46F
解讀跟田神不同就噓的人,根本連自己的想法也沒有 幫補
03/28 10:33, 46F

03/28 10:33, 6年前 , 47F
03/28 10:33, 47F

03/28 12:22, 6年前 , 48F
有些觀念根本似是而非
03/28 12:22, 48F

03/28 13:37, 6年前 , 49F
笑死神邏輯 所以你覺得你教授都誤導就代表誤導是正確
03/28 13:37, 49F

03/28 13:37, 6年前 , 50F
的?
03/28 13:37, 50F

03/28 13:38, 6年前 , 51F
也許上ml之前要先修個邏輯課程的prerequisite 加油
03/28 13:38, 51F

03/28 13:41, 6年前 , 52F
討論就一定要推嗎 你去panel誰跟你好聲好氣討論 呵呵
03/28 13:41, 52F

03/28 14:29, 6年前 , 53F
原po要不要重學一下機率與統計
03/28 14:29, 53F

03/28 15:51, 6年前 , 54F
你要是覺得哪裡錯 就指出哪裡錯 我的確不完全贊成這篇文
03/28 15:51, 54F

03/28 15:53, 6年前 , 55F
不過應該比較在於說觀察角度上的不同 如果你認為哪裡有
03/28 15:53, 55F

03/28 15:54, 6年前 , 56F
不好 指出來 拿出reference 這樣才是一個大家都會受益的
03/28 15:54, 56F

03/28 15:54, 6年前 , 57F
討論
03/28 15:54, 57F

03/28 17:00, 6年前 , 58F
我問一個問題就好,如果cv是為了解決curse of dimensi
03/28 17:00, 58F

03/28 17:00, 6年前 , 59F
onality ,那在低維度的時候為什麼要用cv?
03/28 17:00, 59F

03/28 17:01, 6年前 , 60F
這種東西不是什麼新科技 網路上一大堆 請學會Google
03/28 17:01, 60F

03/28 17:10, 6年前 , 61F
kris大 真的不用這麼生氣 想想田神的心平氣和
03/28 17:10, 61F

03/28 17:13, 6年前 , 62F
cv就是一種行為 一個algorithm 能有不同的用法
03/28 17:13, 62F

03/28 17:15, 6年前 , 63F
我自己認為討論一開始發明是為了什麼 討論來源
03/28 17:15, 63F

03/28 17:16, 6年前 , 64F
是歷史學家的工作 電腦科學家數學家則是討論algorithm
03/28 17:16, 64F

03/28 17:17, 6年前 , 65F
的性質和應用
03/28 17:17, 65F

03/28 17:19, 6年前 , 66F
你可以來討論一下 原文這樣處理維度問題會導致什麼問
03/28 17:19, 66F

03/28 17:23, 6年前 , 67F
題. Rosenblatt (1958) 第一次談到了神經網路的數學
03/28 17:23, 67F

03/28 17:25, 6年前 , 68F
性質. 1958年 誰也不知道 現在DL會變這樣
03/28 17:25, 68F

03/28 17:32, 6年前 , 69F
...
03/28 17:32, 69F

03/28 18:58, 6年前 , 70F
zzzzzz
03/28 18:58, 70F

03/28 19:41, 6年前 , 71F
啥?這是風氣問題,你要好好討論還是指著錯咬到死
03/28 19:41, 71F

03/28 19:41, 6年前 , 72F
這版剛建不久,風氣好不好影響後面來的人願不願意po文討論
03/28 19:41, 72F

03/28 19:41, 6年前 , 73F
建議去好一點的panel體驗一下,質疑可以很直接,但不需要嗆
03/28 19:41, 73F

03/28 19:44, 6年前 , 74F
然後回一個小事,我的邏輯是你"講錯就是誤導"是不對的,
03/28 19:44, 74F

03/28 19:44, 6年前 , 75F
我就不清楚你怎麼推到誤導是正確的了
03/28 19:44, 75F

03/29 03:09, 6年前 , 76F
我不覺得k大有咬著什麼啊XD 護航的很好笑就是了
03/29 03:09, 76F

03/29 05:34, 6年前 , 77F
就當不當的比喻吧,樓上這樣一分我多說什麼都是護航了
03/29 05:34, 77F

03/29 05:34, 6年前 , 78F
想說的是,這些沒有貢獻討論內容的噓文對群組沒益處
03/29 05:34, 78F

03/29 06:31, 6年前 , 79F
我又來護航了 希望你笑的開心
03/29 06:31, 79F

03/29 09:02, 6年前 , 80F
講錯不是誤導,對於錯的東西集體推正確也不算誤導
03/29 09:02, 80F

03/29 09:05, 6年前 , 81F
貢獻噓文不會沒意義阿,尤其在一面倒的推文中
03/29 09:05, 81F

03/29 09:06, 6年前 , 82F
至少提醒了你有人有不同觀點
03/29 09:06, 82F

03/29 12:50, 6年前 , 83F
推pipidog
03/29 12:50, 83F

03/31 00:49, 6年前 , 84F
新手推,希望前面幾樓也可以分享一下觀點賜教一下,
03/31 00:49, 84F

03/31 00:49, 6年前 , 85F
感恩
03/31 00:49, 85F

04/02 01:16, 6年前 , 86F
推推 U值好文
04/02 01:16, 86F

10/13 07:38, 6年前 , 87F
推推
10/13 07:38, 87F
文章代碼(AID): #1QkIOgmV (DataScience)
文章代碼(AID): #1QkIOgmV (DataScience)