想挑戰智商?10大機器學習算法,看懂你就是數據科學家
想成為數據科學家?你得是個博聞強識,又對新鮮事物保持好奇心的人。正因為如此,數據科學家會掌握幾乎所有的常見算法,并精通其中一門,這樣可以快速適應新領域的問題。
今天我們就來聊聊,每一位數據科技家都應該了解的10大機器學習算法。下面是關于普遍機器學習算法和快速資源的風暴之旅,準好了嗎?燒腦挑戰開始:
1. 主成分分析(PCA)/奇異值分解(SVD)
PCA是一種非監督學習,用來理解由向量組成的數據集的全局特性的方法。這里分析了數據點的協方差模型,用來了解哪些維度(大部分)/數據點(有時)更重要,即在它們自身之間具有高方差,但與其他變量時協方差較低。
這種思考模型主要用于考量具有最高特征值的特征向量。此外,SVD本質上也是一種計算有序成分的方法,但你不需要通過獲取數據點的協方差矩陣來實現它。

這種算法通過獲取已縮減維度的數據點,有助于解決多維度產生的沖擊。
Libraries:
- https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.html
- http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
Introductory Tutorial:
- https://arxiv.org/pdf/1404.1100.pdf
2.1 最小二乘法和多項式擬合
還記得你在大學里學的數值分析編碼嗎?通過擬合直線和曲線得到一個方程?,F在,你可以使用它們來適配機器學習中的曲線,用于非常小的低維數據集。對于大數據或多維度的數據集,你可能會需要過度擬合,所以不用費心。普通最小二乘法(OLS)具有封閉形式的解決方案,因此你不需要使用復雜的優化技術。

很明顯,你可以使用這種算法擬合簡單曲線/回歸。
Libraries:
- 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
Introductory Tutorial:
- https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf
2.2 約束性線性回歸
最小二乘法可能會被數據中的離群點、假維度和噪聲干擾。因此,我們需要用約束來減少數據集上擬合的線的方差。正確的方法是擬合一個權重可控的線性回歸模型。模型可以用L1正則(LASSO)或L2正則(Ridge Regression)或二者混合(elastic回歸)。經過正則處理后對均方損失進行優化。

使用這些算法擬合具有約束性的回歸線,避免從模型中過度擬合和掩藏干擾維度。
Libraries:
- http://scikit-learn.org/stable/modules/linear_model.html
Introductory Tutorial(s):
- https://www.youtube.com/watch?v=5asL5Eq2x0A
- https://www.youtube.com/watch?v=jbwSCwoT51M
3. K-均值聚類
這是所有人都喜歡的非監督學習聚類算法。給定一組矢量形式的數據點,我們可以基于它們之間的距離生成數據點群。它是一種期望最大化的算法,反復地移動群組的中心,然后聚集每個群組中心點。此算法所采用的輸入是生成群組的數量,并且它將嘗試匯集群組的迭代次數。

從名稱中就可以看出,你可以使用這種算法在數據集中創建K集群。
Library:
- http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Introductory Tutorial(s):
- https://www.youtube.com/watch?v=hDmNF9JG3lo
- https://www.datascience.com/blog/k-means-clustering
4. 邏輯回歸
邏輯回歸是一種約束線性回歸,它的結果進行了非線性變換(常用的是sigmoid函數,或者tanh也可以),因此把輸出限制成了+/-類的輸出(在sigmoid中是1和0)。
交叉熵損失函數(Cross-Entropy Loss)用梯度下降法(Gradient Descent)優化。對初學者來說,邏輯回歸用于分類,而不是回歸。你也可以把邏輯回歸看作一層神經網絡。邏輯回歸通過使用梯度下降法或者L-BFGS算法優化。NLP自然語言處理者們通常把它稱之為最大熵分類器。

使用LR來訓練非常簡單,卻是十分強有力的分類器。
Library:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.htmlIntroductory Tutorial(s):https://www.youtube.com/watch?v=-la3q9d7AKQ
5.SVM(支持向量機)
- SVM(支持向量機)是線性模型,類似線性/邏輯回歸。不同之處在于它們具有不同的基于邊際損失函數(支持向量的推導是我所看到過的最美的數理成果之一,和特征值的計算可以媲美)。你可以使用諸如B-FGS甚至SGD等優化方法來優化損失函數。

- SVMs的另一個創新是,在特征工程中kernel使用。如果你有很好的領域洞察力,你可以用更好的kernel來代替舊的RBF kernel,并從中受益。
- SVMs獨一無二的特性就是可以學習一個類別的分類器
- SVMs可以用來訓練分類器(甚至回歸函數)。
Library:
- http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
Introductory Tutorial(s):
- https://www.youtube.com/watch?v=eHsErlPJWUU
6. 前饋神經網絡
這些基本上是多層邏輯回歸分類器。許多層權重由非線性(SigMOID,TANH,Relu+SULTMax和cool new SELU)分隔。它另一個比較知名的名字是多層感知器。前饋神經網絡作為自動編碼器,可用于分類和非監督特征學習。


