Radial Basis Function Network

RBF Network

前面的一篇SVM中田轧,最后的分割函數(shù):

使用高斯核函數(shù)方式把數(shù)據(jù)維度擴(kuò)展到無(wú)限維度進(jìn)而得到一條粗壯的分界線慢逾。仔細(xì)看一下這個(gè)分割函數(shù),其實(shí)就是一些Gaussian函數(shù)的線性組合劫瞳,y就是增長(zhǎng)的方向刑棵。
Gaussian函數(shù)還有另外一個(gè)叫法——徑向基函數(shù),這是因?yàn)檫@個(gè)base function的結(jié)果只和計(jì)算這個(gè)x和中心點(diǎn)xn的距離有關(guān)狠鸳,與其他的無(wú)關(guān)。
從其他方面來(lái)看SVM悯嗓,先構(gòu)造一個(gè)函數(shù):

指數(shù)求出來(lái)的其實(shí)就是x點(diǎn)和中心點(diǎn)的相似度件舵,相似度越高,那么=晚y這個(gè)方向投票的票數(shù)就會(huì)越多脯厨。不同的g(x)有不同的權(quán)重铅祸,他們的線性組合就成了SVM,g(x)函數(shù)稱為是radial function合武。所以Gaussian SVM就是把一些radial function聯(lián)合起來(lái)做linear aggregation临梗。

RBF Network就是SVM的延伸,目的就是找到所有radial hypotheses的linear aggregation稼跳,得到更好的網(wǎng)絡(luò)模型盟庞。

可以看到這兩種網(wǎng)絡(luò)其實(shí)很類似,Neural Network的隱藏層是權(quán)值和數(shù)據(jù)做內(nèi)積非線性轉(zhuǎn)換再uniform的組合得到最后的輸出汤善,而對(duì)于RBF Network隱藏層是求高斯距離在做aggregation的方法什猖。比較大的不同點(diǎn)就在于hidden層的不同了。


β就是每一個(gè)radial function的權(quán)值红淡,μ就是中心點(diǎn)坑律,m為中心點(diǎn)的個(gè)數(shù)滞造,主要的潭袱,對(duì)比一下之前的SVM磨确,β就是αy,μ就是支持向量颈渊。由于是一個(gè)分類問(wèn)題遂黍,所以最后的output function就是sign函數(shù)了终佛。

之前講過(guò)俊嗽,一個(gè)核函數(shù)不是隨便亂選的雾家,要滿足兩個(gè)條件:對(duì)稱,半正定绍豁。對(duì)于SVM里面的核函數(shù)芯咧,其實(shí)ius把當(dāng)前的數(shù)據(jù)提升到某一個(gè)很高很高的維度,然后做切片把數(shù)據(jù)分出來(lái)竹揍,polynomial function也是一樣的敬飒,只不過(guò)是有限維度的。而RBF其實(shí)就是在當(dāng)前的空間做相似度處理芬位,而那些kernel其實(shí)就是轉(zhuǎn)換到z空間來(lái)計(jì)算核函數(shù)以表征兩個(gè)向量的相似度无拗。所以RBF和kernel都是衡量相似度的方式。雖然SVM和RBF Network都很相似昧碉,甚至可以說(shuō)最后的決策函數(shù)基本一致的英染,但是他們的學(xué)習(xí)過(guò)程是很不一樣的,一個(gè)是直接x空間被饿,一個(gè)是轉(zhuǎn)換到z空間四康。

衡量相似性并不止一種RBF方法,余弦相似度這些也可以衡量向量之間的相似度狭握。

回過(guò)頭來(lái)思考一下SVM闪金,其實(shí)支持向量機(jī)就是先通過(guò)凸優(yōu)化的一些方法找到有投票權(quán)利的點(diǎn),之后給出相應(yīng)的權(quán)值论颅,最后決策就是這些有投票權(quán)利的點(diǎn)進(jìn)行決策哎垦;對(duì)于其他線性模型,其實(shí)主要的不同就是他們每一個(gè)點(diǎn)都有投票的權(quán)利恃疯,這就導(dǎo)致很遠(yuǎn)的點(diǎn)都會(huì)干擾到邊界撼泛。而RBF Network事實(shí)上做的事情和SVM有點(diǎn)像,因?yàn)镽BF函數(shù)是指數(shù)增長(zhǎng)澡谭,如果這個(gè)點(diǎn)很遠(yuǎn)的話會(huì)非常小愿题,近乎就是0了,所以也起到了弱化遠(yuǎn)的點(diǎn)投票權(quán)蛙奖,強(qiáng)化近的點(diǎn)投票權(quán)的能力潘酗。

