Kernal Function | 核函數(shù)

通俗易懂理解核函數(shù) in 《hands on machine learning with scikit-learn and tensorflow》

核函數(shù)的作用

某些數(shù)據(jù)在原始空間無(wú)法線性可分,可以將其映射高維空間處理昆著。
提問(wèn):如何映射省容?何種高維空間?
假設(shè):映射為Φ匀油,映射后的空間為Φ(x)
問(wèn)題:要跟不知道我們要什么樣的Φ

在高維空間中劃分超平面主要涉及 樣本xi樣本xj 之間的內(nèi)積運(yùn)算<Φ(xi),Φ(xj)>(這里具體參見(jiàn)西瓜書(shū)P126)
核函數(shù)的作用就是:k(xi,xj) = <Φ(xi),Φ(xj)>, 使得在低維空間操作xi,xj上完成高維Φ(xi),Φ(xj)想要完成的運(yùn)算缘缚。

結(jié)合上圖《hands on machine learning with scikit-learn and tensorflow》中的描述,做出個(gè)人理解:
核函數(shù)首先在samples上找1個(gè)landmark敌蚜,然后計(jì)算其他所有數(shù)據(jù)同這個(gè)landmark的核函數(shù)距離桥滨,之后將這個(gè)距離作為一個(gè)特征使用。
如要生成更多的特征弛车,那么就找更多的landmark齐媒,最多可以找到m個(gè)(m = the num of samples)

核函數(shù)是一種距離公式,它可以用來(lái)生成特征纷跛。

核函數(shù)的公式

這里只例舉高斯核函數(shù)喻括,我看過(guò)兩種表達(dá)方式,分別為高斯核贫奠、高斯徑向基函數(shù)如下:

高斯核唬血,x1x2都是樣本,σ是高斯帶寬
高斯徑向基函數(shù)RBF唤崭, l是landmark

核函數(shù)的代碼

'''
np.linalg.norm(): 默認(rèn)參數(shù)下求二范數(shù)拷恨,雙豎運(yùn)算符∥...∥ 表示Norm運(yùn)算,即取向量的‘度量’
np.subtract(a,b):a-b

---

高斯核函數(shù):k(||x-xc||)=exp{- ||x-xc||^2 / (2*σ^2) }
xc為核函數(shù)中心
σ為函數(shù)的寬度參數(shù)

---

高斯核函數(shù)圖像類似于一張紙中間隆起一塊谢肾,σ越小則越尖
'''
def calc_gaussian(x, center, width):
    return np.exp(-(np.square(np.linalg.norm(np.subtract(x, center))))/(2*np.square(width)))
for i in range(1,M):
        phi[:,i] = calc_gaussian(x,landmark[i],1) # 設(shè)置了m個(gè)landmark

核函數(shù)邏輯回歸

y = wx+b 無(wú)法完成分類腕侄,對(duì)x進(jìn)行變化,x' = k(x,l) ==> y = wx'+b 可以對(duì)x'劃分
已知x',y可以求出w,b
對(duì)new_x,進(jìn)行變化new_x'兜挨,帶入y = wx'+b膏孟,即可進(jìn)行預(yù)測(cè)
為了提高預(yù)測(cè)準(zhǔn)確性,往往會(huì)設(shè)置多個(gè)landmark求多個(gè)x'得到多個(gè)模型y = wx'+b

"""
===================================================================
Support Vector Regression (SVR) and Least Squares with Guassion Kernal
===================================================================
Source: https://github.com/JinScientist/Gaussion-Kernal-Least-Squares-Regression/
"""
print(__doc__)

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
M=20 # number of kernal function
lamda=1  #regularization coefficient
############# Linear Combination of Gaussion(LGK) kernal
def LGK(M,x,y,lamda):
    N=len(x)
    mu=np.linspace(0, 6, M)
    phi=np.zeros(shape=[N,M])
    for i in range(1,M):
        phi[:,i]=np.exp(-np.square(x-mu[i-1])/2).reshape(40,)
    phiinv=np.linalg.pinv(phi)
    w=phiinv.dot(y)
    phiT=np.transpose(phi)
    wr=np.linalg.inv(lamda*np.identity(M)+phiT.dot(phi)).dot(phiT).dot(y)
    print('Dimension of Moore-Penrose pseudo-inverse:')
    print(phiinv.shape)
    print('Dimension of y:')
    print(y.shape)
    return(w,wr)#wr:regularized w

