學會這10種機器學習演算法,你才算入門(附教程)

七月線上實驗室發表於2018-04-18

送書活動還在繼續:深度學習修煉祕籍 (文末贈書)


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


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

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

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

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

庫:https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.svd.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://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/linear_regression.pdf

https://www.julyedu.com/question/big/kp_id/23/ques_id/1012


2b.約束線性迴歸

最小二乘法可能會與異常值(outliers)、假欄位(spurious fields)和資料中的噪聲相混淆。因此,我們需要約束以減少資料集上所進行擬合的線的方差。正確的方法是使用一個線性迴歸模型,以確保權重不會出錯。模型可以有L1範數(LASSO)或L2(嶺迴歸,Ridge Regression)或兼具兩者(彈性迴歸)。均方損失得到優化。

640?wx_fmt=png

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

庫:http://scikit-learn.org/stable/modules/linear_model.html


3. K均值聚類

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


640?wx_fmt=png

顧名思義,你可以使用此演算法在資料集中建立K個叢集。

庫:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

教程:http://www.julyedu.com/video/play/18/72


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.julyedu.com/question/big/kp_id/23/ques_id/1001


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

教程:http://www.julyedu.com/video/play/18/429

https://www.julyedu.com/question/big/kp_id/23


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://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://keras.io/applications/ 

教程:http://www.julyedu.com/video/play/18/134


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進行人物序列建模任務,特別是文字分類、機器翻譯及語言建模。

庫:http://opennmt.net/ 

教程:http://cs224d.stanford.edu/ 

http://www.wildml.com/category/neural-networks/recurrent-neural-networks/

https://www.julyedu.com/question/big/kp_id/26/ques_id/1716


9.條件隨機場(CRFs)

CRFs或許是概率圖形模型(PGMs)中使用頻率最高的模型。它們可用於類似於RNN的序列建模,也可與RNN結合使用。在神經機器翻譯系統出現之前,CRF是最先進的技術,在許多具有小資料集的序列標註任務中,它們仍然會比那些需要大量資料才能推廣的RNN表現得更好。它們也可被用於其他結構化的預測任務,如影象分割等。CRF對序列中的每個元素(例如句子)進行建模,這樣近鄰會影響序列中某個元件的標籤,而不是所有的標籤相互獨立。

使用CRFs標記序列(如文字、影象、時間序列及DNA等)。

庫:https://sklearn-crfsuite.readthedocs.io/en/latest/


10.決策樹

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

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

教程:https://arxiv.org/abs/1511.05741


TD演算法

你不必思考上述哪種演算法能夠像DeepMind那樣擊敗圍棋世界冠軍,因為它們都不能做到這一點。我們之前談及的10種演算法都是模式識別,而非策略學習者。為了學習能夠解決多步驟問題的策略,比如贏得一盤棋或玩Atari遊戲機,我們需要讓一個空白的智慧體在這世界上根據其自身面臨的獎懲進行學習。這種型別的機器學習被稱為強化學習。近期,在這個領域內所取得的很多(並非全部)成果都是通過將convnet或LSTM的感知能力與一組名為時間差分學習演算法(Temporal Difference Learning)的演算法組合而得來的。這其中包括Q-Learning、SARSA及其他演算法。這些演算法是對貝爾曼方程的巧妙應用,從而得到一個可以利用智慧體從環境中得到的獎勵來訓練的損失函式。

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

庫:https://github.com/keras-rl/keras-rl

教程:https://web2.qatar.cmu.edu/~gdicaro/15381/additional/SuttonBarto-RL-5Nov17.pdf


在本公眾號「七月線上實驗室」回覆“機器學習演算法”一鍵獲取以上資料


七月線上為你準備了一門系統的機器學習課程。課程採用線上+線下授課模式,BAT專家面對面、手把手教學;除直播答疑、作業批改、線上考試之外,特地增加開課前的入學測評,基於每一個人的測評資料量身定製個性化的不同學習路線北京、上海、深圳、廣州、杭州、瀋陽、濟南、鄭州、成都九城同步開營。

除了為你提供一條清晰的學習路徑,更有10個工業專案實戰輔導 + 一對一面試求職輔導,真正幫你從零轉型機器學習工程師!

640?wx_fmt=png

相關文章