感覺狼廠有些把機器學習和數據挖掘神話了,機器學習、數據挖掘的能力其實是有邊界的。機器學習、數據挖掘永遠是給大公司的業務錦上添花的東西,它可以幫助公司賺更多的錢,卻不能幫助公司在與其他公司的競爭中取得領先優勢,所以小公司招聘數據挖掘/機器學習不是為了裝逼就是在自尋死路。可是相比Java和C++語言開發來說,機器學習/數據挖掘確實是新一些老人占的坑少一些,而且可以經常接觸一些新的東西。還是趕緊再次抓住機會集中的再總結一下吧,不能再拖拖拉拉了。
其實數據挖掘的主要任務是分類、聚類、關聯分析、預測、時序模式和偏差分析。本文先系統的介紹一下機器學習中的分類算法,主要目錄如下:
常用分類算法
Bayes
貝葉斯分類法是基於貝葉斯定定理的統計學分類方法。它通過預測一個給定的元組屬於一個特定類的概率,來進行分類。朴素貝葉斯分類法假定一個屬性值在給定類的影響獨立於其他屬性的 —— 類條件獨立性。
朴素貝葉斯的優缺點
- 優點
- 所需估計的參數少,對於缺失數據不敏感。
- 缺點
- 假設屬性之間相互獨立,這往往並不成立。(喜歡吃番茄、雞蛋,卻不喜歡吃番茄炒蛋)。
- 需要知道先驗概率。
- 分類決策錯誤率。
朴素貝葉斯的公式
- 朴素貝葉斯求解:
P(C|F1,...,Fn)=p(C)p(F1,...,Fn|C)p(F1,...,Fn)=p(C)∏i=1np(Fi|C)
Decision Tree
決策樹是一種簡單但廣泛使用的分類器,它通過訓練數據構建決策樹,對未知的數據進行分類。決策樹的每個內部節點表示在一個屬性上的測試,每個分枝代表該測試的一個輸出,而每個樹葉結點存放着一個類標號。
在決策樹算法中,ID3基於信息增益作為屬性選擇的度量,C4.5基於信息增益比作為屬性選擇的度量,CART基於基尼指數作為屬性選擇的度量。
決策樹代碼
- 1
- 1
決策樹的優缺點
- 優點
- 不需要任何領域知識或參數假設。
- 適合高維數據。
- 簡單易於理解。
- 短時間內處理大量數據,得到可行且效果較好的結果。
- 缺點
- 對於各類別樣本數量不一致數據,信息增益偏向於那些具有更多數值的特征。
- 易於過擬合。
- 忽略屬性之間的相關性。
- 不支持在線學習
決策樹公式
- 熵:
Entropy(S)=−∑pilogpi - 信息增益:
Entropy(S,A)=Entropy(S)−∑v∈V(A)|Sv||S|Entropy(Sv) - 分裂信息:
SplitInfoR=−∑j=1k|Dj||D|log2|Dj||D| - 增益比率:
GainRatio(R)=Gain(R)SplitInfoR(D) - 基尼指數:
Gini(S)=1−∑imp2i
SVM
支持向量機把分類問題轉化為尋找分類平面的問題,並通過最大化分類邊界點距離分類平面的距離來實現分類。
支持向量機的優缺點
- 優點
- 可以解決小樣本下機器學習的問題。
- 提高泛化性能。
- 可以解決高維、非線性問題。超高維文本分類仍受歡迎。
- 避免神經網絡結構選擇和局部極小的問題。
- 缺點
- 缺失數據敏感。
- 內存消耗大,難以解釋。
- 運行和調差略煩人。
支持向量機的公式
轉自研究者July: SVM的求解,先導出12||w||2,繼而引入拉格朗日函數,轉化為單一因子對偶變量a的求解。如此求w.b與a的等價,而求a的解法即為SMO。把求分類函數f(x)=ω∗x+b的問題轉化為求w,b的最優化問題,即凸二次規划問題,妙。
從上圖我們可以看出,這條紅色的線(超平面)把紅色的點和藍色的點分開了。超平面一邊的點對應的y全部是-1,而另外一邊全部是1。
接着我們可以令分類函數:f(x)=ωTx+b。顯然x是超平面上的點時,f(x)=0。那么我們不妨要求所有滿足f(x)<0的點,其對應的y等於-1,而f(x)>0則對應的y=1的數據點。(我盜用了很多圖。。。)
回憶之前的目標函數:
這個問題等價於
很顯然這是一個凸優化的問題,更具體的,它是一個二次優化問題—目標函數是二次的,約束條件是線性的。這個問題可以用任何現成的QP(Quadratic Programming)優化包解決。但是因為這個問題的特殊性,我們還可以通過Lagrange Duality變換到對偶變量的優化問題,找到一種更加行之有效的方法求解。首先我們給每一個約束條件加上一個Lagrange mutiplier,我們可以將它們融合到目標函數中去。 L(ω,b,a)=12||ω||2−∑ni=1α(yi(wTxi+b)−1),然后我們令θ(ω)=maxai≥0L(ω,b,a)容易驗證,當某個約束條件不滿足時,例如yi(wTxi+b)<1,那么我們顯然有θ(w)=∞。而當所有約束條件都滿足時,則有θ(ω)=12||ω||2,亦即我們最初要最小化的量。那么我們現在的目標函數就變成了:minw,bθ(ω)=minω,bmaxai≥0L(ω,b,α)=p∗,並且我們有d∗≤p∗,因為最大值中最小的一個一定要大於最小值中最大的一個。總之p∗提供了一個第一個問題的最優值p∗的一個下界。在滿足KKT條件時,二者相等,我們可以通過求解第二個問題來求解第一個問題。
先讓L關於ω和b最小化,我們分別把L對w和b求偏導:
再帶回L得到:
此時我們得到關於dual variable α的優化問題:
maxα∑ni=1αi−12∑ni,j=1αiαjyiyjxTixjs.t.,αi≥0,i=1,...,n∑ni=1αiyi=0
這個問題存在高效的算法,不過求解過程就不在這里介紹了。對於一個數據點進行分類時,我們是把x帶入到f(x)=wTx+b中,然后根據其正負號來進行類別划分的。把ω=∑ni=1αiyixi代入到f(x)=wTx+b,我們就可以得到f(x)=∑ni=1αiyi<xi,x>+b,這里的形式的有趣之處在於,對於新點x的檢測,只需要計算它與訓練數據點的內積即可。
為什么非支持向量的α等於零呢?因為對於非支持向量來說,L(ω,b,a)=12||ω||2−∑ni=1α(yi(wTxi+b)−1)中的,(yi(wTxi+b)−1)是大於0的,而且αi又是非負的,為了滿足最大化,αi必須等於0。悲劇的非支持向量就被無聲的秒殺了。。。
KNN
K近鄰的優缺點
- 優點
- 暫無
- 缺點
- 計算量太大
- 對於樣本分類不均衡的問題,會產生誤判。
K近鄰的公式
Logistic Regression
邏輯回歸的優缺點
- 優點
- 速度快。
- 簡單易於理解,直接看到各個特征的權重。
- 能容易地更新模型吸收新的數據。
- 如果想要一個概率框架,動態調整分類閥值。
- 缺點
- 特征處理復雜。需要歸一化和較多的特征工程。
邏輯回歸的公式
如果是連續的,那么就是多重線性回歸;如果是二項分布,就是Logistic回歸;如果是Poission分布,就是Poisson回歸;如果是負二項分布,那么就是負二項分布。
回歸問題常見步驟是:尋找h函數;構造J函數;想辦法使得J函數最小並求得回歸參數。邏輯回歸的h函數為:
hθ(x)=g(θTx)=11+e−θTx
其中hθ(x)的值表示結果取1的概率。
那么對於輸入x的分類結果對於類別1和類別0的概率分別為:
P(y=1|x;θ)=hθ(x)
P(y=0|x;θ)=1−hθ(x)
那么對於構造損失函數J,它們基於最大似然估計推到得到的:
∑ni=1Cost(hθ(xi),yi)=−1m[∑ni=1yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
最小化上式,與最大化下式子類似:
P(y|x;θ)=(hθ(x))y(1−hθ(x))1−y
取似然函數:
l(θ)=logL(θ)=∑ni=1yi(loghθ(xi)+(1−yi)log(1−hθ(xi)))
使用梯度上升的方法,求解θ,同樣如果把J(θ)取為
−1ml(θ),這樣通過梯度下降求解梯度最小值。
梯度下降法求最小值:
θj:=θj−ασσθiJ(θ)
代入后得到:
θj:=θj−α1m∑mi=1(hθ(xi)−yi)xji
然后θ的更新過程如下:
其中E=g(A)-y。
正則化Regularization:
正則化是在經驗風線上增加一個正則化項或者懲罰項。正則化項一般是模型復雜度的單調遞增函數,模型越復雜,正則化就越大。
λ是正則項系數。多分類時可以去樣本被判定為分類概率最大的那個類。
邏輯回歸的問題
- 過擬合問題
- 減少feature個數
- 規格化
神經網絡
神經網絡的優缺點
- 優點
- 分類准確率高。
- 並行處理能力強。
- 分布式存儲和學習能力強。
- 魯棒性較強,不易受噪聲影響。
- 缺點
- 需要大量參數(網絡拓撲、閥值、閾值)。
- 結果難以解釋。
- 訓練時間過長。
神經網絡公式
深度學習???
Ensemble learning
集成學習的思路是在對新的實例進行分類的時候,把多個單分類器的結果進行某種組合,來對最終的結果進行分類。
更好的數據往往打敗更好的算法,設計好的特征大有脾益。並且如果你有一個龐大的數據集,使用某種特定的算法的性能可能並不要緊。大可以挨個分類器嘗試,並且選取最好的一個。(可以多從易用性和性能考慮)
而且從Netfliex Prize的經驗教訓來看,嘗試各類分類器、交叉驗證、集成方法往往能取得更好的結果,一般的boosting>bagging>single classifier。集成學習的方法主要有一下三種:
1. 在樣本上做文章,基分類器為同一個分類算法,主要有bagging和boosting。
2. 在分類算法上做文章,即用於訓練基分類器的樣本相同。基分類器的算法不同。
3. 在樣本屬性集上做文章,即在不同的屬性上構建分類器,比較出名的是randomforest Tree的算法,這個有weka也有實現。
1998年Jerome Friedman & Trevor Hastie & Robert Tibshirani發表文章Additive Logistic Regression: a Statistical View of Boosting,中提到Bagging是一個純粹的降低相關度的方法。如果樹的節點具有很高的相關性,bagging就會有很好的效果。
GBDT
回歸樹類似決策樹,使用葉子節點的平均值作為判定的結果。如果不是葉子節點,那么就繼續向下尋找。GBDT幾乎可用於所有的回歸問題,亦可以適用於二分類問題。
GBDT使用新生成的樹來擬合之前的樹擬合的殘差。
Adaboost
Adaboost目的就是從訓練數據中學習一系列的弱分類器或基本分類器,然后將這些弱分類器組合成一個強分類器。
Adaboost的算法流程如下,首先初始化訓練數據的權值分布。每個訓練樣本最開始都被賦予相同的權重:1/N。計算Gm(x)在訓練數據集上的誤差率em就是被Gm(x)誤分類樣本的權值之和。計算Gm(x)的系數,am表示Gm(x)在最終分類器中的重要程度。
αm=12log1−emem,在em<=1/2時,am>=0,且am隨着em的減小而增大。
更新訓練數據集的權值分布(目的:得到樣本的新權值分布),用於下一輪迭代:
Dm+1=(wm+1,1,wm+1,2,...wm+1,i...,wm+1,N),
wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N
使得被基本分類器Gm(x)誤分類樣本的權值增大,而被正確分類樣本的權值減小。就這樣,通過Zm=∑Ni=1wmiexp(−αmyiGm(xi)),使得Dm+1成為一個概率分布。然后組合各個弱分類器f(x)=∑Mm=1αmGm(x),而得到的最終分類器G(x)=sign(f(x))=sign[∑Mm=1αmGm(x)]。
Random Forest
隨機森林指通過多顆決策樹聯合組成的預測模型,可以對樣本或者特征取bagging。
