天天看點

想要成為資料科學家?知道這11種機器學習算法嗎?

機器學習從業者都有不同的個性,雖然其中一些人會說“我是X方面的專家,X可以訓練任何類型的資料”,其中X是某種算法。但是,我們不得不承認的是在現實生活當中,不存在一個X可以訓練任何類型的資料。某些算法落實到某些行業中是适合的,但到了那個行業就變得不适合了。

在資料科學界存在一個共識:作為資料科學家,我們必須盡可能多的了解通用的及其學習算法。這樣我們才能在面臨不同行業的問題時有更多的解決方案。本文對通用的機器學習算法進行了簡要的闡述,并提供了關于他們的相關資源,進而幫助你能夠快速掌握其中的奧妙。

<b>1.</b><b>主成分分析(</b><b>PCA</b><b>)</b><b>/ SVD</b>

PCA是一種無監督的方法,用于了解由矢量組成的資料集的全局屬性。在這裡我們着重分析資料點的協方差矩陣,以了解哪些次元/資料點更重要(即它們之間具有高度的協變性,但與其他變量之間的協變性較低)。考慮矩陣頂級主成分(PC)的一種方式是考慮具有最高特征值的特征向量。奇異值分解(SVD)本質上也是一種計算有序元件的方法,但你不需要獲得點的協方差矩陣就可以得到它。

想要成為資料科學家?知道這11種機器學習算法嗎?

這種算法通過獲得次元縮小的資料點來幫助人們克服次元的詛咒

<b>庫位址:</b>

<a href="https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html">https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html</a>

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html">http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html</a>

<b>入門教程:</b>

<a href="https://arxiv.org/pdf/1404.1100.pdf">https://arxiv.org/pdf/1404.1100.pdf</a>

<b>2.</b><b>最小二乘法和多項式拟合</b>

還記得在大學裡的數值分析課程嗎?你可以使用它們來拟合機器學習中的具有低次元的小型資料集的曲線。(而對于具有多元的大資料或資料集,你可能最終會過度拟合。)OLS有一個封閉式的解決方案,是以你無需使用複雜的優化技術。

想要成為資料科學家?知道這11種機器學習算法嗎?

上圖很明顯,使用這種算法可以拟合簡單的曲線/回歸

<a href="https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf">https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf</a>

<b>3.</b><b>限制線性回歸</b>

最小二乘法可能會與異常值,假字段和資料中的噪聲混淆。是以,我們需要限制來減少資料集上拟合産生的線方差。做到這一點的方法是拟合線性回歸模型,以確定權重不會有誤。模型可以有L1範數(LASSO)或L2(Ridge Regression)或兩者兼具。通過這種方法就可以使均方損失得到優化。

想要成為資料科學家?知道這11種機器學習算法嗎?

使用這個算法來拟合具有限制條件的回歸線,可以避免過度拟合和掩蓋模型中的噪音次元。

<a href="http://scikit-learn.org/stable/modules/linear_model.html">http://scikit-learn.org/stable/modules/linear_model.html</a>

<a href="https://www.youtube.com/watch?v=5asL5Eq2x0A">https://www.youtube.com/watch?v=5asL5Eq2x0A</a>

<a href="https://www.youtube.com/watch?v=jbwSCwoT51M">https://www.youtube.com/watch?v=jbwSCwoT51M</a>

<b>4.K</b><b>均值聚類</b>

大多數機器學習從業者都喜歡無監督聚類算法。給定一組矢量形式的資料點,我們可以根據它們之間的距離制作點叢集。這是一個期望最大化算法,它疊代地移動聚類中心,然後聚焦每個聚類中心點。該算法所采用的輸入是将要生成的簇的數量以及它将嘗試聚集簇的疊代次數。

想要成為資料科學家?知道這11種機器學習算法嗎?

從名字上可以明顯看出,你可以使用此算法在資料集中建立K個群集。

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html">http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html</a>

<b>入門教程</b>

<a href="https://www.youtube.com/watch?v=hDmNF9JG3lo">https://www.youtube.com/watch?v=hDmNF9JG3lo</a>

<a href="https://www.datascience.com/blog/k-means-clustering">https://www.datascience.com/blog/k-means-clustering</a>

<b>5.Logistic</b><b>回歸</b>

