#計算核函式
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 的方法進行遷移學習,取得了對比當前眾多最新的深度和非深度方法的最好結果。我們系統性...
一種深度學習方法 遷移學習
接下來我會介紹關於遷移學習的以下內容。它是什麼?它是如何工作的?為什麼使用它?什麼時候使用?轉移學習的方法 訓練模型 使用預先訓練的模型 和特徵提取 遷移學習 遇到乙個新問題,不是從頭訓練乙個網路模型,而是在現有的預訓練模型上,再次訓練或者直接使用。因為他可以用較少的資料來訓練深度神經網路,如果你資...