「資料科學家」必備的10種機器學習演算法

AI科技大本營發表於2018-03-19

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


來源 | 雷克世界(ID:raicworld)

編譯 | 嗯~是阿童木呀、KABUDA、EVA


可以說,機器學習從業者都是個性迥異的。雖然其中一些人會說“我是X方面的專家,X可以在任何型別的資料上進行訓練”,其中,X =某種演算法;而其他一些人則是“能夠在適合的工作中施展其才華”。他們中的很多人認可“涉獵所有行業,而是其中一個領域的專家”策略,即他們在一個領域內擁有一個深厚的專業知識,並且對機器學習的不同領域有所瞭解。


也就是說,沒有人能否認這樣的事實:作為資料科學家的實踐者,我們必須瞭解一些通用機器學習的基礎知識演算法,這將幫助我們解決所遇到的新領域問題。本文對通用機器學習演算法進行了簡要的闡述,並列舉了它們的相關資源,從而幫助你能夠快速掌握其中的奧妙。


1.主成分分析(PCA)/ SVD


PCA是一種無監督的方法,用於對由向量組成的資料集的全域性屬性進行理解。本文分析了資料點的協方差矩陣,以瞭解哪些維度(大部分情況)/資料點(少數情況)更為重要,即它們之間具有很多的變化,但與其他變數之間的協變性較低)。考慮一個矩陣頂級主成分(PC)的一種方式是考慮它的具有最高特徵值的特徵向量。奇異值分解(SVD)本質上也是計算有序元件的一種方法,但你在沒有獲得點的協方差矩陣的情況下也可以得到它。


640?wx_fmt=png


該演算法通過獲取維度縮小的資料點的方式來幫助人們克服維度難題。


庫:

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.最小二乘法和多項式擬合


還記得你在大學時所學的數值分析(Numerical Analysis)程式碼嗎?其中,你使用直線和曲線連線點從而得到一個等式方程。在機器學習中,你可以將它們用於擬合具有低維度的小型資料集的曲線。(而對於具有多個維度的大型資料或資料集來說,實驗的結果可能總是過度擬合,所以不必麻煩)。OLS有一個封閉形式的解決方案,所以你不需要使用複雜的優化技術。


640?wx_fmt=png


如上圖所示,很明顯,使用這種演算法對簡單的曲線/迴歸進行擬合是非常方便的。


庫:

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)和資料中的噪聲相混淆。因此,我們需要約束以減少資料集上所進行擬合的線的方差。正確的方法是使用一個線性迴歸模型,以確保權重不會出錯。模型可以有L1範數(LASSO)或L2(嶺迴歸,Ridge Regression)或兼具兩者(彈性迴歸)。均方損失得到優化。


640?wx_fmt=png


將這些演算法用於擬合帶有約束的迴歸線,避免過度擬合併對模型中噪聲維度進行掩碼。


庫:

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均值聚類


這是大家最喜歡的無監督聚類演算法。給定一組向量形式的資料點,我們可以根據它們之間的距離製作點叢集。這是一個期望最大化演算法,它迭代地移動叢集中心,然後架構每叢集中心點聚焦在一起。該演算法所採用的輸入是將要生成的叢集的數量,以及它將嘗試聚集叢集的迭代次數。


640?wx_fmt=png


顧名思義,你可以使用此演算法在資料集中建立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迴歸是有限線性迴歸,在應用權重後帶有非線性(大多數使用sigmoid函式,或者你也可以使用tanh函式)應用,因此把輸出限制到接近+/-類(在sigmoid的情況下是1和0)。利用梯度下降法對交叉熵損失函式(Cross-Entropy Loss functions)進行優化。


初學者需要注意的是:Logistic迴歸用於分類,而不是迴歸。你也可以把logistic迴歸看成是一層神經網路。Logistic迴歸使用諸如梯度下降或LBFGS等最優化方法進行訓練。從事自然語言處理的的人員通常會稱它為最大熵分類器(Maximum Entropy Classifier)。


Sigmoid函式是這個樣子的:


640?wx_fmt=png


使用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迴歸一樣,不同之處在於它們有不同的基於邊緣的損失函式(支援向量機的推導是我見過的最漂亮的數學結果和特徵值計算之一)。你可以使用諸如L-BFGS甚至SGD這樣的最優化方法來優化損失函式。


640?wx_fmt=png


支援向量機中的另一個創新是將核心用於資料,以體現工程師的特色。如果你有很好的領域洞察力,你可以用更聰明的方法來替代優秀但是老舊的RBF核心並從中獲利。


支援向量機能做一件獨特的事情:學習一類分類器。


可以使用支援向量機來訓練分類器(甚至是迴歸量)。


庫:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

入門教程:

https://www.youtube.com/watch?v=eHsErlPJWUU


6.前饋神經網路(Feedforward Neural Networks, FFNN)


