資源簡(jiǎn)介
核主成分分析(Kernel Principal Component Analysis, KPCA)
PCA方法假設(shè)從高維空間到低維空間的函數(shù)映射是線性的,但是在不少現(xiàn)實(shí)任務(wù)中,可能需要非線性映射才能找到合適的低維空間來(lái)降維。
非線性降維的額一種常用方法是基于核技巧對(duì)線性降維方法進(jìn)行核化(kernelized)。這是對(duì)PCA的一種推廣。
代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
“““
????KernelPCA
“““
import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?sklearn?import???datasetsdecomposition
def?load_data():
????‘‘‘
????加載用于降維的數(shù)據(jù)
????:return:?一個(gè)元組,依次為訓(xùn)練樣本集和樣本集的標(biāo)記
????‘‘‘
????iris=datasets.load_iris()#?使用?scikit-learn?自帶的?iris?數(shù)據(jù)集
????return??iris.datairis.target
def?test_KPCA(*data):
????‘‘‘
????測(cè)試?KernelPCA?的用法
????:param?data:?可變參數(shù)。它是一個(gè)元組,這里要求其元素依次為:訓(xùn)練樣本集、訓(xùn)練樣本的標(biāo)記
????:return:?None
????‘‘‘
????Xy=data
????kernels=[‘linear‘‘poly‘‘rbf‘‘sigmoid‘]
????for?kernel?in?kernels:
????????kpca=decomposition.KernelPCA(n_components=Nonekernel=kernel)?#?依次測(cè)試四種核函數(shù)
????????kpca.fit(X)
????????print(‘kernel=%s?-->?lambdas:?%s‘%?(kernelkpca.lambdas_))
def?plot_KPCA(*data):
????‘‘‘
????繪制經(jīng)過(guò)?KernelPCA?降維到二維之后的樣本點(diǎn)
????:param?data:?可變參數(shù)。它是一個(gè)元組,這里要求其元素依次為:訓(xùn)練樣本集、訓(xùn)練樣本的標(biāo)記
????:return:?None
????‘‘‘
????Xy=data
????kernels=[‘linear‘‘poly‘‘rbf‘‘sigmoid‘]
????fig=plt.figure()
????colors=((100)(010)(001)(0.50.50)(00.50.5)(0.500.5)
????????(0.40.60)(0.60.40)(00.60.4)(0.50.30.2))#?顏色集合,不同標(biāo)記的樣本染不同的顏色
????for?ikernel?in?enumerate(kernels):
????????kpca=decomposition.KernelPCA(n_components=2kernel=kernel)
????????kpca.fit(X)
????????X_r=kpca.transform(X)#?原始數(shù)據(jù)集轉(zhuǎn)換到二維
????????ax=fig.add_subplot(22i+1)?##?兩行兩列,每個(gè)單元顯示一種核函數(shù)的?KernelPCA?的效果圖
????????for?label?color?in?zip(?np.unique(y)colors):
????????????position=y==label
????????????ax.scatter(X_r[position0]X_r[position1]label=“target=?%d“%label
????????????color=color)
????????ax.set_xlabel(“X[0]“)
????????ax.set_ylabel(“X[1]“)
????????ax.legend(loc=“best“)
????????ax.set_title(“kernel=%s“%kernel)
????plt.suptitle(“KPCA“)
????plt.show()
def?plot_KPCA_poly(*data):
????‘‘‘
????繪制經(jīng)過(guò)?使用?poly?核的KernelPCA?降維到二維之后的樣本點(diǎn)
????:param?data:?可變參數(shù)。它是一個(gè)元組,這里要求其元素依次為:訓(xùn)練樣本集、訓(xùn)練樣本的標(biāo)記
????:return:?None
????‘‘‘
????Xy=data
????fig=plt.figure()
????colors=((100)(010)(001)(0.50.50)(00.50.5)(0.500.5)
????????(0.40.60)(0.60.40)(00.60.4)(0.50.30.2))#?顏色集合,不同標(biāo)記的樣本染不同的顏色
????Params=[(311)(3101)(3110)(31010)(1011)(10101)(10110)(101010)]?#?poly?核的參數(shù)組成的列表。
????????????#?每個(gè)元素是個(gè)元組,代表一組參數(shù)(依次為:p?值,?gamma?值,?r?值)
????????????#?p?取值為:3,10
????????????#?gamma?取值為?:1,10
????????????#?r?取值為:1,10
????????????#?排列組合一共?8?種組合
????for?i(pgammar)?in?enumerate(Params):
????????kpca=decomposition.KernelPCA(n_components=2kernel=‘poly‘
????????gamma=gammadegree=pcoef0=r)??#?poly?核,目標(biāo)為2維
????????kpca.fit(X)
????????X_r=kpca.transform(X)#?原始數(shù)據(jù)集轉(zhuǎn)換到二維
????????ax=fig.add_subplot(24i+1)##?兩行四列,每個(gè)單元顯示核函數(shù)為?poly?的?KernelPCA?一組參數(shù)的效果圖
????????for?label?color?in?zip(?np.unique(y)colors):
????????????position=y==label
????????????ax.scatter(X_r[position0]X_r[position1]label=“target=?%d“%label
????????????color=color)
????????ax.set_xlabel(“X[0]“)
????????ax.set_xticks([])?#?隱藏?x?軸刻度
????????ax.set_ytic
評(píng)論
共有 條評(píng)論