0:00
好,那我們再來看,第三個錦囊妙計是什麼 第三個錦囊妙計之前,我們要先回到我們之前講
的說今天你偷看資料的危險 好,什麼意思,你用眼睛偷看資料,到底發生什麼危險呢,你說我看了看這個資料
這個二維的資料,我說,好像它是二維的,所以我用一個這個
二次方的多項式的轉換,那可是你既然偷看了資料,你那麼聰明,就你可能會用更複雜的轉換
進去,好,例如說不是這個單純的二次多項式的轉換,你乾脆就把最後的hypothesi- s你自己用人腦學起來
好,就放進去,好,這是很危險的事情所以我們之前已經再三的跟大家講說,你用肉眼
偷看資料,你的腦袋裡的VC Dimension會進去,這是很危險的事情
好,所以我們之前跟大家講的一個觀念是,你不要用你的眼睛偷看資料,因為
你用眼睛偷看資料的話,我們導的這些VC等等就一點也不安全 了好,snooping就是偷看,就是跟大家說你不要偷看資料
那偷看資料這件事情,其實發生的比大家 想像的搞不好還要多,不是只有用眼睛看看圖這種偷看資料而已
什麼意思呢,今天你在使用一串資料的任何一個過程
都是間接的讓你偷看到資料,你偷看到資料的表現
你看到資料的表現以後,你在下決策去做任何的一件事你都要想到這個
資料已經因為你的這個決策的過程,決策就是選擇,對不對,選擇的過程
而多出了很多的model complexity的污染,你的腦袋裡做任何決策,這些model
complexity都 可能會進去這個過程裡面,好今天想像我們有
個8年的某個這個貨幣的匯率交易資料 好,有了這些資料之後,我們想要拿這些資料交易看看
我們能不能導出一些規則來預測這些貨幣的這個走勢
好,那我們就這樣做,我們想說,我們拿前面6年來做訓練的工作,後面2年來做測試的工作
這是個誠實的環境,然後說我們拿前面6年來去學一些
規則,說我們能不能從前幾天的匯率走勢然後預測今天的匯率走勢 那我們把這樣的趨勢再用在後面的2年裡面
好,就這麼簡單,然後你說但是我們要怎麼把它變成這個有用的資料呢,好,你可以說今天我的
輸入就是前20天,輸出就是今天的匯率會是多少
這是一個簡單的我們變成可以用regression來解決問題的方式
好,那但是呢,我們就要看看說今天 這裡有兩條曲線,好,我解釋一下這兩條曲線是什麼意思
一條曲線是這樣,我們今天有6年的訓練資料,2年的測試資料,我們就拿這6年的訓練資料- 來,然後因為
我們要做回歸分析,回歸分析有時候資料變動的範圍太大,不太好做,我們就說,欸,那我- 們做一個
這個單位的所謂的放縮的動作,例如說,我們不要用這個
0塊錢到100塊錢,我們把它放縮,到0到1之間把它通通除以100
好,所以我們做什麼事,我們說,我們拿前6年的資料來,然後算前6年的資料一些統計特性- ,然後來
決定我們要怎麼樣來做這個放縮的動作,當然做完放縮的動作之後,最後做完預測,我們- 就再把它
縮放回去就好了。好那所以這是拿前6年的資料 來做統計然後決定要怎麼縮放,但是另外一個人呢,他說很偷懶
就是說,我要拿這個前6年的,然後前6年然後預測完以後我要弄到後2年
我還要再放縮回去等等,我不如這樣,既然所有8年資料都在我手上
我就拿整個8年的資料來做放縮的動作,放縮的動作以後,做了預測,做了預測,我就
可以直接的看看說我預測的表現怎麼樣,所以紅色的這條線是拿了8年的資料
好來算統計的特性,我們就看看發生什麼事 這等於是什麼,等於是你把考卷,考卷就是後
面兩年那個東西,偷偷的拿進來然後呢欸這個混在一起
所以你在放縮的過程中,你的機器知道了什麼,你的機器知道例如說
最大值最小值,例如說知道某些統計的變量例如說平均數或標準差有沒有什麼變化
你多了2年的資訊,所以這2年的資訊並不是直接的
影響到你學出什麼hypothesis,但是它影響到你做了什麼
放縮的動作,然後怎麼樣呢,你多了這2年的資料 哎呀,如虎添翼啊,什麼意思,我們這邊是投資報酬率
如果拿你的預測然後去真的做投資的話,投資報酬率 紅色那條線看起來好的不得了,投資報酬率非常的高
藍色的那條線呢,這個投資報酬率並沒有很高,甚至是有點虧錢的
但是紅色那條線可不可行,我現在跟你說,來,我現在有一個系統,這系統做的很好
你先收集完未來兩年的匯率,然後我跟你說,你過來我這個系統我可以把未來兩年的匯率做得
很好,沒有用嘛,對不對,因為未來兩年是一個你不能偷看的東西,
即時只是間接的偷看,也不行,好所以這個圖告訴我們
你今天如果偷看了,即時是很簡單的偷看 就是說,我今天做放縮的時候把所有資料考慮進來
跟你真的很誠實完全不偷看,比起來,你今天偷看的還是會
有利很多,那你應不應該偷看,你不應該偷看啊,因為這是個自欺欺人的做法
好所以我們已給大家看兩個,你用肉眼偷看 不行,你間接的用統計的數據偷看,這也是不行
好,還有其他的偷看的例子,例如說什麼,例如說我們現在講到做研究
做研究裡面,大家也都間接的偷看,什麼意思呢,我們來看看 做研究的時候,我們常常有所謂的 benchmark
data,就是大家都在用的資料 好,第一篇用這個資料的論文,他說好他看到這個
資料,他說用第一個 model,好像可以做得很好
第二篇的人呢,就看到說這個 model 說他做得很好,我來做一些改進好了
於是,他就說,那麼我看看第二個 model
H2,到底可不可以做得很好 如果他做得很好的話,那發了,我們可以怎麼樣,寫論文
趕快發表啊,對不對,做得比先前好,這太高興了,寫論文趕快把它發表
然後呢,如果他不好呢,搞不好我們就不發表了,或者是我們趕快再看有沒有更好的模型
好,然後呢,論文3,一樣,如果發現比H2更好 他才要做發表的動作,如果沒有比H2更好,他趕快找一個比H2更好的
所以這一個過程中,用用用 這些模型用久了,你到後面幾篇論文的話,相當於什麼
你如果看成這所有的論文是一篇大大的論文的話,這一篇大大的論文裡面試過多少模型
它試過H1,H2,H3,H4 通通都試過
所以要付出什麼,付出 generalization 的代價是說你的 VC Dimension
是這些模型通通加起來 你說沒有啊,我很誠實,我自己的論文我很誠實,可是你已經受到你站在所有前人的肩膀上
面的影響,然後所以,越 晚的論文,你受到這些污染的影響越嚴重
你的snooping你的偷看發生在哪裡,你偷看前面人的論文,間接偷看到這個資料
用什麼樣的方法會表現好,我們這邊都還不算什麼,都還不算那些試一試,發現表現不好然- 後丟掉的
那些模型,光看那些成功的模型,我們就發現我們為了這個偷看,可能要付出很大的代價
好,所以今天,這件事情這個很糟糕啊,今天如果一個資料出來,好
過了10年,有一千篇的論文,都在這個資料上做研究,最後可能會污染的一塌糊塗
最後大家都說自己比較好,可這真的比較好嘛,還是你只是某一種形式間接的 overfit,或有
bad generalization 發生。所以在我們這一行裡面常常有句話 “ If you
torture the data long enough,it will confess ”
這句話原句是如果你拷問一個犯人夠久,他就會招供 現在呢,你拷問資料夠久,它就會招供,招供給你什麼,給你一個很好的hypothesi-
s,那這個hypothesis是不是真的好 沒有啊,它只是招供,在它身上真的好,但是真正用來做測試時候會不會好
不知道,所以在實務上,這可能 可能是我們要交給它,這重要的錦囊妙計之一,你要審慎的處理
偷看這件事,審慎處理你可能偷看到資料這件事 但是我要告訴大家,很誠實的說,這非常難避免
你說要完全不偷看我很誠實一個考試的環境,那機器學習演算可能也不會 表現的好,所以能夠盡可能做的是什麼
好,你要嘛就是做真的很誠實,資料拿來一開始,就把你的測試資料鎖在櫃子裡面
永遠都不用它,到什麼時候,到你有朝一日真的要測試的時候,再打開來用它
或者呢,一個折中,我們常做的方式,通常是你今天,ok 做
validation ,對於我們之前說過 validaion 我們手中的資料我們拿來
類似測試的用途,但是我們通常重複使用,像我們再選擇模型 model
selection,我們就重複使用,好,重複使用,但是你要用的很小心 你不要讓你的
validation 資料用來選擇這個1000萬個模型,這樣也會有問題
然後呢,再來是什麼,再來是 你如果在實務上,你要做什麼決定的時候
儘量避免用資料來做決定 你說你要把你的專業知識放進去,你不要看完資料再放你的專業知識進去
你說我做語音的,我語音的有什麼專業知識,你一開始就想好,把它們變成featur- e放進去
但是你不要看了資料,然後說這個資料應該有什麼特性吧,然後我把這個feature放進去 你人腦裡面的那些複雜度就通通都進去了
所以不要看資料做決定之前,先儘量不要看資料 再來呢,你要時時刻刻存著懷疑
讀論文的時候存著懷疑,看研究結果的時候覺得懷疑,你今天自己做出什麼結果的時候覺得懷疑
你要有一個感覺說你的結果到底經過多少 要多少過程得到這些結果,然後它到底可能被污染的多嚴重
這真的是實務上,有的時候是經驗要慢慢磨出來的事情
那大家如果問我們在這幾年的KDDCups裡面臺大隊為什麼能夠表現的這麼好呢
大體上我可以跟大家總結一句,我們做事情就是非常小心的平衡兩件事情 一件事情我們叫
data-driving modeling ,用data來做model 這當然是好聽的說法,這其實就是snooping,只是偷看的小心一點而已
然後但是我們不是只有偷看而已,我們還是要平衡,做 validation
的動作,也就是 儘量不做snooping,而靠 validation
的結果來做合理的選擇 好,所以呢我們這邊再給大家一個練習說,今天到底下面的這幾個
詞,到底哪一項會讓我們測試的表現可能不太好,是 data snooping 還是 overfitting
還是 sampling bias 還是通通都是,好,那大家仔細
想一想之後,這是個簡單的題目,通通都是,我們希望大家在 這一次的課程裡面,真正學到說,這些是我們要
小心的事情,在實務上,做機器學習的時候,要小心的事情