matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)
高維映射跟核方法的概念很容易混淆。
高維映射通過將樣本從原始空間映射到一個更高維的特征空間,從而解決了低緯下難以解決的問題。
核方法往往跟高維映射配合使用,可以看做是一種技巧,可以通過它來避免這種映射的計算。
下面詳細介紹一下這兩個概念。
一、高維映射
我們知道,線性回歸是用一條直線來擬合數(shù)據(jù)。但是我們往往會遇到數(shù)據(jù)并不服從線性分布的情況,比如:
上圖這種情況,明顯是一個二次函數(shù)的分布。如果我們?nèi)耘f用線性回歸方程
,那結(jié)果是擬合了一條直線,這條直線無論如何也不能完美擬合出這樣的二次函數(shù)的分布。于是,我們選擇變成一個二次方程來擬合:
它雖然是個二次函數(shù),其實仍然可以看成是一個線性回歸。但是現(xiàn)在不是對
的線性回歸,而是對于一個更高維度的向量 的線性回歸:令
假如把 輸入
看成是一個 1 維的向量,那么 其實就是一個關(guān)于 的,更高維度的向量。我們把這種能夠把一個向量提升維度的函數(shù),叫做 , 。直觀上來講,在應(yīng)用了 以后,向量 被拉長了,所以我們把它叫做拉伸函數(shù)好了。拉伸函數(shù)是一類函數(shù),表面上看,只要是能把一個向量經(jīng)過各種修改讓它的維度變高,這樣的函數(shù)都能當(dāng)成拉伸函數(shù)來用。然而并不是這樣的,假如你只是單純地對向量
的分量做線性組合,你會發(fā)現(xiàn)實際上并沒有提升它的空間,比如我設(shè)計一種純線性組合的拉伸的函數(shù):將
拉伸為 ,那么 ,那么對于提升后的方程,
,乍一看是把2維提升到了4維。其實通過變換以后,相當(dāng)于還是在對 做線性組合。要選擇確確實實提升了維度的拉伸函數(shù)。而且,我們的拉伸函數(shù)得把原來向量的每個維度都得照顧到。這里分布是一個二次函數(shù),如果我們遇到了更加復(fù)雜的函數(shù),我們依然可以通過選取合適的拉伸函數(shù)來變成線性的問題。幸運的是可以證明,只要數(shù)據(jù)的分布在維度有限的空間上,我們總是(發(fā))能夠找到一個更高維度的空間,使得它的分布是線性的。
因此通過高維映射以后,不管原來是不是線性的,總能通過對向量
做拉伸變化,轉(zhuǎn)化成一個高維空間里的線性的回歸問題:二、求解高維映射后的線性方程
如果不做高維映射的話,線性回歸的解是:
不明白的可以看看我另外一篇的講線性回歸的,里面包含了推導(dǎo)過程。
折射:線性回歸Linear regression?zhuanlan.zhihu.com我舉個例子,幫助你回憶一下里面各個符號的含義。假設(shè)我們有5個訓(xùn)練樣本
,每個樣本的有2個維度公式中的
就是把所有訓(xùn)練集拼成的矩陣,每行代表一個訓(xùn)練樣本。 是一個對角全為 1 ,其他位置全是0的單位矩陣, 是每個樣本輸出值拼成的一個向量:如果我們要對這個公式進行高維映射,也就是說我們對
里的每個樣本,也就是每一行的向量都進行了拉伸變換,像這樣,我們把拉伸過后的函數(shù)叫做 :我們用
替換公式里的 ,從而得到:好了,右邊全都是已知量,我們已經(jīng)解出來了這個模型了。
我們做完高維映射之后的線性方程,要如何去預(yù)測模型呢?來模擬一下這個過程:
假設(shè),我們現(xiàn)在有
個訓(xùn)練數(shù)據(jù),每個數(shù)據(jù)是 維的。第一步,我們得計算出
來。首先把每個數(shù)據(jù)當(dāng)成一行,拼成一個矩陣
。然后把矩陣的每一行用拉伸函數(shù)做拉伸,從而得到 ,最后再套公式求得 :第二步,下面我們就來利用它做預(yù)測了,假如我們要預(yù)測
的輸出值 ,我們又得先對變量 做一次拉伸,得到 ,再乘上權(quán)重,才能求出它的預(yù)測值 :看看上面的過程中,我們用了多少次拉伸函數(shù)。在訓(xùn)練過程中,我們對訓(xùn)練集里面每個樣本都用了一次拉伸。在預(yù)測的時候,我們又要對預(yù)測集里面的每個樣本做一次拉伸。現(xiàn)在我告訴你,拉伸函數(shù)往往計算量非常大,那么計算這個拉伸顯然是一個非常大的開銷。
雖然說理論上,因為有限維度的數(shù)據(jù)必然存在一個拉伸函數(shù)將數(shù)據(jù)映射到高維并且滿足線性分布。也就是說必然存在一個完美的拉伸函數(shù)。然而,我們往往并不知道到底怎么樣的函數(shù)才是完美的拉伸函數(shù),選擇合適的拉伸函數(shù)也是一個非常麻煩的問題。
現(xiàn)在我告訴你,我們有一種取巧的辦法。使得我們根本不用計算拉伸函數(shù),有時候甚至你都不需要知道拉伸函數(shù)是什么,我們依然能夠做預(yù)測。這個無比巧妙的簡便方法,幫助我們跳過了拉伸的步驟,這個方法就叫做核方法。
三、核函數(shù)(Kernel function)
你可能非常迫切地想知道這個巧妙的核方法到底是什么。但是我要在這里賣個關(guān)子,不直接告訴你核方法是怎么來的,我們從定義出發(fā)一步一步慢慢推導(dǎo)出來。
現(xiàn)在我要轉(zhuǎn)換一下話題,我們先研究研究這個拉伸函數(shù)
。我們給它搭配一個“兄弟”,假設(shè)向量 是某個跟 同樣維度的某個向量,我們對 也同樣做拉伸。并且拉伸完之后,我們把這兩個向量求內(nèi)積。我們知道,兩個向量做內(nèi)積得到的是一個值。這個過程中,我們先是把兩個向量拉伸到高維,然后又通過求內(nèi)積變回一維。
在數(shù)學(xué)里面,有這樣一類函數(shù),它的參數(shù)是2個向量,它的輸出是一個標(biāo)量值。它有個特點,就是對于任何相同形狀的輸入向量
,它總能改寫成這樣的形式:解釋一下,這類函數(shù)對于任何輸入向量
,它都能改寫成分別對兩個輸入向量做拉伸以后再求內(nèi)積的表達形式。這類核函數(shù)每個都有各自的表達式,舉個例子:
線性核:
多項式核:
注意到,這個表達式里面是不含有拉伸函數(shù)的。但是它既然滿足核函數(shù)的條件,它一定是能改寫成兩個向量拉伸求內(nèi)積的形式。
線性核里面隱藏的變換就是做線性拉伸變換(我們之前討論過,光用線性拉伸是不能解決非線性問題的)。多項式核自然就是做幾次方的拉伸變換。換句話說,每一個能被叫做核函數(shù)的函數(shù),里面都藏著一個對應(yīng)拉伸的函數(shù)。這些核函數(shù)的命名通常也跟如何做拉伸變換有關(guān)系。
總結(jié)一下,我們現(xiàn)在反了過來,先找滿足核函數(shù)條件的的表達式,再倒推出一種映射關(guān)系。我們選哪個核函數(shù),實際上就是在選擇用哪種方法映射。通過核函數(shù),我們就能跳過映射的過程。
四、核方法(Kernel method)
好了,現(xiàn)在我們打定主意,要利用核函數(shù)來跳過做映射了。我們假如找到了一個核函數(shù),也就是說我們的拉伸函數(shù)也定下來了。我們改寫一下核函數(shù)的參數(shù),寫成這樣的形式:
到底要怎么利用呢?先觀察一下高維映射以后的模型表達式:
觀察一下上面兩個公式,你一定能夠聯(lián)想到,肯定要從這個
上面做點文章。沒錯,我們現(xiàn)在就是要想辦法從 里面分離出一個 項來,跟我們的 搭配在一起組成我們的核函數(shù)的表達式。先看看
的計算公式:在這里跟拉伸項最有關(guān)系的一項就是
了,注意這里全都是在做線性組合,我們我們可以令
,這里的 我們不知道是什么東西,只知道它是一個向量。使用
有什么好處呢?試著把它展開一下,矩陣乘向量的怎么寫成求和的形式呢。其實矩陣右乘一個向量,相當(dāng)于對矩陣的每一列都乘對于向量位置的分量再累加,如圖所示:
矩陣
是轉(zhuǎn)置過的,它的每一列代表一個訓(xùn)練數(shù)據(jù),為了避免混淆,我們用 表示第n個訓(xùn)練數(shù)據(jù),可以表示為:用右邊這個替換我們模型里面的
:看到?jīng)]有,我們右邊已經(jīng)出現(xiàn)了一個核函數(shù)的表達形式了。我們可以直接根據(jù)公式
來替換右邊,從而得到:現(xiàn)在的y表達式中,已經(jīng)不含有拉伸函數(shù)項了,這樣我們就避開了求拉伸函數(shù)的過程。
但是你會發(fā)現(xiàn),我們并不知道
是什么,現(xiàn)在我們就來求這個 。我們得從求
的表達式開始了,假設(shè)我們用最小二乘法做,首先從損失函數(shù)開始,同時加入了L2正則項:如果加了L2正則以后的線性損失函數(shù)的公式看不懂,可以去看我寫的 機器學(xué)習(xí)中的正則化,L1 L2正則。 令
,將 代入到函數(shù)中:求關(guān)于
的偏導(dǎo),并且等于0,可得:解得:
再看
現(xiàn)在我們把所有的拉伸函數(shù)都消除掉了。我們現(xiàn)在就可以用求出來的
來做預(yù)測,使用之前我們推出來的公式:五、總結(jié)
在使用機器學(xué)習(xí)模型做回歸或者分類的時候,假如在低維度空間下數(shù)據(jù)集不好用,那么可以嘗試通過把輸入的值做高維映射來解決。高維映射不僅僅用于線性回歸,包括邏輯回歸,還有SVM,尤其是SVM。
由于做高維映射的計算量比較大。當(dāng)我們遇到需要做高維映射的時候
,可以通過核方法,把需要學(xué)習(xí)的模型配出一項來組成 的形式,然后用一個核函數(shù) 來替換它,從而消除掉把低維向量往高維映射的過程。這種替換的技巧就叫做核方法,能夠?qū)崿F(xiàn)替換目的的函數(shù)叫做核函數(shù)。利用核方法并非沒有缺點。原來的線性模型顯然是一種參數(shù)化方法,好處是訓(xùn)練完成的模型只需要存儲權(quán)重向量
。然而在使用了核方法以后,由于我們用訓(xùn)練集替換掉了權(quán)重項,因此相當(dāng)于轉(zhuǎn)化成了非參數(shù)化的方法,顯然增加了需要存儲的數(shù)據(jù)量,同時每一次做預(yù)測都需要用到全部訓(xùn)練數(shù)據(jù)集。對于參數(shù)化和非參數(shù)化方法的概念可以看我的另外一篇文章:折射:機器學(xué)習(xí)中的正則化,L1 L2正則?zhuanlan.zhihu.com原創(chuàng),轉(zhuǎn)載請注明出處。
初學(xué)者,不可避免出現(xiàn)錯誤。如果有任何問題,歡迎指正。也歡迎一起交流、討論。
歡迎關(guān)注我的專欄:
https://zhuanlan.zhihu.com/c_1024970634371186688?zhuanlan.zhihu.com總結(jié)
以上是生活随笔為你收集整理的matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle多条件分组统计_多条件统计,
- 下一篇: 我的世界简易水电梯制作