數(shù)據(jù)科學(xué)家必備的10種機(jī)器學(xué)習(xí)算法
原文來(lái)源:towardsdatascience
作者:Shashank Gupta
「雷克世界」編譯:嗯~是阿童木呀、KABUDA、EVA
可以說(shuō),機(jī)器學(xué)習(xí)從業(yè)者都是個(gè)性迥異的。雖然其中一些人會(huì)說(shuō)“我是X方面的專家,X可以在任何類型的數(shù)據(jù)上進(jìn)行訓(xùn)練”,其中,X =某種算法;而其他一些人則是“能夠在適合的工作中施展其才華”。他們中的很多人認(rèn)可“涉獵所有行業(yè),而是其中一個(gè)領(lǐng)域的專家”策略,即他們?cè)谝粋€(gè)領(lǐng)域內(nèi)擁有一個(gè)深厚的專業(yè)知識(shí),并且對(duì)機(jī)器學(xué)習(xí)的不同領(lǐng)域有所了解。也就是說(shuō),沒(méi)有人能否認(rèn)這樣的事實(shí):作為數(shù)據(jù)科學(xué)家的實(shí)踐者,我們必須了解一些通用機(jī)器學(xué)習(xí)的基礎(chǔ)知識(shí)算法,這將幫助我們解決所遇到的新領(lǐng)域問(wèn)題。本文對(duì)通用機(jī)器學(xué)習(xí)算法進(jìn)行了簡(jiǎn)要的闡述,并列舉了它們的相關(guān)資源,從而幫助你能夠快速掌握其中的奧妙。
1.主成分分析(PCA)/ SVD
PCA是一種無(wú)監(jiān)督的方法,用于對(duì)由向量組成的數(shù)據(jù)集的全局屬性進(jìn)行理解。本文分析了數(shù)據(jù)點(diǎn)的協(xié)方差矩陣,以了解哪些維度(大部分情況)/數(shù)據(jù)點(diǎn)(少數(shù)情況)更為重要,即它們之間具有很多的變化,但與其他變量之間的協(xié)變性較低)??紤]一個(gè)矩陣頂級(jí)主成分(PC)的一種方式是考慮它的具有最高特征值的特征向量。奇異值分解(SVD)本質(zhì)上也是計(jì)算有序組件的一種方法,但你在沒(méi)有獲得點(diǎn)的協(xié)方差矩陣的情況下也可以得到它。
該算法通過(guò)獲取維度縮小的數(shù)據(jù)點(diǎn)的方式來(lái)幫助人們克服維度難題。
庫(kù):
https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html
http://scikitlearn.org/stable/modules/generated/sklearn.decomposition.PCA.html
入門教程:
https://arxiv.org/pdf/1404.1100.pdf
2a.最小二乘法和多項(xiàng)式擬合
還記得你在大學(xué)時(shí)所學(xué)的數(shù)值分析(Numerical Analysis)代碼嗎?其中,你使用直線和曲線連接點(diǎn)從而得到一個(gè)等式方程。在機(jī)器學(xué)習(xí)中,你可以將它們用于擬合具有低維度的小型數(shù)據(jù)集的曲線。(而對(duì)于具有多個(gè)維度的大型數(shù)據(jù)或數(shù)據(jù)集來(lái)說(shuō),實(shí)驗(yàn)的結(jié)果可能總是過(guò)度擬合,所以不必麻煩)。OLS有一個(gè)封閉形式的解決方案,所以你不需要使用復(fù)雜的優(yōu)化技術(shù)。
如上圖所示,很明顯,使用這種算法對(duì)簡(jiǎn)單的曲線/回歸進(jìn)行擬合是非常方便的。
庫(kù):
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html
https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.polyJt.html
入門教程:
https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf
2b.約束線性回歸
最小二乘法可能會(huì)與異常值(outliers)、假字段(spurious fields)和數(shù)據(jù)中的噪聲相混淆。因此,我們需要約束以減少數(shù)據(jù)集上所進(jìn)行擬合的線的方差。正確的方法是使用一個(gè)線性回歸模型,以確保權(quán)重不會(huì)出錯(cuò)。模型可以有L1范數(shù)(LASSO)或L2(嶺回歸,Ridge Regression)或兼具兩者(彈性回歸)。均方損失得到優(yōu)化。
將這些算法用于擬合帶有約束的回歸線,避免過(guò)度擬合并對(duì)模型中噪聲維度進(jìn)行掩碼。
庫(kù):
http://scikit-learn.org/stable/modules/linear_model.html
入門教程:
https://www.youtube.com/watch?v=5asL5Eq2x0A
https://www.youtube.com/watch?v=jbwSCwoT51M
3. K均值聚類
這是大家最喜歡的無(wú)監(jiān)督聚類算法。給定一組向量形式的數(shù)據(jù)點(diǎn),我們可以根據(jù)它們之間的距離制作點(diǎn)集群。這是一個(gè)期望最大化算法,它迭代地移動(dòng)集群中心,然后架構(gòu)每集群中心點(diǎn)聚焦在一起。該算法所采用的輸入是將要生成的集群的數(shù)量,以及它將嘗試聚集集群的迭代次數(shù)。
顧名思義,你可以使用此算法在數(shù)據(jù)集中創(chuàng)建K個(gè)集群。
庫(kù):
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
入門教程:
https://www.youtube.com/watch?v=hDmNF9JG3lo
https://www.datascience.com/blog/k-means-clustering
4.Logistic回歸
Logistic回歸是有限線性回歸,在應(yīng)用權(quán)重后帶有非線性(大多數(shù)使用sigmoid函數(shù),或者你也可以使用tanh函數(shù))應(yīng)用,因此把輸出限制到接近+/-類(在sigmoid的情況下是1和0)。利用梯度下降法對(duì)交叉熵?fù)p失函數(shù)(Cross-Entropy Loss functions)進(jìn)行優(yōu)化。
初學(xué)者需要注意的是:Logistic回歸用于分類,而不是回歸。你也可以把logistic回歸看成是一層神經(jīng)網(wǎng)絡(luò)。Logistic回歸使用諸如梯度下降或LBFGS等最優(yōu)化方法進(jìn)行訓(xùn)練。從事自然語(yǔ)言處理的的人員通常會(huì)稱它為最大熵分類器(Maximum Entropy Classifier)。
Sigmoid函數(shù)是這個(gè)樣子的:
使用LR對(duì)簡(jiǎn)單但具有魯棒性的分類器進(jìn)行訓(xùn)練。
庫(kù):
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
入門教程:
https://www.youtube.com/watch?v=-la3q9d7AKQ
5.支持向量機(jī) (Support Vector Machines,SVM )
支持向量機(jī)是線性模型,就像線性/ Logistic回歸一樣,不同之處在于它們有不同的基于邊緣的損失函數(shù)(支持向量機(jī)的推導(dǎo)是我見過(guò)的最漂亮的數(shù)學(xué)結(jié)果和特征值計(jì)算之一)。你可以使用諸如L-BFGS甚至SGD這樣的最優(yōu)化方法來(lái)優(yōu)化損失函數(shù)。
支持向量機(jī)中的另一個(gè)創(chuàng)新是將內(nèi)核用于數(shù)據(jù),以體現(xiàn)工程師的特色。如果你有很好的領(lǐng)域洞察力,你可以用更聰明的方法來(lái)替代優(yōu)秀但是老舊的RBF內(nèi)核并從中獲利。
支持向量機(jī)能做一件獨(dú)特的事情:學(xué)習(xí)一類分類器。
可以使用支持向量機(jī)來(lái)訓(xùn)練分類器(甚至是回歸量)。
庫(kù):
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
入門教程:
https://www.youtube.com/watch?v=eHsErlPJWUU
6.前饋神經(jīng)網(wǎng)絡(luò)(Feedforward Neural Networks, FFNN)
這些基本上都是多層的logistic回歸分類器。許多權(quán)重的層被非線性函數(shù)(sigmoid、tanh、relu+softmax和炫酷的selu)分隔了。它們另一個(gè)流行的名字是多層感知器(Multi-Layered Perceptron)??梢詫FNN作為自動(dòng)編碼器用于分類和非監(jiān)督的特征學(xué)習(xí)。
多層感知器(Multi-Layered perceptron)
FFNN作為自動(dòng)編碼器
可以使用FFNN作為自動(dòng)編碼器來(lái)訓(xùn)練分類器或提取特征。
庫(kù):
http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPClassifier.html#sklearn.neural_network.MLPClassifier
http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html
https://github.com/keras-team/keras/blob/master/examples/reuters_mlp_relu_vs_selu.py
入門教程:
http://www.deeplearningbook.org/contents/mlp.html
http://www.deeplearningbook.org/contents/autoencoders.html
http://www.deeplearningbook.org/contents/representation.html
7.卷積神經(jīng)網(wǎng)絡(luò)(Convents)
目前,世界上近乎所有基于視覺(jué)的機(jī)器學(xué)習(xí)結(jié)果都是使用卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的。它們可用于圖像分類、目標(biāo)檢測(cè)及圖像分割。Yann Lecun于80年代末90年代初提出卷積神經(jīng)網(wǎng)絡(luò),其特征是卷積層,它起著提取分層特征的作用。你可以在文本(甚至圖形)中使用它們。
利用卷積神經(jīng)網(wǎng)絡(luò)對(duì)圖像和文本進(jìn)行分類,并進(jìn)行目標(biāo)檢測(cè)和圖像分割。
庫(kù):
https://developer.nvidia.com/digits
https://github.com/kuangliu/torchcv
https://github.com/chainer/chainercv
https://keras.io/applications/
入門教程:
http://cs231n.github.io/
https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/
8.循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)
RNNs模型序列通過(guò)在時(shí)間t遞歸地對(duì)聚集器狀態(tài)施加相同的權(quán)重集,并且在時(shí)間t輸入(給定一個(gè)序列,在時(shí)間0..t..T處有輸入,并且在每個(gè)時(shí)間t具有隱藏狀態(tài),來(lái)自RNN的t-1步驟的輸出)?,F(xiàn)在很少使用純RNN(pure RNN),但是像LSTM和GRU這類旗鼓相當(dāng)?shù)乃惴ㄔ诖蠖鄶?shù)序列建模任務(wù)中仍是最先進(jìn)的。
RNN(如果這里是密集連接的單元與非線性,那么現(xiàn)在f一般是LSTM或GRU)。LSTM單元用于替代純RNN中的簡(jiǎn)單致密層。
使用RNN進(jìn)行人物序列建模任務(wù),特別是文本分類、機(jī)器翻譯及語(yǔ)言建模。
庫(kù):
https://github.com/tensorqow/models
https://github.com/wabyking/TextClassiJcationBenchmark
http://opennmt.net/
入門教程:
http://cs224d.stanford.edu/
http://www.wildml.com/category/neural-networks/recurrent-neural-networks/
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
9.條件隨機(jī)場(chǎng)(CRFs)
CRFs或許是概率圖形模型(PGMs)中使用頻率最高的模型。它們可用于類似于RNN的序列建模,也可與RNN結(jié)合使用。在神經(jīng)機(jī)器翻譯系統(tǒng)出現(xiàn)之前,CRF是最先進(jìn)的技術(shù),在許多具有小數(shù)據(jù)集的序列標(biāo)注任務(wù)中,它們?nèi)匀粫?huì)比那些需要大量數(shù)據(jù)才能推廣的RNN表現(xiàn)得更好。它們也可被用于其他結(jié)構(gòu)化的預(yù)測(cè)任務(wù),如圖像分割等。CRF對(duì)序列中的每個(gè)元素(例如句子)進(jìn)行建模,這樣近鄰會(huì)影響序列中某個(gè)組件的標(biāo)簽,而不是所有的標(biāo)簽相互獨(dú)立。
使用CRFs標(biāo)記序列(如文本、圖像、時(shí)間序列及DNA等)。
庫(kù):
https://sklearn-crfsuite.readthedocs.io/en/latest/
入門教程:
http://blog.echen.me/2012/01/03/introduction-to-conditional-random-Jelds/
Hugo Larochelle在Youtube上的系列講座: https://www.youtube.com/watch?v=GF3iSJkgPbA
10.決策樹
例如我有一張有關(guān)各種水果數(shù)據(jù)的Excel工作表,我必須標(biāo)明哪些是蘋果。我們需要做的是提出一個(gè)問(wèn)題“哪些水果是紅的,哪些水果是圓的?”然后根據(jù)答案,將“是”與“否”的水果區(qū)分開。然后,我們得到的紅色和圓形的水果并不一定都是蘋果,所有蘋果也不一定都是紅色和圓形的。因此,我會(huì)面向紅色和圓形的水果提出一個(gè)問(wèn)題,“哪些水果上有紅色或黃色的標(biāo)記” ?向不是紅色和圓形的水果提出一個(gè)問(wèn)題,“哪些水果是綠色和圓形的”。基于這些問(wèn)題,我可以非常準(zhǔn)確的分辨出哪些是蘋果。這一系列的問(wèn)題展示了什么是決策樹。然而,這是基于我個(gè)人直覺(jué)的決策樹。直覺(jué)并不能處理高維度和復(fù)雜的問(wèn)題。我們必須通過(guò)查看標(biāo)記的數(shù)據(jù)來(lái)自動(dòng)得出問(wèn)題的級(jí)聯(lián),這就是基于機(jī)器學(xué)習(xí)的決策樹所做的工作。早期的CART樹曾被用于簡(jiǎn)單的數(shù)據(jù),但隨著數(shù)據(jù)集的不斷擴(kuò)大,偏差-方差的權(quán)衡需要用更好地算法來(lái)解決。目前常用的兩種決策樹算法是隨機(jī)森林(Random Forests)(在屬性的隨機(jī)子集上建立不同的分類器,并將它們結(jié)合起來(lái)輸出)和提升樹(Boosting trees)(在其他樹的基礎(chǔ)上對(duì)樹的級(jí)聯(lián)進(jìn)行訓(xùn)練,糾正它們下面的錯(cuò)誤)
決策樹可以用于分類數(shù)據(jù)點(diǎn)(甚至回歸)。
庫(kù):
http://scikitlearn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassiJer.html
http://scikitlearn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassiJer.html
http://xgboost.readthedocs.io/en/latest/
https://catboost.yandex/
入門教程:
http://xgboost.readthedocs.io/en/latest/model.html
https://arxiv.org/abs/1511.05741
https://arxiv.org/abs/1407.7502
http://education.parrotprediction.teachable.com/p/practical-xgboost-in-python
TD算法
你不必思考上述哪種算法能夠像DeepMind那樣擊敗圍棋世界冠軍,因?yàn)樗鼈兌疾荒茏龅竭@一點(diǎn)。我們之前談及的10種算法都是模式識(shí)別,而非策略學(xué)習(xí)者。為了學(xué)習(xí)能夠解決多步驟問(wèn)題的策略,比如贏得一盤棋或玩Atari游戲機(jī),我們需要讓一個(gè)空白的智能體在這世界上根據(jù)其自身面臨的獎(jiǎng)懲進(jìn)行學(xué)習(xí)。這種類型的機(jī)器學(xué)習(xí)被稱為強(qiáng)化學(xué)習(xí)。近期,在這個(gè)領(lǐng)域內(nèi)所取得的很多(并非全部)成果都是通過(guò)將convnet或LSTM的感知能力與一組名為時(shí)間差分學(xué)習(xí)算法(Temporal Difference Learning)的算法組合而得來(lái)的。這其中包括Q-Learning、SARSA及其他算法。這些算法是對(duì)貝爾曼方程的巧妙應(yīng)用,從而得到一個(gè)可以利用智能體從環(huán)境中得到的獎(jiǎng)勵(lì)來(lái)訓(xùn)練的損失函數(shù)。
這些算法主要用于自動(dòng)運(yùn)行游戲中,并在其他語(yǔ)言生成和目標(biāo)檢測(cè)項(xiàng)目中予以應(yīng)用。
庫(kù):
https://github.com/keras-rl/keras-rl
https://github.com/tensorqow/minigo
入門教程:
Sutton與Barto的免費(fèi)書籍:https://web2.qatar.cmu.edu/~gdicaro/15381/additional/SuttonBarto-RL-5Nov17.pdf
觀看David Silver的課程: https://www.youtube.com/watch?v=2pWv7GOvuf0
我們介紹了可以助你成為數(shù)據(jù)科學(xué)家的10中機(jī)器學(xué)習(xí)算法。
你可以在這里瀏覽機(jī)器學(xué)習(xí)庫(kù):https://blog.paralleldots.com/data-science/lesser-known-machine-learning-libraries-part-ii/
原文鏈接:https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e?source=userActivityShare-dc302bd40f88-1521164030