###########predict from trained LGK
def LGKpredict(M,w,x):
    N=len(x)    
    phi=np.zeros(shape=[N,M])
    mu=np.linspace(0, 6, M)
    for i in range(1,M):
        phi[:,i]=np.exp(-np.square(x-mu[i-1])/2).reshape(40,)
    ypredict=phi.dot(w.reshape(M,1))
    return(ypredict)
# Generate sample data
X = np.sort(5 * np.random.rand(40, 1), axis=0)
y = np.sin(X).ravel()

###############################################################################
# Add noise to targets
y[::5] += 3 * (0.5 - np.random.rand(8))

###############################################################################
# Fit regression model

(w,wr)=LGK(M,X,y,lamda)
y_LGK=LGKpredict(M,w,X)
y_LGK_r=LGKpredict(M,wr,X)
np.savetxt("w.csv", w, delimiter=",")
print('Dimension of W_ML:')
print(w.shape)

svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_lin = SVR(kernel='linear', C=1e3)
svr_poly = SVR(kernel='poly', C=1e3, degree=2)
y_rbf = svr_rbf.fit(X, y).predict(X)
y_lin = svr_lin.fit(X, y).predict(X)
y_poly = svr_poly.fit(X, y).predict(X)

###############################################################################
# look at the results
lw = 1
plt.scatter(X, y, color='darkorange', label='data')
plt.hold('on')
plt.plot(X, y_rbf, color='navy', lw=lw, label='RBF model')
plt.plot(X, y_lin, color='c', lw=lw, label='Linear model')
plt.plot(X, y_poly, color='cornflowerblue', lw=lw, label='Polynomial model')
plt.plot(X, y_LGK, color='maroon', lw=lw, label='Gausian kernal \n Least square model')
plt.plot(X, y_LGK_r, color='lime', lw=lw, label='Regularized Gausian kernal \n Least square model')
plt.xlabel('data')
plt.ylabel('target')
plt.title('Gausian Kernal Least Square and Support Vector Regression')
lgd=plt.legend(bbox_to_anchor=(1.05, 1), loc=2)
plt.savefig('SVR.png',bbox_extra_artists=(lgd,), bbox_inches='tight')
Github:Gaussion-Kernal-Least-Squares-Regression
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拌汇,一起剝皮案震驚了整個(gè)濱河市柒桑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌噪舀,老刑警劉巖魁淳,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異与倡,居然都是意外死亡界逛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門纺座,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)息拜,“玉大人,你說(shuō)我怎么就攤上這事净响∩倨郏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵馋贤,是天一觀的道長(zhǎng)赞别。 經(jīng)常有香客問(wèn)我,道長(zhǎng)配乓,這世上最難降的妖魔是什么仿滔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮犹芹,結(jié)果婚禮上崎页,老公的妹妹穿的比我還像新娘。我一直安慰自己羽莺,他們只是感情好实昨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盐固,像睡著了一般荒给。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刁卜,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天志电,我揣著相機(jī)與錄音,去河邊找鬼蛔趴。 笑死挑辆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鱼蝉,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼洒嗤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了魁亦?” 一聲冷哼從身側(cè)響起渔隶,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洁奈,沒(méi)想到半個(gè)月后间唉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡利术,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年呈野,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片印叁。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡被冒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喉钢,到底是詐尸還是另有隱情姆打,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布肠虽,位于F島的核電站,受9級(jí)特大地震影響玛追,放射性物質(zhì)發(fā)生泄漏税课。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一痊剖、第九天 我趴在偏房一處隱蔽的房頂上張望韩玩。 院中可真熱鬧,春花似錦陆馁、人聲如沸找颓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)击狮。三九已至,卻和暖如春益老,著一層夾襖步出監(jiān)牢的瞬間彪蓬,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工捺萌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留档冬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像酷誓,于是被迫代替她去往敵國(guó)和親披坏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354