RBF Network Learning

RBF Network的決策函數(shù):


μ就是中心點(diǎn),中心點(diǎn)是自己選擇的雁仲。有一種選擇中心點(diǎn)的方法仔夺,就是所有的點(diǎn)都作為中心點(diǎn),那么每一個(gè)樣本對(duì)于預(yù)測(cè)都會(huì)有影響攒砖,β就是影響的程度缸兔。如果影響的程度都是一樣的日裙,那么就是1了,β = 1*y惰蜜,最后相乘做uniform aggregation之后sign得到結(jié)果昂拂。這種我們稱為full RBF Network。

這個(gè)時(shí)候抛猖,full RBF Network就可以表示為:

這是一個(gè)指數(shù)函數(shù)格侯,距離越遠(yuǎn),那么衰減的就越快财著,x與中心點(diǎn)的距離越近那么就越大联四,距離越遠(yuǎn)就越小。也就是說(shuō)撑教,如果我們的樣本點(diǎn)是N個(gè)朝墩,那么起了關(guān)鍵作用的一般就是最近的那個(gè)點(diǎn)而已,當(dāng)然伟姐,不一定是最近的一個(gè)點(diǎn)收苏,可以是最近的K個(gè)點(diǎn),用這k個(gè)點(diǎn)來(lái)代替N個(gè)點(diǎn)玫镐,當(dāng)前的點(diǎn)周圍最近的k個(gè)點(diǎn)哪個(gè)類別最多倒戏,那么這個(gè)當(dāng)前這個(gè)點(diǎn)就是屬于哪個(gè)類別的。這種算法就叫K近鄰算法恐似。

k nearest neighbor通常比nearest neighbor model效果更好杜跷,計(jì)算量上也比f(wàn)ull RBF Network要簡(jiǎn)單一些。值得一提的是矫夷,k nearest neighbor與full RBF Network都是比較“偷懶”的方法葛闷。因?yàn)樗鼈冊(cè)谟?xùn)練模型的時(shí)候比較簡(jiǎn)單,沒(méi)有太多的運(yùn)算双藕,但是在測(cè)試的時(shí)候卻要花費(fèi)更多的力氣淑趾,甚至可以說(shuō)是幾乎沒(méi)有運(yùn)算在里面,只需要做一些簡(jiǎn)單的數(shù)據(jù)處理即可忧陪,找出最相近的中心點(diǎn)扣泊,計(jì)算相對(duì)復(fù)雜一些。
如果是做回歸問(wèn)題嘶摊,我們就只需要去掉output:

很明顯延蟹,這樣就是一個(gè)線性回歸的問(wèn)題了,每一個(gè)RBF 其實(shí)可以看做就是一個(gè)矩陣比如第一個(gè)元素x1叶堆,那么經(jīng)過(guò)RBF的轉(zhuǎn)換之后:

那么Z就是z的按列排序了阱飘,按照線性回歸的解公式:

上述矩陣Z是一個(gè)方陣,大小是N,有多少個(gè)中心點(diǎn)那么就有多少個(gè)N沥匈。如果每一個(gè)x都是不一樣的蔗喂,那么這個(gè)矩陣就是可以逆的矩陣了,畢竟x是訓(xùn)練數(shù)據(jù)高帖,一樣的就沒(méi)有意義了缰儿。

化簡(jiǎn)一下:

我們以x1為例子,那么解就是:

這個(gè)結(jié)果對(duì)于我們來(lái)說(shuō)非常奇怪棋恼,如果這樣的話那么對(duì)于所有的x都有:
所有Ein = 0返弹,這樣對(duì)于機(jī)器學(xué)習(xí)來(lái)說(shuō)并不是一個(gè)好事情锈玉,因?yàn)檫@樣很大概率會(huì)出現(xiàn)過(guò)擬合爪飘。當(dāng)然,某些情況下還是很有用的拉背,比如函數(shù)擬合或者是做autoencode师崎。

