想要成為數據科學家?知道這11種機器學習演算法嗎?
摘要: 想要成為數據科學家?知道這十幾種機器學習演算法嗎?趕快來了解一下吧,文中附各種演算法的資源地址!
機器學習從業者都有不同的個性,雖然其中一些人會說「我是X方面的專家,X可以訓練任何類型的數據」,其中X是某種演算法。但是,我們不得不承認的是在現實生活當中,不存在一個X可以訓練任何類型的數據。某些演算法落實到某些行業中是適合的,但到了那個行業就變得不適合了。
在數據科學界存在一個共識:作為數據科學家,我們必須儘可能多的了解通用的及其學習演算法。這樣我們才能在面臨不同行業的問題時有更多的解決方案。本文對通用的機器學習演算法進行了簡要的闡述,並提供了關於他們的相關資源,從而幫助你能夠快速掌握其中的奧妙。
1.主成分分析(PCA)/ SVD
PCA是一種無監督的方法,用於理解由矢量組成的數據集的全局屬性。在這裡我們著重分析數據點的協方差矩陣,以了解哪些維度/數據點更重要(即它們之間具有高度的協變性,但與其他變數之間的協變性較低)。考慮矩陣頂級主成分(PC)的一種方式是考慮具有最高特徵值的特徵向量。奇異值分解(SVD)本質上也是一種計算有序組件的方法,但你不需要獲得點的協方差矩陣就可以得到它。
這種演算法通過獲得維度縮小的數據點來幫助人們克服維度的詛咒
庫地址:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
入門教程:
https://arxiv.org/pdf/1404.1100.pdf
2.最小二乘法和多項式擬合
還記得在大學裡的數值分析課程嗎?你可以使用它們來擬合機器學習中的具有低維度的小型數據集的曲線。(而對於具有多維的大數據或數據集,你可能最終會過度擬合。)OLS有一個封閉式的解決方案,因此你無需使用複雜的優化技術。
上圖很明顯,使用這種演算法可以擬合簡單的曲線/回歸
庫地址:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.lstsq.html https://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.polyfit html的
入門教程:
https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf
3.約束線性回歸
最小二乘法可能會與異常值,假欄位和數據中的雜訊混淆。因此,我們需要約束來減少數據集上擬合產生的線方差。做到這一點的方法是擬合線性回歸模型,以確保權重不會有誤。模型可以有L1範數(LASSO)或L2(Ridge Regression)或兩者兼具。通過這種方法就可以使均方損失得到優化。
使用這個演算法來擬合具有約束條件的回歸線,可以避免過度擬合和掩蓋模型中的噪音維度。
庫地址:
http://scikit-learn.org/stable/modules/linear_model.html
入門教程:
https://www.youtube.com/watch?v=5asL5Eq2x0A
https://www.youtube.com/watch?v=jbwSCwoT51M
4.K均值聚類
大多數機器學習從業者都喜歡無監督聚類演算法。給定一組矢量形式的數據點,我們可以根據它們之間的距離製作點集群。這是一個期望最大化演算法,它迭代地移動聚類中心,然後聚焦每個聚類中心點。該演算法所採用的輸入是將要生成的簇的數量以及它將嘗試聚集簇的迭代次數。
從名字上可以明顯看出,你可以使用此演算法在數據集中創建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
5.Logistic回歸
Logistic回歸是線性回歸,在擁有權重後帶有非線性(主要使用sigmoid函數,或者使用tanh函數)應用,因此把輸出限制接近+/-類(對於sigmoid,為1和0)。交叉熵損失函數使用梯度下降進行優化。初學者注意:Logistic回歸是用於分類的,而不是回歸。你也可以將Logistic回歸看作單層神經網路。使用梯度下降或L-BFGS等優化方法對Logistic回歸進行訓練。從事NLP的人經常會以最大熵分類器的名稱來使用它。
這是一個Sigmoid的樣子:
庫地址:
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
入門教程
https://www.youtube.com/watch?v=-la3q9d7AKQ
6.支持向量機(SVM)
支持向量機是線性/邏輯回歸的線性模型,區別在於它們具有不同的基於邊界的損失函數(支持向量的推導是我觀察到的與特徵值計算在一起的最美妙的數學結果之一)。你可以使用L-BFGS甚至SGD等優化方法優化損失函數。
SVM的另一個創新是向數據工程師提供數據內核。如果你具有良好的洞察力,你可以用更聰明的RBF內核替換舊的RBF內核。
SVM可以做到的事情是學習一個類分類器。
支持向量機可以用來訓練分類器(甚至是回歸器(regressors))。
庫地址:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
入門教程
https://www.youtube.com/watch?v=eHsErlPJWUU
注意:基於SGD的Logistic回歸和SVM的訓練可以在我經常使用的SKLearn中找到,因為它可以讓我用一個通用介面來檢查LR和SVM。
7.前饋神經網路(FFNN)
這可以算的上是多層Logistic回歸分類器。許多權重層被非線性(S形,tanh,relu + softmax和selu)分開了。它另外一個的名字是多層感知器。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
8.卷積神經網路(Convnets)
幾乎當今世界上所有的最先進的基於視覺的機器學習結果都是使用卷積神經網路實現的。它們可用於圖像分類、對象檢測和圖像分割。它是由Yann Lecun在80年代末90年代初發明的,Convnets具有卷積層作為分層特徵提取器。你也可以在文本中使用它們(甚至是圖表)。
庫地址:
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/
9.遞歸神經網路(RNNS)
RNN模型序列通過在時間t遞歸地對聚集器狀態施加相同的權重集,並且在時間t輸入(給定序列在時間t處具有輸入,並且在每個時間t具有隱藏狀態,這是從RNN的t-1步輸出的)。現在很少使用純RNN,但是像LSTM和GRU這樣的同類模型在大多數序列建模任務中是最先進的。
RNN(如果存在密集連接的單元和非線性,則現在的f通常是LSTM或GRU)。LSTM單元用於替代純RNN中的簡單緻密層。
將RNN用於時間序列建模任務,特別是文本分類,機器翻譯和語言建模。
庫地址:
https://github.com/tensorflow/models(來自Google的許多不錯的NLP研究論文都在這裡!)
https://github.com/wabyking/TextClassificationBenchmark
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/
10.條件隨機欄位(CRFS)
CRF可能是概率圖形模型(PGM)系列中最常用的模型。它們用於像RNN一樣的序列建模,也可以與RNN結合使用。在神經機器翻譯系統進入CRF之前,它們是最先進的技術,並且在許多具有小數據集的序列標記任務中,他們仍然表現的比RNN更好。它們也可以用於其他結構化預測任務,如圖像分割等。CRF對序列中的每個元素(比如句子)進行建模,使得近鄰影響序列中某個組件的標籤,而不是所有標籤都彼此獨立。
使用CRF標記序列(文本、圖像、時間序列、DNA等)。
庫地址:
https://sklearn-crfsuite.readthedocs.io/en/latest/
入門教程
http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/
https://www.youtube.com/watch?v=GF3iSJkgPbA
11.決策樹
比方說,我給了一張有關各種水果數據的Excel工作表,我必須標註這是蘋果,那是其他類型的水果。那麼,如果我要提出一個問題是「哪些水果是紅色的,那些事圓形的?」並且將所有回答用「是」和「否」來表示。現在,所有的紅色的和圓形的水果可能不是蘋果,所有的蘋果也都不會是紅色和圓形的。所以我會問一個問題:「哪些水果有紅色或黃色的提示?「紅色且為圓形的水果,並會問「哪些水果是綠色且圓形的?而不是紅色和圓形水果?基於這些問題,我可以等到準確的答案——蘋果。這個問題的解決方式就是使用決策樹。但是,這是基於我的直覺的決策樹。直覺不能處理高維和複雜的數據。我們必須通過查看標記數據自動提出問題的級聯,這就是基於機器學習的決策樹所做的。像CART樹這樣的早期版本只能用於簡單的數據,但是對於越來越大的數據集,偏差-方差的權衡需要通過更好的演算法來解決。現在使用的兩種常見決策樹演算法是隨機森林(在其屬性的隨機子集上構建不同的分類器並將它們組合以用於輸出)和增強樹(Boosting Trees)(在其他樹的基礎上對樹的級聯進行訓練,糾正它們下面的樹的錯誤)。
決策樹可以用來分類數據點(甚至是回歸)。
圖書館
http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.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
以上是你可以學習成為數據科學家的十種機器學習演算法。
本文由阿里云云棲社區組織翻譯。
文章原標題《10 Machine Learning Algorithms You Should Know to Become a Data Scientist》
作者:Shashank Gupta
譯者:虎說八道,審校:。
文章為簡譯,更為詳細的內容,請查看原文
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※BAT面試流程及技巧詳解 強烈推薦!
※2018-3-30 站務處理簡報:個人權益要維護,辱罵反饋不保護
※從零開始手敲次世代遊戲引擎(四十五)
※演算法圖解
※鏈表中環的入口節點