前饋神經網絡作為自動編碼器,可用于訓練分類器或提取特征。
Libraries:
- 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
Introductory Tutorial(s):
- http://www.deeplearningbook.org/contents/mlp.html
- http://www.deeplearningbook.org/contents/autoencoders.html
- http://www.deeplearningbook.org/contents/representation.html
7. 卷積神經網絡(Convnets)
當今,世界上幾乎所有基于視覺的機器學習成果,都已經通過卷積神經網絡實現。它們可以用于圖像分類、目標檢測甚至圖像分割。
這是Yann Lecun在上世紀80年代末90年代初的發明,其特征在于卷積層充當分層特征提取器。你也可以在文本中使用它們(甚至是圖形)。

convnets用于最先進的圖像和文本分類、目標檢測、圖像分割。
Libraries:
- https://developer.nvidia.com/digits
- https://github.com/kuangliu/torchcv
- https://github.com/chainer/chainercv
- https://keras.io/applications/
Introductory Tutorial(s):
- http://cs231n.github.io/
- https://adeshpande3.github.io/A-Beginner%27s-Guide-To-Understanding-Convolutional-Neural-Networks/
8. 遞歸神經網絡(RNNs)
RNN通過在聚合狀態下,遞歸的使用同樣的權重,來對一個序列建模。前提是這個序列在0..t..T時間點上有輸入,并且在時間t有從RNN的t-1步輸出的隱含層。
現在純的RNN已經很少使用了,取而代之的是代表序列建模最前沿的,與它對應的LSTMs和GRUs。

RNN(如果有緊密連接和非線性,現在f通常是LSTMs和GRUs的)。在純的RNN中,LSTM單元取代了緊密連接層。

使用RNNs去完成序列建模的任務,如文本分類、機器翻譯、語言建模。
Library:
- https://github.com/tensorflow/models (Many cool NLP research papers from Google are here)
- https://github.com/wabyking/TextClassificationBenchmark
- http://opennmt.net/
Introductory Tutorial(s):
- 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)中最常用的模型。它們被用于像RNNs這樣的序列建模,也可以與RNNs結合使用。它是神經機器翻譯系統進入CRFs之前最先進的技術,并且在許多序列中用小的數據集標記任務。
目前,CRFS仍然比RNNs這樣需要大量數據量支撐的算法更有優勢。它們也可用于其他結構化預測任務,如圖像分割等。CRF對序列中的每一個元素(例如一個句子)進行建模,使得其序列中某個組件的標簽相互影響,而不是所有的標簽彼此獨立。
使用CRFs標記序列(文本、圖像、時間序列、DNA等)。
Library:
- https://sklearn-crfsuite.readthedocs.io/en/latest/
Introductory Tutorial(s):
- http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/
10. 決策樹
假如,我得到一份關于各種水果數據的Excel表格,并需要告知哪些是蘋果時,會拋出這么幾個問題:
第一個問題:“哪些水果是紅色+圓形的?” 并用“是”和“否”來區分所有水果。 不過,所有的紅色+圓形水果可能不是蘋果,所有的蘋果都不會只是紅色+圓形的。
第二個問題:在所有的紅色+圓形水果中“哪些有紅色or黃色的特征?” 同時我也會問,在所有非紅色的圓形水果中“哪些是綠色+圓的。”
基于這些問題,我可以準確地分辨出哪些是蘋果。
這一連串的問題就是決策樹。
但是,這是一個基于我們直覺的決策樹。直覺并不能在高維和復雜的數據上工作。我們必須通過查看標記數據來自動提出這一連串的問題。這就是基于決策樹的機器學習技術所要做的。
早期的版本如CART樹,曾經被用于處理簡單的數據,但隨著數據集越來越大,權衡方差與偏差需要用更好的算法來解決。如今正在使用的兩種常用決策樹算法是隨機森林(在屬性的隨機子集上建立不同的分類器,并將它們組合成輸出)和提升樹(它不停地訓練上層,用于糾正下層的錯誤)
決策樹可以用來對數據點進行分類(甚至回歸)。
Libraries:
- 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/
Introductory Tutorial:
- 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 Go那樣擊敗世界冠軍,很遺憾它們做不到。
在這之前我們討論的所有10種算法都是模式識別,而不是策略學習。要通過學習策略解決一個多步驟的問題,比如贏得國際象棋游戲或玩雅達利游戲機,我們需要反復訓練并從獎懲制度中學習。
這部分機器學習技術我們稱之為深度強化學習。在這一領域的許多成功案例是融合了Convent或LSTM的感知能力產生的結果,這一些列算法稱之為時間差異學習。
這里面包括Q-Learning, SARSA和一些其它變型。這些算法在Bellman’s equations貝爾曼方程中非常智能,它可以通過從環境中獲得的獎勵訓練,從而獲取損失函數。
這些算法大多用于自動玩游戲,以及其他與語言生成和目標檢測有關的應用。