為了避免過(guò)擬合,使用ridge regression的方法:


L2范式正則化椅棺。Z矩陣是由一系列Gaussian函數(shù)組成犁罩,每個(gè)Gaussian函數(shù)計(jì)算的是兩個(gè)樣本之間的distance similarity。這里的Z與之前我們介紹的Gaussian SVM中的kernel K是一致的两疚。當(dāng)時(shí)使用ridge regression得到的解:

比較一下kernel ridgeregression與regularized full RBF Network的β解床估,形式上相似但不完全相同。這是因?yàn)閞egularization不一樣诱渤,在kernel ridgeregression中丐巫,是對(duì)無(wú)限多維的特征轉(zhuǎn)換做regularization,而在regularized full RBF Network中勺美,是對(duì)有限維(N維度)的特征轉(zhuǎn)換做regularization递胧。因此,兩者的公式解有細(xì)微差別赡茸。

對(duì)于解決過(guò)擬合缎脾,還有另外的一種方法,可以選擇K個(gè)具有代表性的點(diǎn)來(lái)代表這N個(gè)點(diǎn)占卧,這樣減少了中間點(diǎn)減少了權(quán)重的數(shù)量遗菠,VC維就減少了,可以起到regularization的作用华蜒。

原本的問(wèn)題是求解中心點(diǎn)μ辙纬,β權(quán)重,現(xiàn)在β可以通過(guò)回歸求解友多,那么只需要求μ了牲平。

K Mean Algorithm

選擇代表的原因,就是因?yàn)檫@些點(diǎn)有很高的相似性域滥,所以可以使用一個(gè)中心點(diǎn)來(lái)代表纵柿,從所有的點(diǎn)中選擇幾個(gè)有代表性的點(diǎn)蜈抓。


首先聚類算法是一種非監(jiān)督的算法,不需要有l(wèi)abel昂儒。需要確定的一般就是兩個(gè)變量沟使,分群值Sm,沒(méi)一個(gè)分類可以表示為S1,S2,S3,S4...Sm渊跋,另一個(gè)就是中心值μm腊嗡,μ1,μ2拾酝,μ3燕少,μ4...μm,每一個(gè)分群就對(duì)應(yīng)著中心蒿囤,要求的就是這個(gè)中心客们。對(duì)于這類問(wèn)題的優(yōu)化,就可以使用square error function了材诽。優(yōu)化的步驟也是一樣底挫,求導(dǎo),梯度下降或者梯度為0求最優(yōu)值解脸侥。

剛剛也說(shuō)過(guò)了建邓,既然是衰減的形式,那么只需要取最大的就好了睁枕,最大也就意味著這需要求距離最近的即可官边。所以,表達(dá)式里面只有屬于這個(gè)類別的數(shù)據(jù)求error譬重。
最后就是求導(dǎo)做優(yōu)化了:

兩個(gè)變量組合的優(yōu)化問(wèn)題拒逮,通常的方法就是對(duì)這兩個(gè)變量分別求。仔細(xì)觀察一下這兩個(gè)變量臀规,可以發(fā)現(xiàn)滩援,只要確定了μ,就可以確定S塔嬉;或者只要確定了S玩徊,求個(gè)平均也可以得到μ。所以假設(shè)μ已經(jīng)是固定的了谨究,那么可以依次迭代x恩袱,和哪個(gè)μ的距離最小就屬于哪個(gè)類別。

如果類別S是確定的胶哲,那么目標(biāo)就是找到對(duì)應(yīng)的μ中心點(diǎn)畔塔,顯然這個(gè),求個(gè)導(dǎo)的事,梯度下降就可以解決了澈吨。

所以這就成了一個(gè)雞生蛋蛋生雞的問(wèn)題把敢,所以一般一開始我們會(huì)選擇隨機(jī)的幾個(gè)點(diǎn)作為中心μ,然后按照上訴步驟優(yōu)化谅辣。

優(yōu)化有結(jié)果嗎修赞?

