關(guān)于機器學(xué)習(xí)你要了解的5件事
在任何快速發(fā)展的話題上,總是有一些新的東西可以學(xué)習(xí),機器學(xué)習(xí)也不例外。這篇文章將指出5件關(guān)于機器學(xué)習(xí)的事,5件你可能不知道的,可能沒有意識到,或是可能曾經(jīng)知道,現(xiàn)在被遺忘了。
請注意,這篇文章的標(biāo)題不是關(guān)于機器學(xué)習(xí)的"最重要的5件事情"或"前5件事";這只是"5件事"。它不具有權(quán)威性的,也并不是事無巨細的,僅僅是5件可能有用的東西的集合。
1.數(shù)據(jù)準(zhǔn)備是機器學(xué)習(xí)的80%,所以……
在機器學(xué)習(xí)任務(wù)中,數(shù)據(jù)準(zhǔn)備花費了很大一部分的時間;或者,至少花費了一個看似很大一部分的時間。許多人都是這樣認為的。
我們經(jīng)常討論執(zhí)行數(shù)據(jù)準(zhǔn)備時的細節(jié)以及其重要性的原因;但除了這些之外,我們還應(yīng)該關(guān)注到更多的東西。那就是為什么我們應(yīng)該關(guān)心數(shù)據(jù)準(zhǔn)備。我的意思不是僅僅為了得到一致性的數(shù)據(jù),但更像一個哲學(xué)性的謾罵,以便讓你明白為什么應(yīng)該接受數(shù)據(jù)準(zhǔn)備。做好數(shù)據(jù)準(zhǔn)備工作,做一個有數(shù)據(jù)準(zhǔn)備的人。
CRISP-DM模型中的數(shù)據(jù)準(zhǔn)備。
我可以想到的一些關(guān)于機器學(xué)習(xí)最好的建議就是,既然你注定要為一個大項目花非常多的時間準(zhǔn)備數(shù)據(jù),那么決心做一名最好的數(shù)據(jù)準(zhǔn)備的專業(yè)人士,是一個相當(dāng)好的目標(biāo)。因為它不僅僅只是費時費力的工作,數(shù)據(jù)準(zhǔn)備其實對對后續(xù)的步驟(無效數(shù)據(jù)的輸入、無效數(shù)據(jù)的輸出等)有很大的重要性,并且因為作為一個糟糕的數(shù)據(jù)準(zhǔn)備人員而產(chǎn)生壞名聲也不會是世界上最糟糕的事情。
所以,是的,雖然數(shù)據(jù)準(zhǔn)備可能需要一段時間來執(zhí)行和掌握,但這真的不是一件壞事。在數(shù)據(jù)準(zhǔn)備存在的必要性中有著很多機會,無論是對一名脫穎而出的專業(yè)人士,還是展現(xiàn)你工作能力很強的內(nèi)在價值。
2.性能基線的值
當(dāng)你用一個特定的算法模擬了一些數(shù)據(jù),并且花了很多時間來調(diào)整你的超參數(shù),執(zhí)行一些工程特點和/或著挑選;你很高興,因為你已經(jīng)鉆研出了如何訓(xùn)練準(zhǔn)確性,比方說,準(zhǔn)確性是75%。你對自己完成的工作十分滿意。
但是,你將你得到的結(jié)果與什么進行了比較?如果你沒有基線——一個比拇指規(guī)則都簡單的完整檢查來比較你的數(shù)據(jù)——然后你實際上并沒有把那些辛勤勞動的結(jié)果與任何東西進行比較。所以就有理由理所當(dāng)然的認為任何準(zhǔn)確性在沒有與其他數(shù)據(jù)比較時都是有價值的了么?顯然不是。
隨機猜測不是基線的最佳方案;相反,的確存在廣為接受的用于確定比較基準(zhǔn)精度的方法。例如,Scikit-learn在其DummyClassifier的分類中提供了一系列基線分類器:
- stratified 通過尊重訓(xùn)練集類分布來生成隨機預(yù)測。
- most_frequent總是預(yù)測訓(xùn)練集中最頻繁的標(biāo)簽。
- prior總是預(yù)測最大化優(yōu)先級的類(像most_frequent')和"predict_proba返回類的優(yōu)先級。
- uniform隨機生成預(yù)測。
- constant總是預(yù)測用戶提供的常量標(biāo)簽。
基線也不僅是分類器;例如,基線回歸任務(wù)中也存在統(tǒng)計方法。在探索性數(shù)據(jù)分析、數(shù)據(jù)準(zhǔn)備和預(yù)處理之后,建立基線是機器學(xué)習(xí)工作流程中的一個合乎邏輯的下一步。
3.驗證:不止于訓(xùn)練和測試
當(dāng)我們建立機器學(xué)習(xí)模型時,我們訓(xùn)練他們使用訓(xùn)練數(shù)據(jù)。當(dāng)我們測試結(jié)果模型時,我們使用測試數(shù)據(jù)。那么驗證是在哪里出現(xiàn)的呢?
fast.ai的Rachel Thomas最近寫了一篇關(guān)于如何以及為什么創(chuàng)建良好的驗證集的文章,并介紹了以下3類數(shù)據(jù):
- 用于訓(xùn)練給定模型的訓(xùn)練集
- 用于在模型之間進行選擇的驗證集
(例如,隨機森林和神經(jīng)網(wǎng)絡(luò)哪個更好地解決了您的問題?你想要一個有40棵或者50棵樹的隨機森林嗎?)
- 告訴您您的工作方式的測試集。如果你嘗試了很多不同的模型,你可能會得到一個很好的驗證集,但這只是偶然的,因為總有一個測試集不屬于這樣的情況。
因此,將數(shù)據(jù)隨機拆分為測試、訓(xùn)練和驗證集一定是個好主意嗎?事實證明,答案是否定的。雷切爾在時間序列數(shù)據(jù)的文中解答了此問題:Kaggle目前正努力解決預(yù)測厄瓜多爾雜貨店銷售量的預(yù)測問題。Kaggle的"訓(xùn)練數(shù)據(jù)"從2013年1月1日運行到2017年8月15日,測試數(shù)據(jù)跨越了2017年8月16日到2017年8月31日。使用2017年8月1日到8月15日作為您的驗證集不失為一種好的方法,并且所有早期的數(shù)據(jù)也可以作為您的訓(xùn)練集。
這篇文章的其余部分將涉及到分裂到Kaggle競爭數(shù)據(jù)的數(shù)據(jù)集,這是十分實用的;并且我將會把交叉驗證納入討論,讀者可以按照我的方法自行探究。
其他許多時候,數(shù)據(jù)的隨機分割會是有用的;它取決于進一步的因素,如當(dāng)你得到數(shù)據(jù)時數(shù)據(jù)的狀態(tài),(它是否已被分為訓(xùn)練/測試數(shù)據(jù)?),以及它是什么類型的數(shù)據(jù)(見上面的時間序列分類)。
對于什么條件下隨機拆分是可行的,Scikit可能沒有train_validate_test_split的方法,但您可以利用標(biāo)準(zhǔn)的Python庫來創(chuàng)建您自己的方法。
4.集成方法可比樹還要多
選擇算法對于機器學(xué)習(xí)新手來說可能是一個挑戰(zhàn)。在構(gòu)建分類器時,特別是對于初學(xué)者來說,通常采用一種方法來解決單個算法的單實例問題。然而,在給定的情況下,把分類器串聯(lián)或是組合起來會更加有效;這種方式使用了投票、加權(quán)、和組合的技術(shù),以追求最準(zhǔn)確的分類器。集成學(xué)習(xí)就是用多種方式來提供此功能的分類器。
隨機森林是集合學(xué)習(xí)者的一個非常重要的例子,它在一個預(yù)測模型中使用許多個決策樹。隨機森林已成功地應(yīng)用于各種問題,并據(jù)此取得了很好的效果。但它們不是唯一存在的集成方法,許多其他的也值得一試。
關(guān)于套袋操作的簡單概念:建立多個模型,觀察這些模型的結(jié)果,并解決大多數(shù)的結(jié)果。我最近有一個關(guān)于我的車后橋總成的問題:我沒有采取診斷問題的經(jīng)銷商的建議,并且我把它帶到其他兩個修車的地方,這兩個都認為這個問題是和經(jīng)銷商所提出的不同問題。這就說明,套袋在實際生活中的運用。隨機森林就是基于套袋技術(shù)所改進的。
加速類似于套袋,但有一個概念上的略微不同。它不是將相等的權(quán)重分配給模型,而是增加了對分類器的權(quán)重分配,并導(dǎo)出了基于加權(quán)投票的最終結(jié)果。再以我的汽車問題為例,也許我過去曾多次去過一個修車行,并且比其他人更信任他們的診斷。同時假設(shè)我之前并沒有和經(jīng)銷商有過互動或打過交道,并且相比較而言我更不相信他們的能力。我分配的重量將是反射性的。
堆疊與前兩個技術(shù)有所不同,因為它訓(xùn)練多個單一分類器,而不是各種相同的學(xué)習(xí)者的集合。雖然套袋和加速使用了許多建立的模型,使用了相同的分類算法的不同實例(如決策樹),但堆疊建立模型也使用了不同的分類算法(比如決策樹,邏輯回歸,一個ANNs或其他的組合)。
然后,通過對其他算法的預(yù)測,對合并算法進行訓(xùn)練,以得到最終的預(yù)測。這種組合可以是任何集成技術(shù),但邏輯回歸往往被認為是一個來執(zhí)行這一組合最充分和最簡單的算法。隨著分類的進行,堆疊也可以在非監(jiān)督學(xué)習(xí)任務(wù)(如密度估計)中使用。
5.谷歌Colab?
最后,讓我們來看看一些更實用的東西。Jupyter Notebook事實上已成為數(shù)據(jù)科學(xué)開發(fā)最實用的工具,大多數(shù)人都在個人電腦,或者通過一些其他配置——比較復(fù)雜的方法(如在Docker容器或虛擬機中) 運行該軟件。首先第一個受到關(guān)注的就是谷歌的Colaboratory,它允許Jupyter風(fēng)格和兼容的Notebook直接運行在您的Google驅(qū)動器中,不需要任何配置。
Colaboratory是預(yù)先配置了一些近期較為流行的Python庫,并通過支持的打包管理,使其可以把自己安裝在Notebooks中。例如,TensorFlow就屬于這一類,但Keras不是;但通過pip安裝Keras僅需要幾秒鐘的時間。
在這一問題上的好消息就是,如果你使用的是神經(jīng)網(wǎng)絡(luò),你可以在你的訓(xùn)練中啟用GPU硬件加速,開啟一次就可以享受長達12小時的免費服務(wù)。這個好消息其實并沒有它一開始看起來那么完美,但這也算是一個額外的好處,也是一個全民化GPU加速的良好開端。