轉自http://blog.csdn.net/vshuang/article/details/5512853
1. 問題描述:
給定多個自變量、一個因變量以及代表它們之間關係的一些訓練樣本,如何來確定它們的關係?
2. 數學描述
建模:目的就是求這個因變量關於這多個自變量的函數。而這個函數能夠比較精確的表示這個因變量和這多個自變量之間的關係。
3. 問題深入
舉個例子我們有代表兩個自變量x1,x2和一個因變量y之間的關係的一些訓練樣本(比如(x1=0,x2=1,y=0)等)。現在我們來求y關於x1、x2的函數就可能會出現各種各樣的情況。
比如 y = a*x1+b*x2; y =a*Sqrt(x1)+b*Sqrt(x2); y = a*exp(x1)+b*exp(-x2); y=x1*x2;各種各樣的情況都很可能。
但是我們現在只有這些訓練樣本,我們怎麼來確定它們的模型呢和各自模型相應的參數呢。很難判斷。
從這裏可以看出其實線性迴歸的侷限性很大。它只是簡單的建立一個y=a*x1+b*x2的關係的一個模型,然後來擬合求得a、b的值。就試圖來表示y和x1、x2之間的所有關係,顯然不是很準確的。如果當前y=x1*x2的話,實際中,無論你怎樣去擬合,也很難達到一個理想的效果。
我們該怎麼辦?
1、 線性迴歸:如果我們要採用線性迴歸方法,首先我們得證明這個問題確實是線性問題。或者是說y確實等於a*x1+b*x2。我們要先試着去做一些相關的線性分析。證明y與x1、x2的線性相關非常高。或者我們也可以先計算出來結果,然後拿部分訓練樣本值對放到模型裏去測試,如果誤差超出一定值,我們也可以說明這個模型是不適合的。否則,我們就可以通過採用線性迴歸方法來求得相應的模型。
2、 線性模型不適合的話,我們要採用其它方式的建模(非線性模型):比如y=a*Sqrt(x1)+b*sqrt(x2),然後求出a、b,然後又拿部分訓練樣本值去測試,看這個模型合不合適。重複這個過程。如果你能堅持下去很多很多年,總會找到一個合適的模型的。
3、 即使找到了相應的模型,也是一個非線性迴歸模型:(當然除了像2說的那樣不斷嘗試,通過理解所研究對象的物理背景或散點圖可幫助我們選擇適當的非線性迴歸方程)(非線性迴歸函數模型有雙曲線、拋物線、冪函數、指數函數等等)
4、 儘管如此,非線性迴歸方程絕大多數時候還是非常難求,尤其是自變量多,維度比較高的情況下。兩種方法:1降維;2非線性空間化爲線性空間。
5、 降維(可以解決維度高的問題,但是解決不了非線性的問題):主成分分析(PCA),獨立成分分析(ICA)可以得到最相關的幾個自變量。(如果用核函數此步驟可以省略),這樣可以將自變量的個數減少到最重要的幾個。
6、 非線性空間轉換到線性空間:
線性空間對應的函數模型爲 ,式子中的 是一個一個的權值(在嚴格的證明過程中,這些α被稱爲拉格朗日乘子),而xi是樣本點,因而是向量,n就是總樣本點的個數。爲了方便描述,以下開始嚴格區別數字與向量的乘積和向量間的乘積,我會用α1x1表示數字和向量的乘積,而用<x1,x2>表示向量x1,x2的內積(也叫點積,注意與向量叉積的區別)。因此g(x)的表達式嚴格的形式應該是:
g(x)=<w,x>+b。而 (這裏的 是一個單位向量如(1,0000))
所以 ,其中 表示的即爲內積空間
非線性轉化,主要通過改變內積空間替換成另外一個核函數空間而從而轉化到另外一個線性空間。(想起來好像不存在,可是萬幸這樣的核函數還是存在的,雖然有點難理解)
加入核函數之後上述函數式變成 ,在這個空間里居然是線性的 和 之間居然變成了近似線性的。這樣這個問題也可以用線性迴歸來解決。
7、 支持向量迴歸:
殊途同歸的另外一種解釋方式(從支持向量說起的)
核函數+迴歸(但這裏的迴歸利用了支持向量)
4. 總結
線性迴歸只是用來完成針對多個自變量、一個因變量之間的關係的一個線性建模的解決方法。
對於維數多(維數多的情況下,有多重共線性的影響,同時大多數時候也是非線性問題)、非線性問題,線性迴歸往往無能爲力。
核函數是對向量內積空間的一個擴展,使得非線性迴歸的問題,在經過核函數的轉換後可以變成一個近似線性迴歸的問題。
所以絕大部分非線性迴歸問題是可以通過核函數+線性迴歸的思路來完成的。但在覈函數的選擇上面可能需要花一點時間,但是由於核函數的通用性,用了核函數,一般效果都還行。
如果覺得需要降維的話,可以考慮採用PCA、ICA。
5. 附錄 (核函數)http://blog.sina.com.cn/s/blog_5dd2e9270100bs2z.html
(1)核函數發展歷史
早在1964年Aizermann等在勢函數方法的研究中就將該技術引入到機器學習領域,但是直到1992年Vapnik等利用該技術成功地將線性SVMs推廣到非線性SVMs時其潛力才得以充分挖掘。而核函數的理論則更爲古老,Mercer定理可以追溯到1909年,再生核希爾伯特空間(ReproducingKernel
Hilbert Space, RKHS)研究是在20世紀40年代開始的。
(2)核函數方法原理
根據模式識別理論,低維空間線性不可分的模式通過非線性映射到高維特徵空間則可能實現線性可分,但是如果直接採用這種技術在高維空間進行分類或迴歸,則存在確定非線性映射函數的形式和參數、特徵空間維數等問題,而最大的障礙則是在高維特徵空間運算時存在的“維數災難”。採用核函數技術可以有效地解決這樣問題。
設x,z∈X,X屬於R(n)空間,非線性函數Φ實現輸入間X到特徵空間F的映射,其中F屬於R(m),n<<m。根據核函數技術有:
K(x,z) =<Φ(x),Φ(z) > (1)
其中:<, >爲內積,K(x,z)爲核函數。從式(1)可以看出,核函數將m維高維空間的內積運算轉化爲n維低維輸入空間的核函數計算,從而巧妙地解決了在高維特徵空間中計算的“維數災難”等問題,從而爲在高維特徵空間解決複雜的分類或迴歸問題奠定了理論基礎。
(3)核函數特點
核函數方法的廣泛應用,與其特點是分不開的:
1)核函數的引入避免了“維數災難”,大大減小了計算量。而輸入空間的維數n對核函數矩陣無影響,因此,核函數方法可以有效處理高維輸入。
2)無需知道非線性變換函數Φ的形式和參數.
3)核函數的形式和參數的變化會隱式地改變從輸入空間到特徵空間的映射,進而對特徵空間的性質產生影響,最終改變各種核函數方法的性能。
4)核函數方法可以和不同的算法相結合,形成多種不同的基於核函數技術的方法,且這兩部分的設計可以單獨進行,並可以爲不同的應用選擇不同的核函數和算法。
(4)常見核函數
核函數的確定並不困難,滿足Mercer定理的函數都可以作爲核函數。常用的核函數可分爲兩類,即內積核函數和平移不變核函數,如:
1)高斯核函數K(x,xi) =exp(-||x-xi||2/2σ2;
2)多項式核函數K(x,xi)=(x·xi+1)^d, d=1,2,…,N;
3)感知器核函數K(x,xi) =tanh(βxi+b);
4)樣條核函數K(x,xi) = B2n+1(x-xi)。
(5)核函數方法實施步驟
核函數方法是一種模塊化(Modularity)方法,它可分爲核函數設計和算法設計兩個部分,具體爲:
1)收集和整理樣本,並進行標準化;
2)選擇或構造核函數;
3)用核函數將樣本變換成爲核函數矩陣,這一步相當於將輸入數據通過非線性函數映射到高維
特徵空間;
4)在特徵空間對核函數矩陣實施各種線性算法;
5)得到輸入空間中的非線性模型。
顯然,將樣本數據核化成核函數矩陣是核函數方法中的關鍵。注意到核函數矩陣是l×l的對稱矩陣,其中l爲樣本數。
(6)核函數在模式識別中的應用
1)新方法。主要用在基於結構風險最小化(Structural Risk Minimization,SRM)的SVM中。
2)傳統方法改造。如核主元分析(kernel PCA)、核主元迴歸(kernel PCR)、核部分最小二乘法(kernel PLS)、核Fisher判別分析(Kernel Fisher Discriminator, KFD)、核獨立主元分析(Kernel Independent Component Analysis,KICA)等,這些方法在模式識別等不同領域的應用中都表現了很好的性能。