這個(gè)優(yōu)化的過(guò)程好像有些不一樣,求導(dǎo)等于0應(yīng)該是直接求出了最優(yōu)的解桑阶,linear regression就是這個(gè)道理柏副,但是為什么要一直這樣迭代呢?這是因?yàn)榍蟪鰜?lái)的這個(gè)μ并不是一個(gè)全局的μ蚣录,只是在當(dāng)前對(duì)于每一個(gè)群S的一個(gè)最優(yōu)割择,但是這個(gè)S并不是最優(yōu)的,之前也說(shuō)了:這個(gè)S和μ是互相牽制的包归,雞生蛋蛋生雞的問(wèn)題锨推,S可以得到μ铅歼,μ也可以得到S公壤。所以整個(gè)過(guò)程通俗點(diǎn)就是通過(guò)μ求局部最優(yōu)的S,通過(guò)S有球局部的最優(yōu)μ椎椰,不斷的迭代厦幅,慢慢的跑到全局。但是也沒(méi)有可以跑到局部呢慨飘?這個(gè)是有可能的确憨,這于初值有關(guān),所以Kmean均值算法也是一個(gè)初值敏感的算法瓤的。對(duì)于局部這個(gè)問(wèn)題休弃,有一種解法就是可以合并最近的幾個(gè)質(zhì)心。事實(shí)上如果中心比較小圈膏,比如3個(gè)這樣塔猾,一般都不會(huì)有局部出現(xiàn),因?yàn)?img class="math-block" src="https://math.jianshu.com/math?formula=%5Csum_%7Bm%3D1%7D%5EM(x_n%20-%20%CE%BC_m)%5E2" alt="\sum_{m=1}^M(x_n - μ_m)^2" mathimg="1">不會(huì)這么的彎曲稽坤。
停止是一定的丈甸,因?yàn)闊o(wú)論是通過(guò)S優(yōu)化μ還是μ優(yōu)化S都朝Ein = 0為目的,如果Ein增加了是不會(huì)繼續(xù)的尿褪,所以最后一定會(huì)到達(dá)一個(gè)平衡點(diǎn)睦擂。

The process of the RBF Network

既然中心有其他算法可以幫忙解決了,那么整個(gè)算法也就清晰了:



求解優(yōu)化的過(guò)程中杖玲,可以使用validation來(lái)求解最優(yōu)的λ和M顿仇。


RBF Network and KMeans in action


k值的大小和初始位置的不同都會(huì)影響聚類的結(jié)果。
把這些機(jī)構(gòu)k均值使用到RBF里面:




對(duì)于正則化也有不同的影響。

coding

KMeans

接下來(lái)就是代碼實(shí)現(xiàn)KMeans算法了臼闻。KMeans算法其實(shí)很簡(jiǎn)單跪帝,首先隨機(jī)得到幾個(gè)中心點(diǎn),根據(jù)中心點(diǎn)預(yù)測(cè)做聚類算法即可些阅。

def loadDataSet():
    '''loading data......'''
    data = dataSet.load_iris()
    dataset = data.data
    target = data.target
    PCA = pca.PCA(n_components=2)
    dataset = PCA.fit_transform(dataset)
    return np.mat(dataset), np.mat(target)
    pass

加載數(shù)據(jù)伞剑,iris數(shù)據(jù)集進(jìn)行降維操作便于可視化。

def distEclud(vecA, vecB):
    '''calculate the distance from vecA to vecB'''
    return np.sqrt(np.sum(np.power(vecA - vecB, 2)))
    pass

def randCent(dataSet, k):
    '''create the center'''
    n = np.shape(dataSet)[1]
    centroids = np.mat(np.zeros((k, n)))
    for j in range(n):
        minJ = np.min(dataSet[:, j])
        rangeJ = float(max(dataSet[:, j]) - minJ)
        centroids[:, j] = minJ + rangeJ * np.random.rand(k, 1)
    return centroids

計(jì)算距離市埋,隨機(jī)選擇中心點(diǎn)黎泣。隨機(jī)選擇中心點(diǎn)這里是先計(jì)算了每一個(gè)維度的范圍,之后在這個(gè)范圍里面隨機(jī)選擇缤谎。