Logistic回歸是線性回歸,在擁有權重後帶有非線性(主要使用sigmoid函數,或者使用tanh函數)應用,是以把輸出限制接近+/-類(對于sigmoid,為1和0)。交叉熵損失函數使用梯度下降進行優化。初學者注意:Logistic回歸是用于分類的,而不是回歸。你也可以将Logistic回歸看作單層神經網絡。使用梯度下降或L-BFGS等優化方法對Logistic回歸進行訓練。從事NLP的人經常會以最大熵分類器的名稱來使用它。

這是一個Sigmoid的樣子:

想要成為資料科學家?知道這11種機器學習算法嗎?

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html">http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html</a>

<a href="https://www.youtube.com/watch?v=-la3q9d7AKQ">https://www.youtube.com/watch?v=-la3q9d7AKQ</a>

<b>6.</b><b>支援向量機(</b><b>SVM</b><b>)</b>

支援向量機是線性/邏輯回歸的線性模型,差別在于它們具有不同的基于邊界的損失函數(支援向量的推導是我觀察到的與特征值計算在一起的最美妙的數學結果之一)。你可以使用L-BFGS甚至SGD等優化方法優化損失函數。

想要成為資料科學家?知道這11種機器學習算法嗎?

SVM的另一個創新是向資料工程師提供資料核心。如果你具有良好的洞察力,你可以用更聰明的RBF核心替換舊的RBF核心。

SVM可以做到的事情是學習一個類分類器。

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

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html">http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html</a>

<a href="https://www.youtube.com/watch?v=eHsErlPJWUU">https://www.youtube.com/watch?v=eHsErlPJWUU</a>

<b>7.</b><b>前饋神經網絡(</b><b>FFNN</b><b>)</b>

這可以算的上是多層Logistic回歸分類器。許多權重層被非線性(S形,tanh,relu + softmax和selu)分開了。它另外一個的名字是多層感覺器。FFNN可用于自動編碼器的分類和無監督特征學習。

想要成為資料科學家?知道這11種機器學習算法嗎?

多層感覺器

想要成為資料科學家?知道這11種機器學習算法嗎?

FFNN作為自動編碼器

可以使用FFNN作為自動編碼器訓練分類器或用來特征提取。

<a href="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.MLPClassifier.html#sklearn.neural_network.MLPClassifier</a>

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html">http://scikit-learn.org/stable/modules/generated/sklearn.neural_network.MLPRegressor.html</a>

<a href="https://github.com/keras-team/keras/blob/master/examples/reuters_mlp_relu_vs_selu.py">https://github.com/keras-team/keras/blob/master/examples/reuters_mlp_relu_vs_selu.py</a>

<a href="http://www.deeplearningbook.org/contents/mlp.html">http://www.deeplearningbook.org/contents/mlp.html</a>

<a href="http://www.deeplearningbook.org/contents/autoencoders.html">http://www.deeplearningbook.org/contents/autoencoders.html</a>

<a href="http://www.deeplearningbook.org/contents/representation.html">http://www.deeplearningbook.org/contents/representation.html</a>

<b>8.</b><b>卷積神經網絡(</b><b>Convnets</b><b>)</b>

幾乎當今世界上所有的最先進的基于視覺的機器學習結果都是使用卷積神經網絡實作的。它們可用于圖像分類、對象檢測和圖像分割。它是由Yann Lecun在80年代末90年代初發明的,Convnets具有卷積層作為分層特征提取器。你也可以在文本中使用它們(甚至是圖表)。

想要成為資料科學家?知道這11種機器學習算法嗎?

利用CNN對圖像和文本分類,目标檢測,圖像分割的過程。

<a href="https://developer.nvidia.com/digits">https://developer.nvidia.com/digits</a>

<a href="https://github.com/kuangliu/torchcv">https://github.com/kuangliu/torchcv</a>

<a href="https://github.com/chainer/chainercv">https://github.com/chainer/chainercv</a>

<a href="https://keras.io/applications/">https://keras.io/applications/</a>

<a href="http://cs231n.github.io/">http://cs231n.github.io/</a>

<a href="https://adeshpande3.github.io/A-Beginner&amp;apos;s-Guide-To-Understanding-Convolutional-Neural-Networks/">https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/</a>

<b>9.</b><b>遞歸神經網絡(</b><b>RNNS</b><b>)</b>

RNN模型序列通過在時間t遞歸地對聚集器狀态施加相同的權重集,并且在時間t輸入(給定序列在時間t處具有輸入,并且在每個時間t具有隐藏狀态,這是從RNN的t-1步輸出的)。現在很少使用純RNN,但是像LSTM和GRU這樣的同類模型在大多數序列模組化任務中是最先進的。

想要成為資料科學家?知道這11種機器學習算法嗎?

