機器學習方法彙總
通過將工作中用到的機器學習演算法歸納彙總,可以提高我們的學習效率。現在請閱讀小編整理的一些的內容。
一
1.決策樹演算法
決策樹是一種樹形分類結構,一棵決策樹由內部結點和葉子結點構成,內部結點代表一個屬性***或者一組屬性***,該結點的孩子代表這個屬性的不同取值;葉子結點表示一個類標。決策樹保證每一個例項都能被一條從根結點到葉子結點的路徑覆蓋,葉子結點就是這條例項對應的類別,遍歷這條路徑的過程就是對這條例項分類的過程。關於決策樹的詳細介紹,可以參考這篇文章。
損失函式
假設決策樹T的葉結點個數為|T|,t是樹T的某個葉結點,該結點有\***N_t\***個樣本點,其中k類的樣本點有\***N_{tk}\***個,k=1,2,…,K***K為類別個數***,\***H_t***T***\***為葉結點t上的經驗熵***即從訓練資料算出的熵***,決策樹模型對訓練資料的預測誤差\***C***T***\***定義為
\***C***T***=\sum_{t=1}^{|T|}N_tH_t***T***=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log\frac{N_{tk}}{N_t}\***
損失函式\***C_\alpha***T***\***:
\***C_\alpha***T***=C***T***+\alpha|T|\***
引數\***\alpha>=0\***控制預測誤差與模型複雜度的影響。
優化目標
在決策樹的構造階段,其優化目標是尋找最優的分裂屬性,具體實現是最大化屬性選擇指標,包括資訊增益、資訊增益比率、基尼指數等,構造階段用貪心策略得到區域性最優的模型。
在剪枝階段,其優化目標是最小化損失函式\***C_\alpha***T***\***,即
\***min_TC_a***T***\***
剪枝階段是一個全域性優化的過程,如果把@$\alpha$@設定得較大,則傾向於選擇簡單的樹***此時預測誤差較大,而泛化能力較好***,而如果$\alpha$設定得較小,則傾向於選擇更復雜的模型***此時預測誤差較小,而泛化能力偏差***;設定為0,那就只考慮預測誤差,即對訓練資料的擬合程度最高,但對未見過的資料,分類能力並不高。一個適當的@$\alpha$@在預測誤差與模型複雜度***泛化能力***之間平衡。
2.線性迴歸
線性迴歸使用線性模型擬合因變數與目標變數的關係,是最簡單的預測模型。
假設函式
其中\***x_0=1\***
損失函式
\***C***\theta***=\frac{1}{2m}\sum_{i=1}^{m}***h_\theta***x^{***i***}***-y^{***i***}***^2\***
優化目標
選擇合適的引數組\***\theta\***,使得損失函式最小化:
\***min_\theta***C***\theta******\***
優化實現
使用梯度下降法,不斷地進行迭代,每一步的方向是負梯度方向:
\***\theta_j=\theta_j-\alpha\frac{\partial }{\partial \theta_j}Cost***\theta***=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m***h_\theta***x^{***i***}***-y^{***i***}***x_j^{***i***}\***
3.邏輯迴歸
邏輯迴歸於線性迴歸有著驚人的相似,卻又有著本質的不同,線性迴歸的假設函式度量了一個線性模型對因變數和目標變數的擬合,即給定一個輸入,通過一個線性變換得到一個輸出,而邏輯迴歸的假設函式計算的是對於給定輸入,其輸出y=1的概率,但邏輯迴歸與線性迴歸在計算形式上很相似,常常讓誤解為他們僅僅是假設函式的不同。
假設函式
其中\***x_0=1\*** 、\***g***z***=\frac{1}{1+\exp^{-z}}\***
損失函式
這裡的損失函式不再是線性迴歸時的求誤差平方和,因為誤差平方和不是引數$\theta$的凸函式,不容易求解全域性最優解,因此該用極大釋然估計作為損失函式,能滿足凸函式的要求。
\***C***\theta***=-\frac{1}{m}[\sum_{i=1}^my^{***i***}log***h_\theta***x^{***i***}******+***1-y^{***i***}***log***1-h_\theta***x^{***i***}******]\***
優化目標
\***min_\theta***C***\theta******\***
優化實現
使用梯度下降法,不斷地進行迭代,每一步的方向是負梯度方向:
\***\theta_j=\theta_j-\alpha\frac{\partial }{\partial \theta_j}Cost***\theta***=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m***h_\theta***x^{***i***}***-y^{***i***}***x_j^{***i***}\***
注意到,在優化實現上,邏輯迴歸與線性迴歸的形式一樣的,只是具體的假設函式不同。實際上,這只是一個巧合,巧合之處在於,對各自的損失函式求偏導數後,其梯度值恰好是假設函式與y的表示式,但線性迴歸與邏輯迴歸的本質是不同的。
3.BP神經網路
這篇文章已經介紹了BP神經網路,這裡只是從模型、策略、演算法這三個層面來總結一下BP,模型就是指假設函式,策略則指優化目標,演算法即指優化實現。
假設函式
神經網路的假設函式不是一個簡單的公式,它是多個邏輯迴歸函式逐層迭代的結果,形式上可以寫成如下:
\***a^{***1***}=x\***
\***a^{***2***}=g***W^{***1***}a^{***1***}***\***
\***a^{***i***}=g***W^{***i-1***}a^{***i-1***}***\***
….
\***a^{***L***}=g***W^{***L-1***}a^{***L-1***}***\***
\***h_W***x***=a^{***L***}\***
其中\***L\***表示神經網路的層數,\***g***z***=\frac{1}{1+\exp^{-z}}\***,\***W^{***i-1***}\***表示第i-1層與第i層單元的權值矩陣,並且把偏置\***\theta^{***i***}\***放在了權值矩陣\***W^{***i-1***}\***中
損失函式
神經網路的損失函式跟邏輯迴歸非常類似,但是神經網路的輸出單元可能有多個,需要在每個輸出單元上做一個累加:
\***Cost***W***=-\frac{1}{m}[\sum_{i=1}^m\sum_{k=1}^Ky_k^{***i***}log***h_\theta***x^{***i***}******_k+***1-y^{***i***}_k***log***1-h_\theta***x^{***i***}******_k]\***
其中K表示輸出層神經單元的個數,m表示訓練資料例項個數。
優化目標
各個演算法的優化目標基本上都是尋求適當的引數,使得損失函式最小。
\***min_W***C***\theta******\***
優化實現
BP神經網路,利用反向傳播,逐層取樣梯度下降。
4.k近鄰
損失函式
knn損失函式為0-1損失函式,假設給定一個例項x,其K個最近鄰訓練例項點構成的集合是\***N_k***x***\***:
\***cost***f***=\frac {1}{k}\sum_{x_i\in N_k***x***}I***y_i\ne c_j***=1-\frac {1}{k}\sum_{x_i\in N_k}***x***I***y_i=c_j***\***
優化目標
二
學習方式
根據資料型別的不同,對一個問題的建模有不同的方式。在機器學習或者人工智慧領域,人們首先會考慮演算法的學習方式。在機器學習領域,有幾種主要的學習方式。將演算法按照學習方式分類是一個不錯的想法,這樣可以讓人們在建模和演算法選擇的時候考慮能根據輸入資料來選擇最合適的演算法來獲得最好的結果。
監督式學習:
在監督式學習下,輸入資料被稱為“訓練資料”,每組訓練資料有一個明確的標識或結果,如對防垃圾郵件系統中“垃圾郵件”“非垃圾郵件”,對手寫數字識別中的“1“,”2“,”3“,”4“等。在建立預測模型的時候,監督式學習建立一個學習過程,將預測結果與“訓練資料”的實際結果進行比較,不斷的調整預測模型,直到模型的預測結果達到一個預期的準確率。監督式學習的常見應用場景如分類問題和迴歸問題。常見演算法有邏輯迴歸***Logistic Regression***和反向傳遞神經網路***Back Propagation Neural Network***
非監督式學習:
在非監督式學習中,資料並不被特別標識,學習模型是為了推斷出資料的一些內在結構。常見的應用場景包括關聯規則的學習以及聚類等。常見演算法包括Apriori演算法以及k-Means演算法。
半監督式學習:
在此學習方式下,輸入資料部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習資料的內在結構以便合理的組織資料來進行預測。應用場景包括分類和迴歸,演算法包括一些對常用監督式學習演算法的延伸,這些演算法首先試圖對未標識資料進行建模,在此基礎上再對標識的資料進行預測。如圖論推理演算法***Graph Inference***或者拉普拉斯支援向量機***Laplacian SVM.***等。
強化學習:
在這種學習模式下,輸入資料作為對模型的反饋,不像監督模型那樣,輸入資料僅僅是作為一個檢查模型對錯的方式,在強化學習下,輸入資料直接反饋到模型,模型必須對此立刻作出調整。常見的應用場景包括動態系統以及機器人控制等。常見演算法包括Q-Learning以及時間差學習***Temporal difference learning***
在企業資料應用的場景下, 人們最常用的可能就是監督式學習和非監督式學習的模型。 在影象識別等領域,由於存在大量的非標識的資料和少量的可標識資料, 目前半監督式學習是一個很熱的話題。 而強化學習更多的應用在機器人控制及其他需要進行系統控制的領域。
演算法類似性
根據演算法的功能和形式的類似性,我們可以把演算法分類,比如說基於樹的演算法,基於神經網路的演算法等等。當然,機器學習的範圍非常龐大,有些演算法很難明確歸類到某一類。而對於有些分類來說,同一分類的演算法可以針對不同型別的問題。這裡,我們儘量把常用的演算法按照最容易理解的方式進行分類。
迴歸演算法:
迴歸演算法是試圖採用對誤差的衡量來探索變數之間的關係的一類演算法。迴歸演算法是統計機器學習的利器。在機器學習領域,人們說起迴歸,有時候是指一類問題,有時候是指一類演算法,這一點常常會使初學者有所困惑。常見的迴歸演算法包括:最小二乘法***Ordinary Least Square***,邏輯迴歸***Logistic Regression***,逐步式迴歸***Stepwise Regression***,多元自適應迴歸樣條***Multivariate Adaptive Regression Splines***以及本地散點平滑估計***Locally Estimated Scatterplot Smoothing***
基於例項的演算法
基於例項的演算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本資料,然後根據某些近似性把新資料與樣本資料進行比較。通過這種方式來尋找最佳的匹配。因此,基於例項的演算法常常也被稱為“贏家通吃”學習或者“基於記憶的學習”。常見的演算法包括 k-Nearest Neighbor***KNN***, 學習向量量化***Learning Vector Quantization, LVQ***,以及自組織對映演算法***Self-Organizing Map , SOM***
正則化方法
正則化方法是其他演算法***通常是迴歸演算法***的延伸,根據演算法的複雜度對演算法進行調整。正則化方法通常對簡單模型予以獎勵而對複雜演算法予以懲罰。常見的演算法包括:Ridge Regression, Least Absolute Shrinkage and Selection Operator***LASSO***,以及彈性網路***Elastic Net***。
決策樹學習
決策樹演算法根據資料的屬性採用樹狀結構建立決策模型, 決策樹模型常常用來解決分類和迴歸問題。常見的演算法包括:分類及迴歸樹***Classification And Regression Tree, CART***, ID3 ***Iterative Dichotomiser 3***, C4.5, Chi-squared Automatic Interaction Detection***CHAID***, Decision Stump, 隨機森林***Random Forest***, 多元自適應迴歸樣條***MARS***以及梯度推進機***Gradient Boosting Machine, GBM***
貝葉斯方法
貝葉斯方法演算法是基於貝葉斯定理的一類演算法,主要用來解決分類和迴歸問題。常見演算法包括:樸素貝葉斯演算法,平均單依賴估計***Averaged One-Dependence Estimators, AODE***,以及Bayesian Belief Network***BBN***。
基於核的演算法
基於核的演算法中最著名的莫過於支援向量機***SVM***了。 基於核的演算法把輸入資料對映到一個高階的向量空間, 在這些高階向量空間裡, 有些分類或者回歸問題能夠更容易的解決。 常見的基於核的演算法包括:支援向量機***Support Vector Machine, SVM***, 徑向基函式***Radial Basis Function ,RBF***, 以及線性判別分析***Linear Discriminate Analysis ,LDA***等
聚類演算法
聚類,就像迴歸一樣,有時候人們描述的是一類問題,有時候描述的是一類演算法。聚類演算法通常按照中心點或者分層的方式對輸入資料進行歸併。所以的聚類演算法都試圖找到資料的內在結構,以便按照最大的共同點將資料進行歸類。常見的聚類演算法包括 k-Means演算法以及期望最大化演算法***Expectation Maximization, EM***。
關聯規則學習
關聯規則學習通過尋找最能夠解釋資料變數之間關係的規則,來找出大量多元資料集中有用的關聯規則。常見演算法包括 Apriori演算法和Eclat演算法等。
人工神經網路
人工神經網路演算法模擬生物神經網路,是一類模式匹配演算法。通常用於解決分類和迴歸問題。人工神經網路是機器學習的一個龐大的分支,有幾百種不同的演算法。***其中深度學習就是其中的一類演算法,我們會單獨討論***,重要的人工神經網路演算法包括:感知器神經網路***Perceptron Neural Network***, 反向傳遞***Back Propagation***, Hopfield網路,自組織對映***Self-Organizing Map, SOM***。學習向量量化***Learning Vector Quantization, LVQ***
深度學習
深度學習演算法是對人工神經網路的發展。 在近期贏得了很多關注, 特別是百度也開始發力深度學習後, 更是在國內引起了很多關注。 在計算能力變得日益廉價的今天,深度學習試圖建立大得多也複雜得多的神經網路。很多深度學習的演算法是半監督式學習演算法,用來處理存在少量未標識資料的大資料集。常見的深度學習演算法包括:受限波爾茲曼機***Restricted Boltzmann Machine, RBN***, Deep Belief Networks***DBN***,卷積網路***Convolutional Network***, 堆疊式自動編碼器***Stacked Auto-encoders***。
降低維度演算法
像聚類演算法一樣,降低維度演算法試圖分析資料的內在結構,不過降低維度演算法是以非監督學習的方式試圖利用較少的資訊來歸納或者解釋資料。這類演算法可以用於高維資料的視覺化或者用來簡化資料以便監督式學習使用。常見的演算法包括:主成份分析***Principle Component Analysis, PCA***,偏最小二乘迴歸***Partial Least Square Regression,PLS***, Sammon對映,多維尺度***Multi-Dimensional Scaling, MDS***, 投影追蹤***Projection Pursuit***等。
整合演算法:
整合演算法用一些相對較弱的學習模型獨立地就同樣的樣本進行訓練,然後把結果整合起來進行整體預測。整合演算法的主要難點在於究竟整合哪些獨立的較弱的學習模型以及如何把學習結果整合起來。這是一類非常強大的演算法,同時也非常流行。常見的演算法包括:Boosting, Bootstrapped Aggregation***Bagging***, AdaBoost,堆疊泛化***Stacked Generalization, Blending***,梯度推進機***Gradient Boosting Machine, GBM***,隨機森林***Random Forest***。