def KMeans(dataSet, k, distMeas = tool.distEclud, createCent = tool.randCent):
    '''KMeans Algorithm is running......'''
    m = np.shape(dataSet)[0]
    clusterAssment = np.mat(np.zeros((m, 2)))
    centroids = createCent(dataSet, k)
    clusterChanged = True
    while clusterChanged:
        clusterChanged = False
        for i in range(m):
            minDist = np.inf
            minIndex = -1
            for j in range(k):
                distJI = distMeas(centroids[j,:], dataSet[i,:])
                if distJI < minDist:
                    minDist = distJI
                    minIndex = j
            if clusterAssment[i, 0] != minIndex:
                clusterChanged = True
            clusterAssment[i, :] = minIndex, minDist**2
        for cent in range(k):
            ptsInClust = dataSet[np.nonzero(clusterAssment[:, 0].A == cent)[0]]
            centroids[cent, :] = np.mean(ptsInClust, axis=0)
    dataFrame = pd.DataFrame(data=np.hstack((dataSet, clusterAssment[:,0])))
    return dataFrame, centroids

選擇和calculate distance的算法都是動(dòng)態(tài)的方式抒倚,便于以后的改進(jìn)。整個(gè)過(guò)程也比較簡(jiǎn)單坷澡,離哪個(gè)近就屬于哪個(gè)類別托呕。

RBF Network

①獲取中心點(diǎn)

_,center = kMeans.KMeans(np.mat(x_train), k)

剛剛寫好的KMeans就是這個(gè)作用。

②計(jì)算β值

beta = rbf(x_train, center, y_train, gama=gamma, lamda=lamda)

rbf函數(shù)的實(shí)現(xiàn):

def rbf(x_train, center, y_train, gama = 0.001, lamda = 0.01):
    M = center.shape[0]
    N = len(x_train)
    Z = np.zeros((M, N))
    for i in range(M):
        for j in range(N):
            Z[i][j] = Gaussian(x_train[j], center[i], gama)
    I1 = np.eye(N, k = 0)
    beta = np.linalg.inv(np.dot(Z.T, Z) + lamda * I1)
    beta = np.dot(beta, Z.T)
    y_train = np.mat(y_train)
    beta = np.dot(y_train, beta)
    return beta
    pass
def Gaussian(vecA, vecB, gama):
    x_x = np.abs(np.sum(vecA - vecB))
    x_x_2 = np.power(x_x, 2)
    return np.exp(-1.0 * gama * x_x_2)
    pass

首先是計(jì)算Z矩陣频敛,就是φ(x)的矩陣项郊。其實(shí)就是和上面步驟一模一樣的,使用的是線性回歸斟赚,β = (Z^TZ + λI)^{-1}Z^Ty使用直接就可以算着降,要是邏輯回歸也是一樣。

③預(yù)測(cè)

def predict(beta, x_train, center, gama):
    result = []
    for x in x_train:
        x = np.mat(x)
        sum = 0
        for i, vecB in enumerate(center):
            sum += beta[0,i]*Gaussian(x, vecB, gama)
        result.append(sum)
    return result
    pass

為了方便調(diào)用拗军,整合成一個(gè)函數(shù):

def RBF(y_test, x_test, y_train, x_train, gamma = 0.001, lamda = 0.01, k = 4):
    Again = True
    while Again == True:
        _,center = kMeans.KMeans(np.mat(x_train), k)
        beta = rbf(x_train, center, y_train, gama=gamma, lamda=lamda)
        Again = False
        for i in range(beta.shape[1]):
            if np.isnan(beta[0, i]):
                Again = True
    result = predict(beta, x_train, center, gamma)
    for i in range(len(result)):
        if result[i] > 0:
            result[i] = 1
        else:
            result[i] = -1
    posibility = 0
    for i in range(len(result)):
        if result[i] == y_train[i]:
            posibility += 1
    train_accuracy = posibility/len(result)
    result = predict(beta, x_test, center, gamma)

    for i in range(len(result)):
        if result[i] > 0:
            result[i] = 1
        else:
            result[i] = -1
    posibility = 0
    for i in range(len(result)):
        if result[i] == y_test[i]:
            posibility += 1
    test_accuracy = posibility/len(result)
    return train_accuracy, test_accuracy

