數(shù)據(jù)科學家必備的10種機器學習算法
原文來源:towardsdatascience
作者:Shashank Gupta
「雷克世界」編譯:嗯~是阿童木呀、KABUDA、EVA
可以說,機器學習從業(yè)者都是個性迥異的。雖然其中一些人會說“我是X方面的專家,X可以在任何類型的數(shù)據(jù)上進行訓練”,其中,X =某種算法;而其他一些人則是“能夠在適合的工作中施展其才華”。他們中的很多人認可“涉獵所有行業(yè),而是其中一個領域的專家”策略,即他們在一個領域內(nèi)擁有一個深厚的專業(yè)知識,并且對機器學習的不同領域有所了解。也就是說,沒有人能否認這樣的事實:作為數(shù)據(jù)科學家的實踐者,我們必須了解一些通用機器學習的基礎知識算法,這將幫助我們解決所遇到的新領域問題。本文對通用機器學習算法進行了簡要的闡述,并列舉了它們的相關資源,從而幫助你能夠快速掌握其中的奧妙。
1.主成分分析(PCA)/ SVD
PCA是一種無監(jiān)督的方法,用于對由向量組成的數(shù)據(jù)集的全局屬性進行理解。本文分析了數(shù)據(jù)點的協(xié)方差矩陣,以了解哪些維度(大部分情況)/數(shù)據(jù)點(少數(shù)情況)更為重要,即它們之間具有很多的變化,但與其他變量之間的協(xié)變性較低)。考慮一個矩陣頂級主成分(PC)的一種方式是考慮它的具有最高特征值的特征向量。奇異值分解(SVD)本質上也是計算有序組件的一種方法,但你在沒有獲得點的協(xié)方差矩陣的情況下也可以得到它。
該算法通過獲取維度縮小的數(shù)據(jù)點的方式來幫助人們克服維度難題。
庫:
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.最小二乘法和多項式擬合
還記得你在大學時所學的數(shù)值分析(Numerical Analysis)代碼嗎?其中,你使用直線和曲線連接點從而得到一個等式方程。在機器學習中,你可以將它們用于擬合具有低維度的小型數(shù)據(jù)集的曲線。(而對于具有多個維度的大型數(shù)據(jù)或數(shù)據(jù)集來說,實驗的結果可能總是過度擬合,所以不必麻煩)。OLS有一個封閉形式的解決方案,所以你不需要使用復雜的優(yōu)化技術。
如上圖所示,很明顯,使用這種算法對簡單的曲線/回歸進行擬合是非常方便的。
庫:
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.約束線性回歸
最小二乘法可能會與異常值(outliers)、假字段(spurious fields)和數(shù)據(jù)中的噪聲相混淆。因此,我們需要約束以減少數(shù)據(jù)集上所進行擬合的線的方差。正確的方法是使用一個線性回歸模型,以確保權重不會出錯。模型可以有L1范數(shù)(LASSO)或L2(嶺回歸,Ridge Regression)或兼具兩者(彈性回歸)。均方損失得到優(yōu)化。
將這些算法用于擬合帶有約束的回歸線,避免過度擬合并對模型中噪聲維度進行掩碼。
庫:
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均值聚類
這是大家最喜歡的無監(jiān)督聚類算法。給定一組向量形式的數(shù)據(jù)點,我們可以根據(jù)它們之間的距離制作點集群。這是一個期望最大化算法,它迭代地移動集群中心,然后架構每集群中心點聚焦在一起。該算法所采用的輸入是將要生成的集群的數(shù)量,以及它將嘗試聚集集群的迭代次數(shù)。
顧名思義,你可以使用此算法在數(shù)據(jù)集中創(chuàng)建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回歸是有限線性回歸,在應用權重后帶有非線性(大多數(shù)使用sigmoid函數(shù),或者你也可以使用tanh函數(shù))應用,因此把輸出限制到接近+/-類(在sigmoid的情況下是1和0)。利用梯度下降法對交叉熵損失函數(shù)(Cross-Entropy Loss functions)進行優(yōu)化。
初學者需要注意的是:Logistic回歸用于分類,而不是回歸。你也可以把logistic回歸看成是一層神經(jīng)網(wǎng)絡。Logistic回歸使用諸如梯度下降或LBFGS等最優(yōu)化方法進行訓練。從事自然語言處理的的人員通常會稱它為最大熵分類器(Maximum Entropy Classifier)。
Sigmoid函數(shù)是這個樣子的:
使用LR對簡單但具有魯棒性的分類器進行訓練。
庫:
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
入門教程:
https://www.youtube.com/watch?v=-la3q9d7AKQ
5.支持向量機 (Support Vector Machines,SVM )
支持向量機是線性模型,就像線性/ Logistic回歸一樣,不同之處在于它們有不同的基于邊緣的損失函數(shù)(支持向量機的推導是我見過的最漂亮的數(shù)學結果和特征值計算之一)。你可以使用諸如L-BFGS甚至SGD這樣的最優(yōu)化方法來優(yōu)化損失函數(shù)。
支持向量機中的另一個創(chuàng)新是將內(nèi)核用于數(shù)據(jù),以體現(xiàn)工程師的特色。如果你有很好的領域洞察力,你可以用更聰明的方法來替代優(yōu)秀但是老舊的RBF內(nèi)核并從中獲利。
支持向量機能做一件獨特的事情:學習一類分類器。
可以使用支持向量機來訓練分類器(甚至是回歸量)。
庫:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
入門教程:
https://www.youtube.com/watch?v=eHsErlPJWUU
6.前饋神經(jīng)網(wǎng)絡(Feedforward Neural Networks, FFNN)
這些基本上都是多層的logistic回歸分類器。許多權重的層被非線性函數(shù)(sigmoid、tanh、relu+softmax和炫酷的selu)分隔了。它們另一個流行的名字是多層感知器(Multi-Layered Perceptron)??梢詫FNN作為自動編碼器用于分類和非監(jiān)督的特征學習。
多層感知器(Multi-Layered perceptron)
FFNN作為自動編碼器
可以使用FFNN作為自動編碼器來訓練分類器或提取特征。
庫:
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)絡(Convents)
目前,世界上近乎所有基于視覺的機器學習結果都是使用卷積神經(jīng)網(wǎng)絡實現(xiàn)的。它們可用于圖像分類、目標檢測及圖像分割。Yann Lecun于80年代末90年代初提出卷積神經(jīng)網(wǎng)絡,其特征是卷積層,它起著提取分層特征的作用。你可以在文本(甚至圖形)中使用它們。
利用卷積神經(jīng)網(wǎng)絡對圖像和文本進行分類,并進行目標檢測和圖像分割。
庫:
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)絡(RNNs)
RNNs模型序列通過在時間t遞歸地對聚集器狀態(tài)施加相同的權重集,并且在時間t輸入(給定一個序列,在時間0..t..T處有輸入,并且在每個時間t具有隱藏狀態(tài),來自RNN的t-1步驟的輸出)?,F(xiàn)在很少使用純RNN(pure RNN),但是像LSTM和GRU這類旗鼓相當?shù)乃惴ㄔ诖蠖鄶?shù)序列建模任務中仍是最先進的。
RNN(如果這里是密集連接的單元與非線性,那么現(xiàn)在f一般是LSTM或GRU)。LSTM單元用于替代純RNN中的簡單致密層。
使用RNN進行人物序列建模任務,特別是文本分類、機器翻譯及語言建模。
庫:
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.條件隨機場(CRFs)
CRFs或許是概率圖形模型(PGMs)中使用頻率最高的模型。它們可用于類似于RNN的序列建模,也可與RNN結合使用。在神經(jīng)機器翻譯系統(tǒng)出現(xiàn)之前,CRF是最先進的技術,在許多具有小數(shù)據(jù)集的序列標注任務中,它們?nèi)匀粫饶切┬枰罅繑?shù)據(jù)才能推廣的RNN表現(xiàn)得更好。它們也可被用于其他結構化的預測任務,如圖像分割等。CRF對序列中的每個元素(例如句子)進行建模,這樣近鄰會影響序列中某個組件的標簽,而不是所有的標簽相互獨立。
使用CRFs標記序列(如文本、圖像、時間序列及DNA等)。
庫:
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.決策樹
例如我有一張有關各種水果數(shù)據(jù)的Excel工作表,我必須標明哪些是蘋果。我們需要做的是提出一個問題“哪些水果是紅的,哪些水果是圓的?”然后根據(jù)答案,將“是”與“否”的水果區(qū)分開。然后,我們得到的紅色和圓形的水果并不一定都是蘋果,所有蘋果也不一定都是紅色和圓形的。因此,我會面向紅色和圓形的水果提出一個問題,“哪些水果上有紅色或黃色的標記” ?向不是紅色和圓形的水果提出一個問題,“哪些水果是綠色和圓形的”?;谶@些問題,我可以非常準確的分辨出哪些是蘋果。這一系列的問題展示了什么是決策樹。然而,這是基于我個人直覺的決策樹。直覺并不能處理高維度和復雜的問題。我們必須通過查看標記的數(shù)據(jù)來自動得出問題的級聯(lián),這就是基于機器學習的決策樹所做的工作。早期的CART樹曾被用于簡單的數(shù)據(jù),但隨著數(shù)據(jù)集的不斷擴大,偏差-方差的權衡需要用更好地算法來解決。目前常用的兩種決策樹算法是隨機森林(Random Forests)(在屬性的隨機子集上建立不同的分類器,并將它們結合起來輸出)和提升樹(Boosting trees)(在其他樹的基礎上對樹的級聯(lián)進行訓練,糾正它們下面的錯誤)
決策樹可以用于分類數(shù)據(jù)點(甚至回歸)。
庫:
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那樣擊敗圍棋世界冠軍,因為它們都不能做到這一點。我們之前談及的10種算法都是模式識別,而非策略學習者。為了學習能夠解決多步驟問題的策略,比如贏得一盤棋或玩Atari游戲機,我們需要讓一個空白的智能體在這世界上根據(jù)其自身面臨的獎懲進行學習。這種類型的機器學習被稱為強化學習。近期,在這個領域內(nèi)所取得的很多(并非全部)成果都是通過將convnet或LSTM的感知能力與一組名為時間差分學習算法(Temporal Difference Learning)的算法組合而得來的。這其中包括Q-Learning、SARSA及其他算法。這些算法是對貝爾曼方程的巧妙應用,從而得到一個可以利用智能體從環(huán)境中得到的獎勵來訓練的損失函數(shù)。
這些算法主要用于自動運行游戲中,并在其他語言生成和目標檢測項目中予以應用。
庫:
https://github.com/keras-rl/keras-rl
https://github.com/tensorqow/minigo
入門教程:
Sutton與Barto的免費書籍:https://web2.qatar.cmu.edu/~gdicaro/15381/additional/SuttonBarto-RL-5Nov17.pdf
觀看David Silver的課程: https://www.youtube.com/watch?v=2pWv7GOvuf0
我們介紹了可以助你成為數(shù)據(jù)科學家的10中機器學習算法。
你可以在這里瀏覽機器學習庫: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