机器学习(二十一)——Optimizer, 单分类SVM多分类SVM, 时间序列分析
http://antkillerfarm.github.io/
Optimizer
在《機器學習(一)》中,我們已經指出梯度下降是解決凸優化問題的一般方法。而如何更有效率的梯度下降,就是本節中Optimizer的責任了。
Momentum
Momentum是梯度下降法中一種常用的加速技術。其公式為:
vt=γvt?1+η?θJ(θ)
θ=θ?vt
從上式可以看出,參數的更新值vt,不僅取決于當前梯度?θJ(θ),還取決于上一刻的速度vt?1。
Nesterov accelerated gradient
該方法是Momentum的一個變種。其公式為:
vt=γvt?1+η?θJ(θ?γvt?1)
θ=θ?vt
Adagrad
Momentum算法中所有的參數θ都使用同一個學習率,而Adagrad采用了另一種方法進行優化:為每個參數確定不同的學習率。
Adagrad的基本思想:給經常更新的參數一個較小的學習率,而給很少更新的參數一個較大的學習率。
其公式為:
gt,i=?θJ(θi)
θt+1,i=θt,i?ηGt,ii+????????√?gt,i
其中,Gt,ii表示參數θi梯度平方和的歷史累積值,?是為了防止分母為0,而加入的平滑項,數量級一般為10?8。
有趣的是,如果去掉上式中的根號,則其效果會變糟。
Adagrad的優點在于:它是一個自適應算法,初值選擇顯得不太重要了。
Adagrad的缺點在于:訓練越往后,G越大,從而學習率越小。如果在訓練完成之前,學習率變為0,就會導致提前結束訓練。
Adadelta
為了克服Adagrad的缺點,Matthew D. Zeiler于2012年提出了Adadelta算法。
該算法不再使用歷史累積值,而是只取最近的w個狀態,這樣就不會讓梯度被懲罰至0。
為了避免保存前w個狀態的梯度平方和,可做如下變換:
E[g2]t=γE[g2]t?1+(1?γ)g2t
θt+1=θt?ηE[g2]t+?????????√gt
上邊的公式,就是Hinton在同一年提出的RMSprop算法。其中的γE[g2]t?1即可看作是前w個狀態的濾波值,也可看作是Momentum算法中動量值。
Adadelta在RMSprop的基礎上更進一步:
RMS[g]t=E[g2]t+?????????√
Δθt=?RMS[Δθ]t?1RMS[g]tgt
也就是說,Adadelta不僅考慮了梯度的平方和,也考慮了更新量的平方和。
Adam
Adaptive Moment Estimation借用了卡爾曼濾波的思想,對gt,g2t進行濾波:
mt=β1mt?1+(1?β1)gt
vt=β2vt?1+(1?β2)g2t
估計:
m^t=mt1?βt1
v^t=vt1?βt2
更新:
θt+1=θt?ηv^t??√+?m^t
參考
http://sebastianruder.com/optimizing-gradient-descent/
An overview of gradient descent optimization algorithms
https://morvanzhou.github.io/tutorials/machine-learning/ML-intro/3-06-speed-up-learning/
加速神經網絡訓練
http://www.cnblogs.com/neopenx/p/4768388.html
自適應學習率調整:AdaDelta
單分類SVM&多分類SVM
原始的SVM主要用于二分類,然而稍加變化,也可用于單分類和多分類。
單分類SVM
單分類任務是一類特殊的分類任務。在該任務中,大多數樣本只有positive一類標簽,而其他樣本則籠統的劃為另一類。
單分類SVM(也叫Support Vector Domain Description(SVDD))是一種單分類算法。和普通SVM相比,它不再使用maximum margin了,因為這里并沒有兩類的data。
單分類SVM的目標,實際上是確定positive樣本的boundary。boundary之外的數據,會被分為另一類。這實際上就是一種異常檢測的算法了。它主要適用于negative樣本的特征不容易確定的場景。
這里可以假設最好的boundary要遠離feature space中的原點。左邊是在original space中的boundary,可以看到有很多的boundary都符合要求,但是比較靠譜的是找一個比較緊(closeness)的boundary(紅色的)。這個目標轉換到feature space就是找一個離原點比較遠的boundary,同樣是紅色的直線。
當然這些約束條件都是人為加上去的,你可以按照你自己的需要采取相應的約束條件。比如讓data的中心離原點最遠。
下面我們討論一下SVDD的算法實現。
首先定義需要最小化的目標函數:
mins.t.F(R,a,ξi)=R2+C∑i=1Nξi(xi?a)T(xi?a)≤R2+ξi,ξi≥0
這里a表示形狀的中心,R表示半徑,C和ξ的含義與普通SVM相同。
Lagrangian算子:
L(R,a,αi,ξi)=R2+C∑i=1Nξi?∑i=1Nγiξi?∑i=1Nαi(R2+ξi?(xi?c)T(xi?c))
對偶問題:
L=∑i=1Nαi(xTi?xi)?∑i,j=1Nαiαj(xTi?xi)
使用核函數:
L=∑i=1NαiK(xi,xi)?∑i,j=1NαiαjK(xi,xj)
預測函數:
y(x)=∑i=1NαiK(x,xn)+b
根據計算結果的符號,來判定是正常樣本,還是異常樣本。
參考:
https://www.projectrhea.org/rhea/index.php/One_class_svm
One-Class Support Vector Machines for Anomaly Detection
https://www.zhihu.com/question/22365729
什么是一類支持向量機(one class SVM)
多分類SVM
多分類任務除了使用多分類算法之外,也可以通過對兩分類算法的組合來實施多分類。常用的方法有兩種:one-against-rest和DAG SVM。
one-against-rest
比如我們有5個類別,第一次就把類別1的樣本定為正樣本,其余2,3,4,5的樣本合起來定為負樣本,這樣得到一個兩類分類器,它能夠指出一篇文章是還是不是第1類的;第二次我們把類別2的樣本定為正樣本,把1,3,4,5的樣本合起來定為負樣本,得到一個分類器,如此下去,我們可以得到5個這樣的兩類分類器(總是和類別的數目一致)。
但有時也會出現兩種很尷尬的情況,例如拿一篇文章問了一圈,每一個分類器都說它是屬于它那一類的,或者每一個分類器都說它不是它那一類的,前者叫分類重疊現象,后者叫不可分類現象。
分類重疊倒還好辦,隨便選一個結果都不至于太離譜,或者看看這篇文章到各個超平面的距離,哪個遠就判給哪個。不可分類現象就著實難辦了,只能把它分給第6個類別了……
更要命的是,本來各個類別的樣本數目是差不多的,但“其余”的那一類樣本數總是要數倍于正類(因為它是除正類以外其他類別的樣本之和嘛),這就人為的造成了“數據集偏斜”問題。
DAG SVM
DAG SVM(也稱one-against-one)的分類思路如上圖所示。
粗看起來DAG SVM的分類次數遠超one-against-rest,然而由于每次分類都只使用了部分數據,因此,DAG SVM的計算量反而更小。
其次,DAG SVM的誤差上限有理論保障,而one-against-rest則不然(準確率可能降為0)。
顯然,上面提到的兩種方法,不僅可用于SVM,也適用于其他二分類算法。
參考:
http://www.blogjava.net/zhenandaci/archive/2009/03/26/262113.html
將SVM用于多類分類
推薦算法中的常用排序算法
Pointwise方法
Pranking (NIPS 2002), OAP-BPM (EMCL 2003), Ranking with Large Margin Principles (NIPS 2002), Constraint Ordinal Regression (ICML 2005)。
Pairwise方法
Learning to Retrieve Information (SCC 1995), Learning to Order Things (NIPS 1998), Ranking SVM (ICANN 1999), RankBoost (JMLR 2003), LDM (SIGIR 2005), RankNet (ICML 2005), Frank (SIGIR 2007), MHR(SIGIR 2007), Round Robin Ranking (ECML 2003), GBRank (SIGIR 2007), QBRank (NIPS 2007), MPRank (ICML 2007), IRSVM (SIGIR 2006)。
Listwise方法
LambdaRank (NIPS 2006), AdaRank (SIGIR 2007), SVM-MAP (SIGIR 2007), SoftRank (LR4IR 2007), GPRank (LR4IR 2007), CCA (SIGIR 2007), RankCosine (IP&M 2007), ListNet (ICML 2007), ListMLE (ICML 2008) 。
時間序列分析
書籍和教程
http://www.stat.berkeley.edu/~bartlett/courses/153-fall2010/
berkeley的時間序列分析課程
http://people.duke.edu/%7Ernau/411home.htm
回歸和時間序列分析
《應用時間序列分析》,王燕著。
概述
時間序列,就是按時間順序排列的,隨時間變化的數據序列。
生活中各領域各行業太多時間序列的數據了,銷售額,顧客數,訪問量,股價,油價,GDP,氣溫…
隨機過程的特征有均值、方差、協方差等。
如果隨機過程的特征隨著時間變化,則此過程是非平穩的;相反,如果隨機過程的特征不隨時間而變化,就稱此過程是平穩的。
下圖所示,左邊非穩定,右邊穩定。
非平穩時間序列分析時,若導致非平穩的原因是確定的,可以用的方法主要有趨勢擬合模型、季節調整模型、移動平均、指數平滑等方法。
若導致非平穩的原因是隨機的,方法主要有ARIMA及自回歸條件異方差模型等。
ARIMA
ARIMA模型全稱為差分自回歸移動平均模型(Autoregressive Integrated Moving Average Model,簡記ARIMA),也叫求和自回歸移動平均模型,是由George Edward Pelham Box和Gwilym Meirion Jenkins于70年代初提出的一著名時間序列預測方法,所以又稱為box-jenkins模型、博克思-詹金斯法。
注:Gwilym Meirion Jenkins,1932~1982,英國統計學家。倫敦大學學院博士,蘭卡斯特大學教授。
同《數學狂想曲(三)》中的PID算法一樣,ARIMA模型實際上是三個簡單模型的組合。
AR模型
Xt=c+∑i=1pφiXt?i+εt
其中,p為階數,εt為白噪聲。上式又記作AR(p)。顯然,AR模型是一個系統狀態模型。
MA模型
Xt=μ+εt+∑i=1qθiεt?i
上式記作MA(q),其中q和εt的含義與上同。MA模型是一個噪聲模型。
ARMA模型
AR模型和MA模型合起來,就是ARMA模型:
Xt=c+εt+∑i=1pφiXt?i+∑i=1qθiεt?i
Lag operator
在繼續下面的描述之前,我們先來定義一下Lag operator–L。
LXt=Xt?1orXt=LXt+1
I模型
(1?L)dXt
上式中d為階數,因此上式也記作I(d)。顯然I(0)=Xt。
I模型有什么用呢?我們觀察一下I(1):
(1?L)Xt=Xt?Xt?1=ΔX
有的時候,雖然I(0)不是平穩序列,但I(1)是平穩序列,這時我們稱該序列是1階平穩序列。n階的情況,可依此類推。
ARIMA模型
Yt=(1?L)dXt
(1?∑i=1p?iLi)Yt=(1+∑i=1qθiLi)εt
從上式可以看出,ARIMA模型實際上就是利用I模型,將時間序列轉化為平穩序列之后的ARMA模型。
注:上面的內容只是對ARIMA模型給出一個簡單的定義。實際的假設檢驗、參數估計的步驟,還是比較復雜的,完全可以寫本書來說。
參考:
https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average
https://en.wikipedia.org/wiki/Autoregressive%E2%80%93moving-average_model
https://zhuanlan.zhihu.com/p/23534595
時間序列分析:結合ARMA的卡爾曼濾波算法(該文的參考文獻中有不少好文)
http://blog.csdn.net/aliceyangxi1987/article/details/71079522
用ARIMA模型做需求預測
總結
以上是生活随笔為你收集整理的机器学习(二十一)——Optimizer, 单分类SVM多分类SVM, 时间序列分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习(二十)——EMD, LSA,
- 下一篇: Hadoop, Hbase