可以計(jì)算不同gamma任洞,lamda,k的影響发侵。

④獲取數(shù)據(jù)

def load_data():
    data = dataset.load_breast_cancer().data
    target = dataset.load_breast_cancer().target
    for i in range(len(target)):
        if target[i] == 0:
            target[i] = -1
    x_train, x_test, y_train, y_test = train_test_split(data, target, random_state=42, shuffle=True, test_size=0.4)
    return x_train, x_test, y_train, y_test
    pass

⑤啟動(dòng)函數(shù)

if __name__ == '__main__':
    x_train, x_test, y_train, y_test = load_data()
    gamma = [1,0.1,0.01,0.001,0.0001]
    lamda = gamma
    train_accuracy = []
    test_accutacy = []
    c = ['red', 'blue', 'orange', 'green', 'yellow', 'black']
    for n, i in enumerate(gamma):
        for j in lamda:
            train, text = RBF(x_test=x_test, y_test=y_test, x_train=x_train, y_train=y_train, gamma=i, lamda=j)
            print('gama : ',i, ' lamda : ', j, ' train_accuracy : ', train, ' text_accuray : ', text)
            train_accuracy.append(train)
            test_accutacy.append(text)
        plt.plot(lamda, train_accuracy, c = c[n], label = 'gamma:'+str(i) + ' (train)')
        plt.plot(lamda, test_accutacy, c = c[n], linestyle='--', label = 'gamma:'+str(i) + ' (test)')
        plt.xlabel('lambda')
        plt.ylabel('accuracy')
        plt.legend(loc = 'upper right')
        train_accuracy = []
        test_accutacy = []
    plt.show()

    for n, i in enumerate(lamda):
        for j in gamma:
            train, text = RBF(x_test=x_test, y_test=y_test, x_train=x_train, y_train=y_train, gamma=j, lamda=i)
            print('lamda : ',i, ' gama : ', j, ' train_accuracy : ', train, ' text_accuray : ', text)
            train_accuracy.append(train)
            test_accutacy.append(text)
        plt.plot(gamma, train_accuracy, c = c[n], label = 'lamda:'+str(i) + ' (train)')
        plt.plot(gamma, test_accutacy, c = c[n], linestyle='--', label = 'lamda:'+str(i) + ' (test)')
        plt.xlabel('gamma')
        plt.ylabel('accuracy')
        plt.legend(loc = 'upper right')
        train_accuracy = []
        test_accutacy = []
    plt.show()

    ks = [2,3,4,5,6,7]
    train_accuracy = []
    test_accutacy = []
    for i in range(6):
        for n, i in enumerate(ks):
            train, text = RBF(x_test=x_test, y_test=y_test, x_train=x_train, y_train=y_train, gamma=0.0001, lamda=0.01, k=i)
            print('k == ' + str(i))
            train_accuracy.append(train)
            test_accutacy.append(text)
        plt.plot(ks, train_accuracy, c = c[n], label = 'train')
        plt.plot(ks, test_accutacy, c = c[n], linestyle='--', label = 'test')
        plt.xlabel('the number of k')
        plt.ylabel('accuracy')
        plt.legend(loc = 'upper left')
        plt.show()
        train_accuracy = []
        test_accutacy = []
    pass

效果的討論

在運(yùn)行函數(shù)得到結(jié)果后進(jìn)行分析交掏。

①當(dāng)γ固定了,看看lamda變化對(duì)于結(jié)果的影響刃鳄。



其實(shí)還是很正常的盅弛,隨著gamma的減少,準(zhǔn)確率慢慢提上去了铲汪,虛線的測(cè)試數(shù)據(jù)熊尉,直線是準(zhǔn)確率。Gaussian函數(shù):γ越小掌腰,就相當(dāng)于σ變大狰住,高斯函數(shù)的標(biāo)準(zhǔn)差變大那么這個(gè)函數(shù)就會(huì)變的更加平滑,泛化能力會(huì)很強(qiáng)齿梁。其實(shí)就是regularization的過(guò)程催植。
觀察上圖是可以得到λ對(duì)于整體的影響不會(huì)太大肮蛹。基本是平緩的创南。

②當(dāng)λ固定了伦忠,看看γ變化對(duì)于結(jié)果的影響。