RNN(如果存在密集連接配接的單元和非線性,則現在的f通常是LSTM或GRU)。LSTM單元用于替代純RNN中的簡單緻密層。

想要成為資料科學家?知道這11種機器學習算法嗎?

将RNN用于時間序列模組化任務,特别是文本分類,機器翻譯和語言模組化。

<a href="https://github.com/wabyking/TextClassificationBenchmark">https://github.com/wabyking/TextClassificationBenchmark</a>

<a href="http://opennmt.net/">http://opennmt.net/</a>

<a href="http://cs224d.stanford.edu/">http://cs224d.stanford.edu/</a>

<a href="http://www.wildml.com/category/neural-networks/recurrent-neural-networks/">http://www.wildml.com/category/neural-networks/recurrent-neural-networks/</a>

<a href="http://colah.github.io/posts/2015-08-Understanding-LSTMs/">http://colah.github.io/posts/2015-08-Understanding-LSTMs/</a>

<b>10.</b><b>條件随機字段(</b><b>CRFS</b><b>)</b>

CRF可能是機率圖形模型(PGM)系列中最常用的模型。它們用于像RNN一樣的序列模組化,也可以與RNN結合使用。在神經機器翻譯系統進入CRF之前,它們是最先進的技術,并且在許多具有小資料集的序列标記任務中,他們仍然表現的比RNN更好。它們也可以用于其他結構化預測任務,如圖像分割等。CRF對序列中的每個元素(比如句子)進行模組化,使得近鄰影響序列中某個元件的标簽,而不是所有标簽都彼此獨立。

使用CRF标記序列(文本、圖像、時間序列、DNA等)。

<a href="https://sklearn-crfsuite.readthedocs.io/en/latest/">https://sklearn-crfsuite.readthedocs.io/en/latest/</a>

<a href="http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/">http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/</a>

<a href="https://www.youtube.com/watch?v=GF3iSJkgPbA">https://www.youtube.com/watch?v=GF3iSJkgPbA</a>

<b>11.</b><b>決策樹</b>

比方說,我給了一張有關各種水果資料的Excel工作表,我必須标注這是蘋果,那是其他類型的水果。那麼,如果我要提出一個問題是“哪些水果是紅色的,那些事圓形的?”并且将所有回答用“是”和“否”來表示。現在,所有的紅色的和圓形的水果可能不是蘋果,所有的蘋果也都不會是紅色和圓形的。是以我會問一個問題:“哪些水果有紅色或黃色的提示?“紅色且為圓形的水果,并會問“哪些水果是綠色且圓形的?而不是紅色和圓形水果?基于這些問題,我可以等到準确的答案——蘋果。這個問題的解決方式就是使用決策樹。但是,這是基于我的直覺的決策樹。直覺不能處理高維和複雜的資料。我們必須通過檢視标記資料自動提出問題的級聯,這就是基于機器學習的決策樹所做的。像CART樹這樣的早期版本隻能用于簡單的資料,但是對于越來越大的資料集,偏差-方差的權衡需要通過更好的算法來解決。現在使用的兩種常見決策樹算法是随機森林(在其屬性的随機子集上建構不同的分類器并将它們組合以用于輸出)和增強樹(Boosting Trees)(在其他樹的基礎上對樹的級聯進行訓練,糾正它們下面的樹的錯誤)。

決策樹可以用來分類資料點(甚至是回歸)。

<b>圖書館</b>

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html">http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html</a>

<a href="http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html">http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html</a>

<a href="http://xgboost.readthedocs.io/en/latest/">http://xgboost.readthedocs.io/en/latest/</a>

<a href="https://catboost.yandex/">https://catboost.yandex/</a>

<a href="http://xgboost.readthedocs.io/en/latest/model.html">http://xgboost.readthedocs.io/en/latest/model.html</a>

<a href="https://arxiv.org/abs/1511.05741">https://arxiv.org/abs/1511.05741</a>

<a href="https://arxiv.org/abs/1407.7502">https://arxiv.org/abs/1407.7502</a>

<a href="http://education.parrotprediction.teachable.com/p/practical-xgboost-in-python">http://education.parrotprediction.teachable.com/p/practical-xgboost-in-python</a>

以上是你可以學習成為資料科學家的十種機器學習算法。

<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=j4nkrg1c&amp;utm_source=j4nkrg1c" target="_blank">數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!</a>

文章原标題《10 Machine Learning Algorithms You Should

Know to Become a Data Scientist》

譯者:虎說八道,審校:。

繼續閱讀