傳統非深度遷移方法 TCA演算法

2021-10-10 19:32:57 字數 1404 閱讀 9441

#計算核函式

def kernel(kernel_type,xs,xt,gamma):

'''kernel_type:計算核矩陣使用的核函式的核型別,linear、rbf等

xs:源域資料

xt:目標域資料

gamma:如果使用rbf核,則需要用到gamma引數

'''初始化 k = none

if kernel_type == none or kernel_type == 'primal':

k = xs

elif kernel_type is 'linear':

if xt is not none:

k = sklearn.metrics.pairwise.linear_kernel(xs.t,xt.t)

else:

k = sklearn.metrics.pairwise.linear_kernel(xs.t)

elif kernel_type is 'rbf':

if xt is not none:

k = sklearn.metrics.pairwise.rbf_kernel(xs.t,xt.t,gamma)

else:

k = sklearn.metrics.pairwise.rbf_kernel(xs.t,none,gamma)

return k

#計算經過tca演算法降維後的矩陣

def tca(kernel_type,xs,xt,gamma,lambda,dim):

'''kernel_type和gamma為計算核矩陣時使用的引數

xs:源域資料

xt:目標域資料

dim:降維後希望的資料維度

'''x = hstack((xs.t,xt.t))

m,n = x.shape

x的行數為原始資料的特徵數,列數為總的資料個數

求x的每一列的範數,並將所有的資料歸一化

計算m矩陣:m = np.vstack(1/ns*np.ones((ns,1)),-1/nt*np.ones((nt,1))), m = m*m.t

計算h矩陣:h = np.eye(n)-1/n*np.ones((n,n))

計算核矩陣:k = kernel(kernel_type,x,none,gamma)

計算n_eye = m if kernel_type is 'primal' else n ()

計算矩陣的特徵值和特徵向量:矩陣為 a=k*m*k.t+lambda*eye(n_eye),b=k*h*k.t; w,v = eig(a,b)

根據dim的大小選取前dim大的特徵值對應的特徵向量組成的矩陣a

a和k相乘得到降維後的向量組成的矩陣

進行歸一化

得到新的源資料特徵和新的目標資料特徵

NQG傳統演算法(非預訓練演算法) copy機制

1 copy 機制 源自 incorporating copying mechanism in sequence to sequence learning 首次提出copynet的思路,同時結合了generative和copy兩種方式,對oov詞採用直接copy的方式。2 pointing unkn...

當前最好的非深度遷移學習方法 流形空間下的分布對齊

本文即將發表在國際頂級會議 acm conference 2018 上,被評為 oral,而且是 top 10 提出了乙個叫 meda manifold embedded distribution alignment 的方法進行遷移學習,取得了對比當前眾多最新的深度和非深度方法的最好結果。我們系統性...

一種深度學習方法 遷移學習

接下來我會介紹關於遷移學習的以下內容。它是什麼?它是如何工作的?為什麼使用它?什麼時候使用?轉移學習的方法 訓練模型 使用預先訓練的模型 和特徵提取 遷移學習 遇到乙個新問題,不是從頭訓練乙個網路模型,而是在現有的預訓練模型上,再次訓練或者直接使用。因為他可以用較少的資料來訓練深度神經網路,如果你資...