γ越小效果越好稿辙,但是如果γ非常小昆码,那么λ對(duì)于模型的影響幾乎是沒(méi)有影響。

③對(duì)于k的數(shù)量和準(zhǔn)確率的討論

效果不太穩(wěn)定邻储,我多做了幾次赋咽。







效果非常非常不穩(wěn)定桩了,我之前懷疑是線性回歸的解不穩(wěn)定的緣故一忱,之前學(xué)習(xí)到病態(tài)矩陣典徘,也就是近似奇異矩陣的矩陣牛郑,而regularization L2正則化就是為了使得病態(tài)矩陣轉(zhuǎn)換成正常矩陣,所以增大了λ胸嘴,顯然并沒(méi)有什么卵用绪杏。雖然整體效果不錯(cuò)轮锥。上面的結(jié)果就已經(jīng)是λ增大的結(jié)果了勾扭。

所以最后還有兩個(gè)問(wèn)題沒(méi)有解決毡琉,一個(gè)就是λ為什么對(duì)于模型的影響很很小,另一個(gè)上面沒(méi)有提到尺借,為什么測(cè)試數(shù)據(jù)的準(zhǔn)確率會(huì)大于訓(xùn)練數(shù)據(jù)的準(zhǔn)確率绊起?這還打的明顯,不知道是不是沒(méi)有做交叉驗(yàn)證的結(jié)果燎斩,因?yàn)閼小7湟铩Uけ怼!V翱吹降慕忉屖牵?/h4>

如果程序很好的實(shí)現(xiàn)了模型师枣,那么就是模型不適合你的數(shù)據(jù)怪瓶,因?yàn)檫@表明存在如下問(wèn)題:每次訓(xùn)練,都使得訓(xùn)練之后的模型對(duì)測(cè)試的 1折效果很好践美,而對(duì)用于訓(xùn)練的9折效果慘淡洗贰,也就是模型落入了局部極值點(diǎn)而非全局極值點(diǎn)。這很有可能是模型在具體數(shù)據(jù)下的失效問(wèn)題陨倡。

但是這個(gè)問(wèn)題已經(jīng)重復(fù)過(guò)了很多次敛滋,一直在使用test_train_split區(qū)分,同時(shí)也有shuffle兴革。事實(shí)上在γ比較小的時(shí)候绎晃,測(cè)試數(shù)據(jù)就超過(guò)了訓(xùn)練數(shù)據(jù)的準(zhǔn)確率蜜唾,上面γ的變化可以看到。

最后附上GitHub代碼:https://github.com/GreenArrow2017/MachineLearning/tree/master/MachineLearning/RBFNetwork

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庶艾,一起剝皮案震驚了整個(gè)濱河市袁余,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咱揍,老刑警劉巖颖榜,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異煤裙,居然都是意外死亡朱转,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門积暖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)藤为,“玉大人,你說(shuō)我怎么就攤上這事夺刑∶迮保” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵遍愿,是天一觀的道長(zhǎng)存淫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沼填,這世上最難降的妖魔是什么桅咆? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮坞笙,結(jié)果婚禮上岩饼,老公的妹妹穿的比我還像新娘。我一直安慰自己薛夜,他們只是感情好籍茧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梯澜,像睡著了一般寞冯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晚伙,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天吮龄,我揣著相機(jī)與錄音,去河邊找鬼咆疗。 笑死漓帚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的民傻。 我是一名探鬼主播胰默,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼场斑,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了牵署?” 一聲冷哼從身側(cè)響起漏隐,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奴迅,沒(méi)想到半個(gè)月后青责,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡取具,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年脖隶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇检。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡产阱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出块仆,到底是詐尸還是另有隱情构蹬,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布悔据,位于F島的核電站庄敛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏科汗。R本人自食惡果不足惜藻烤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望头滔。 院中可真熱鬧怖亭,春花似錦、人聲如沸拙毫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缀蹄。三九已至,卻和暖如春膘婶,著一層夾襖步出監(jiān)牢的瞬間缺前,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工悬襟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衅码,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓脊岳,卻偏偏與公主長(zhǎng)得像逝段,于是被迫代替她去往敵國(guó)和親垛玻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容