這些基本上都是多層的logistic迴歸分類器。許多權重的層被非線性函式(sigmoid、tanh、relu+softmax和炫酷的selu)分隔了。它們另一個流行的名字是多層感知器(Multi-Layered Perceptron)。可以將FFNN作為自動編碼器用於分類和非監督的特徵學習。

 

640?wx_fmt=png

多層感知器(Multi-Layered perceptron)


640?wx_fmt=png

 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.卷積神經網路(Convents)


目前,世界上近乎所有基於視覺的機器學習結果都是使用卷積神經網路實現的。它們可用於影像分類、目標檢測及影像分割。Yann Lecun於80年代末90年代初提出卷積神經網路,其特徵是卷積層,它起著提取分層特徵的作用。你可以在文字(甚至圖形)中使用它們。


640?wx_fmt=png


利用卷積神經網路對影像和文字進行分類,並進行目標檢測和影像分割。


庫:

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.迴圈神經網路(RNNs)


RNNs模型序列通過在時間t遞迴地對聚集器狀態施加相同的權重集,並且在時間t輸入(給定一個序列,在時間0..t..T處有輸入,並且在每個時間t具有隱藏狀態,來自RNN的t-1步驟的輸出)。現在很少使用純RNN(pure RNN),但是像LSTM和GRU這類旗鼓相當的演算法在大多數序列建模任務中仍是最先進的。


640?wx_fmt=png


RNN(如果這裡是密集連線的單元與非線性,那麼現在f一般是LSTM或GRU)。LSTM單元用於替代純RNN中的簡單緻密層。


640?wx_fmt=png


使用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結合使用。在神經機器翻譯系統出現之前,CRF是最先進的技術,在許多具有小資料集的序列標註任務中,它們仍然會比那些需要大量資料才能推廣的RNN表現得更好。它們也可被用於其他結構化的預測任務,如影像分割等。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.決策樹


例如我有一張有關各種水果資料的Excel工作表,我必須標明哪些是蘋果。我們需要做的是提出一個問題“哪些水果是紅的,哪些水果是圓的?”然後根據答案,將“是”與“否”的水果區分開。然後,我們得到的紅色和圓形的水果並不一定都是蘋果,所有蘋果也不一定都是紅色和圓形的。因此,我會面向紅色和圓形的水果提出一個問題,“哪些水果上有紅色或黃色的標記” ?向不是紅色和圓形的水果提出一個問題,“哪些水果是綠色和圓形的”。基於這些問題,我可以非常準確的分辨出哪些是蘋果。這一系列的問題展示了什麼是決策樹。然而,這是基於我個人直覺的決策樹。直覺並不能處理高維度和複雜的問題。我們必須通過檢視標記的資料來自動得出問題的級聯,這就是基於機器學習的決策樹所做的工作。早期的CART樹曾被用於簡單的資料,但隨著資料集的不斷擴大,偏差-方差的權衡需要用更好地演算法來解決。目前常用的兩種決策樹演算法是隨機森林(Random Forests)(在屬性的隨機子集上建立不同的分類器,並將它們結合起來輸出)和提升樹(Boosting trees)(在其他樹的基礎上對樹的級聯進行訓練,糾正它們下面的錯誤)


決策樹可以用於分類資料點(甚至迴歸)。


庫:

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遊戲機,我們需要讓一個空白的智慧體在這世界上根據其自身面臨的獎懲進行學習。這種型別的機器學習被稱為強化學習。近期,在這個領域內所取得的很多(並非全部)成果都是通過將convnet或LSTM的感知能力與一組名為時間差分學習演算法(Temporal Difference Learning)的演算法組合而得來的。這其中包括Q-Learning、SARSA及其他演算法。這些演算法是對貝爾曼方程的巧妙應用,從而得到一個可以利用智慧體從環境中得到的獎勵來訓練的損失函式。


這些演算法主要用於自動執行遊戲中,並在其他語言生成和目標檢測專案中予以應用。


庫:

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


我們介紹了可以助你成為資料科學家的10中機器學習演算法。


你可以在這裡瀏覽機器學習庫:https://blog.paralleldots.com/data-science/lesser-known-machine-learning-libraries-part-ii/


作者 | Shashank Gupta

原文連結

https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e


招聘

新一年,AI科技大本營的目標更加明確,有更多的想法需要落地,不過目前對於營長來說是“現實跟不上靈魂的腳步”,因為缺人~~


所以,AI科技大本營要壯大隊伍了,現招聘AI記者和資深編譯,有意者請將簡歷投至:gulei@csdn.net,期待你的加入!


如果你暫時不能加入營長的隊伍,也歡迎與營長分享你的精彩文章,投稿郵箱:suiling@csdn.net


AI科技大本營讀者群(計算機視覺、機器學習、深度學習、NLP、Python、AI硬體、AI+金融、AI+PM方向)正在招募中,關注AI科技大本營微信公眾號,後臺回覆:讀者群,聯絡營長,新增營長請備註姓名,研究方向。


640?wx_fmt=gif

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


☟☟☟點選 | 閱讀原文 | 檢視更多精彩內容

相關文章