-- How to Win a Data Science Competition: Learn from Top Kagglers課堂筆記
目前競(jìng)賽中(其實(shí)也是常規(guī)實(shí)際問(wèn)題)的主流算法有四大門(mén)類: Linear, Tree-based, kNN 以及 Neural Networks 下面分別簡(jiǎn)單介紹一下:
Linear相關(guān)模型
假設(shè)我們有兩組點(diǎn), 灰色點(diǎn)屬于一類,綠色點(diǎn)屬于另一類歉眷,如上圖所示凝危, 那么我們可以很方便的擬合條直線將之區(qū)分為兩類些己,落在右上方的為A 落在左下方的為B亥啦。
上述是兩維的情況躯砰, 這種思路還可可以拓展到高維空間枝恋, 這個(gè)時(shí)候分界展現(xiàn)形式就可能是一個(gè)平面而非直線了创倔, 具體算法比如Logistic Regression 以及SVM。
Linear相關(guān)模型非常適用于稀疏高維數(shù)據(jù)的分類鼓择。不過(guò)也有很多數(shù)據(jù)沒(méi)有那么容易用Linear區(qū)分三幻,比如下面這種“環(huán)”數(shù)據(jù):
在應(yīng)用過(guò)程中你不必從頭實(shí)現(xiàn)Linear算法,各種現(xiàn)成的庫(kù)可以在Scikit-learn或者 Vowpal Wabbit找到呐能, 后者專門(mén)用于處理大型數(shù)據(jù)集念搬。
Tree-based模型
Tree-based(決策樹(shù))模型通常是作為構(gòu)建復(fù)雜模型的一個(gè)基礎(chǔ)模型。類似于線性模型摆出,我們假設(shè)有兩組數(shù)據(jù)點(diǎn)朗徊,我們嘗試用一條平行于坐標(biāo)軸的直線將之分開(kāi)
現(xiàn)在我們得到了兩片區(qū)域,上面這片區(qū)域是灰色點(diǎn)的概率為1偎漫, 下面這片是灰色的概率為0.2 爷恳。 那么上面空間不用再拆分了,我們繼續(xù)畫(huà)一條直線拆分下面這片區(qū)域
這樣我們得到左下區(qū)域的灰色概率為0象踊, 剩余區(qū)域灰色概率為1温亲。這個(gè)過(guò)程就是決策樹(shù)工作的典型過(guò)程, 簡(jiǎn)單來(lái)講就是使用分治的策略不斷劃分子空間直到不可再劃分為止杯矩。
決策樹(shù)算法的策略簡(jiǎn)單但是非常有效栈虚,其有兩個(gè)最有名的變形分別是隨機(jī)森林(Random Forest)和梯度提升決策樹(shù)(Gradient Boost Decision Trees, GBDT)。決策樹(shù)及其變形在Kaggle競(jìng)賽中應(yīng)用極為廣泛史隆,不夸張的說(shuō)幾乎所有表格數(shù)據(jù)相關(guān)的競(jìng)賽其冠軍方案都使用了這種策略魂务。
不過(guò)決策樹(shù)也不是萬(wàn)能的,在很多有明顯線性依賴關(guān)系的數(shù)據(jù)集上,決策樹(shù)表現(xiàn)要比線性模型要差很多粘姜,因?yàn)闉榱朔指羁臻g其需要生成大量樹(shù)分岔鬓照,而且在決策邊界也可能會(huì)變得不準(zhǔn)確。
對(duì)于基本的決策樹(shù)和Random Forest孤紧,我們依然可以在Scikit-learn或者 Vowpal Wabbit中找到其實(shí)現(xiàn)豺裆,對(duì)于GBDT有兩個(gè)主流的實(shí)現(xiàn)分別是 XGBoost和LightGBM
k-NN
k-NN 是 k-Nearest 即K 鄰近算法的縮寫(xiě),我們還是從分類預(yù)測(cè)問(wèn)題入手坛芽,類似的留储,我們希望預(yù)測(cè)下圖中帶問(wèn)好的這個(gè)點(diǎn)的分類
我們做一個(gè)假設(shè), 即彼此接近的點(diǎn)可能會(huì)有相同的標(biāo)簽咙轩,因此我們希望能找到距離目標(biāo)點(diǎn)相近的點(diǎn),并把這個(gè)點(diǎn)的標(biāo)簽作為目標(biāo)點(diǎn)的標(biāo)簽阴颖,因此某個(gè)點(diǎn)屬于那個(gè)分類是由其鄰居“投票”決定的活喊。這個(gè)尋找過(guò)程就是鄰近算法的基本思路。如果我們?cè)偻卣沟絢 個(gè)目標(biāo)找其鄰近的點(diǎn)量愧,那么這個(gè)算法就會(huì)產(chǎn)出k個(gè)分類, 也就是k-NN算法钾菊。
盡管K-NN思路簡(jiǎn)單,但是卻是競(jìng)賽中非常常用的一種前期處理思路偎肃。類似于前面兩個(gè)模型煞烫,k-NN的實(shí)現(xiàn)也可以在Scikit-learn或者 Vowpal Wabbit中找到。
Neural Networks(NN)
NN是近幾年耀眼的明星累颂,這其實(shí)不是一個(gè)算法滞详,而是一類特殊的機(jī)器學(xué)習(xí)模型,直觀來(lái)講紊馏,NN 類似于一個(gè)黑盒料饥,與決策樹(shù)不同,NN 可以生成一個(gè)平滑的分割曲線朱监,在一些特定問(wèn)題如圖像岸啡、聲音、文本和序列上赫编,NN都取得了革命性的進(jìn)步巡蘸。NN的具體原理是需要專門(mén)系統(tǒng)學(xué)習(xí)的,但是你可以在 https://playground.tensorflow.org/獲得一個(gè)直觀的認(rèn)識(shí)
實(shí)現(xiàn)NN的軟件包非常多擂送,主流的有Tensorflow, Keras, Pytorch, Mxnet 悦荒。其中Keras是對(duì)Tensorflow的易用化封裝, Pytorch近來(lái)由于其定義網(wǎng)絡(luò)的靈活性受到越來(lái)越多資深Kaggler的青睞团甲。
One more thing
Here is no method which outperforms all others for all tasks
沒(méi)有銀彈
沒(méi)有一種方法可以適用于所有數(shù)據(jù)逾冬,每種方法都限定與其適用的數(shù)據(jù)類型假設(shè)。通常我們看到大多數(shù)競(jìng)賽題目上,GBDT 和 NN 方法都表現(xiàn)良好身腻,但并不能因此低估其他比如Linear和K-NN方法产还,在某些問(wèn)題上后者可能表現(xiàn)更好,比如這個(gè)結(jié)合了邏輯回歸和隨機(jī)森林算法的方案,得分超過(guò)了CNN獲得了第一(http://blog.kaggle.com/2017/03/24/leaf-classification-competition-1st-place-winners-interview-ivan-sosnovik/
)