• dourcer
    了解作者
  • Python
    开发工具
  • 14KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2019-04-12 16:18
    上传日期
TCA是基于半监督的迁移学习,出自于文章Domain Adaptation via Transfer Component Analysis,通过算法转换,将源域和目标域的分布更加接近,从而达到很好的迁移效果。
TCA.zip
  • TCA
  • __pycache__
  • TCAtorch.cpython-36.pyc
    3.7KB
  • EEGsplit2.cpython-36.pyc
    5KB
  • EEGsplit.cpython-36.pyc
    5.1KB
  • .idea
  • workspace.xml
    15.8KB
  • TCA.iml
    464B
  • encodings.xml
    138B
  • misc.xml
    188B
  • modules.xml
    265B
  • TCAtorch.py
    6.1KB
内容介绍
# -*- coding: utf-8 -*- """ Created on Thu Jan 24 14:12:08 2019 @author: 11583 """ import numpy as np import torch import sklearn.neighbors from sklearn.svm import SVC import scipy.linalg #from ELM import HiddenLayer from sklearn import metrics DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu') def kernel(ker, X, X2, gamma): if not ker or ker == 'primal': return X elif ker == 'linear': if not X2: K = torch.dot(X.T, X) else: K = torch.dot(X.T, X2) elif ker == 'rbf': n1sq = torch.sum(X ** 2, dim=0) n1 = X.shape[1] if not X2: D = ((torch.ones((n1, 1)).to(DEVICE) * n1sq).t()).to(DEVICE) + (torch.ones((n1, 1)).to(DEVICE) * n1sq) - 2 * torch.mm(X.t(), X) else: n2sq = torch.sum(X2 ** 2, dim=0) n2 = X2.shape[1] D = (torch.ones((n2, 1)) * n1sq).t() + torch.ones((n1, 1)) * n2sq - 2 * torch.dot(X.t(), X) K = torch.exp(-gamma * D) elif ker == 'sam': if not X2: D = torch.dot(X.T, X) else: D = torch.dot(X.T, X2) K = torch.exp(-gamma * torch.arccos(D) ** 2) return K class TCA: def __init__(self, kernel_type='primal', dim=30, lamb=1, gamma=1): ''' Init func :param kernel_type: kernel, values: 'primal' | 'linear' | 'rbf' | 'sam' :param dim: dimension after transfer :param lamb: lambda value in equation :param gamma: kernel bandwidth for rbf kernel ''' self.kernel_type = kernel_type self.dim = dim self.lamb = lamb self.gamma = gamma #@cuda.jit(argtypes=(float32[:], float32[:]),restype=(float32[:],float32[:]), device=True, inline=True) def fit(self, Xs, Xt): ''' Transform Xs and Xt :param Xs: ns * n_feature, source feature :param Xt: nt * n_feature, target feature :return: Xs_new and Xt_new after TCA ''' X = torch.cat((Xs.t(),Xt.t()),1) X /= torch.norm(X, dim=0) m, n = X.shape ns, nt = len(Xs), len(Xt) aa = (1 / ns * torch.ones(ns, 1)) bb = (-1 / nt * torch.ones(nt, 1)) e = torch.cat((aa,bb),0) #e = torch.squeeze(e) M = e * e.t() #######M的类型必须为浮点型####### #M = torch.from_numpy(M) #M = M / np.linalg.norm(M, 'fro') M = (M / torch.norm(M,p='fro')).to(DEVICE) #M = torch.from_numpy(M) H = torch.eye(n).to(DEVICE) - (1 / n * torch.ones((n, n))).to(DEVICE) K = kernel(self.kernel_type, X, None, gamma=self.gamma) n_eye = m if self.kernel_type == 'primal' else n #print(K.shape) #print(M.shape) t = torch.mm(K, M) p = torch.mm(K, H) a, b = torch.mm(t,K.t()) + self.lamb * torch.eye(n_eye).to(DEVICE), torch.mm(p, K.t()) a = a.cpu().numpy() b = b.cpu().numpy() w, V = scipy.linalg.eig(a, b) # print(w.shape) # print(V.shape) # ind = np.argsort(w) # A = V[:, ind[:self.dim]] # Z = np.dot(A.T, K) # Z /= np.linalg.norm(Z, axis=0) # Xs_new, Xt_new = Z[:, :ns].T, Z[:, ns:].T # cc = torch.mm(torch.inverse(b),a) # #print(cc.shape) # gg = torch.eig(cc,eigenvectors=True) # w = gg[0] # V = gg[1] # print(V.shape) #print(w.dtype) w = w.astype(np.float32) V = V.astype(np.float32) w = torch.from_numpy(w) #print(w.shape) V = torch.from_numpy(V) #print(w.shape) ind = torch.argsort(w) A = V[:, ind[:self.dim]] #print(A.dtype) #print(K.dtype) Z = torch.mm(A.t().cpu(), K.cpu()) Z /= torch.norm(Z, dim=0) #dist = torch.trace(Z) Xs_new, Xt_new = torch.t(Z[:, :ns]), torch.t(Z[:, ns:]) # Xs_new = Xs_new.numpy() # Xt_new = Xt_new.numpy() #dist = dist.numpy() #print(type(Xs_new)) #print(Xt_new.shape) return Xs_new, Xt_new#,dist #@cuda.jit(argtypes=(float32[:], float32[:],float32[:], float32[:]),restype=(float32[:],float32[:]), device=True, inline=True) def fit_predict(self, Xs_new, Ys, Xt_new, Yt): ''' Transform Xs and Xt, then make predictions on target using 1NN :param Xs: ns * n_feature, source feature :param Ys: ns * 1, source label :param Xt: nt * n_feature, target feature :param Yt: nt * 1, target label :return: Accuracy and predicted_labels on the target domain ''' #Xs_new, Xt_new = self.fit(Xs, Xt) ####model select ##### #clf = sklearn.neighbors.KNeighborsClassifier(n_neighbors=10) # clf = GridSearchCV(SVC(kernel='rbf', gamma=0.1), cv=5, # param_grid={"C": [1e0, 1e1, 1e2, 1e3], # "gamma": np.logspace(-2, 2, 5)},scoring="accuracy") #clf = SVC(kernel='linear',C=19,gamma=0.1)#linear #clf = SVC(kernel='linear',C=10,gamma=0.1)#sigmoid clf = SVC(C=10.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape='ovr', degree=3, gamma=1.0, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False) # clf = GridSearchCV(SVC(kernel='rbf', gamma=0.1), cv=5, # param_grid={"C": [1e0, 1e1, 1e2, 1e3], # "gamma": np.logspace(-2, 2, 5)},scoring="accuracy") #######线性逻辑回归方法###### #clf = linear_model.LogisticRegression(C=1.0) clf.fit(Xs_new, Ys.ravel()) y_pred = clf.predict(Xt_new) #acc = accuracy_score(Yt,y_pred) acc = sklearn.metrics.accuracy_score(Yt, y_pred) # a = HiddenLayer(Xs_new,50) # a.classifisor_train(Ys) # result = a.classifisor_test(Xt_new) # acc = metrics.accuracy_score(Yt,result) #return acc return acc, y_pred #return Xs_new,Ys, Xt_new,Yt
评论
    相关推荐
    • 领域适应工具箱:几种领域适应/半监督学习算法的包装器和实现-matlab开发
      几种领域适应/迁移学习/半监督学习算法的包装和实现,包括: * 转移成分分析 (TCA) * 最大独立域适应(MIDA) * 子空间对齐(SA) * 信息理论学习 (ITL) *测地线流核(GFK) * 平稳子空间分析(SSA) * 拉普拉斯 SVM...
    • Few-shot-Meta-learning-papers:最近的少量元学习论文
      优化作为快速学习模型( Meta-LSTM ) 与模型无关的元学习,可快速适应深度网络( MAML ) 半监督式的MAML学习(半MAML ) 元学习和通用性:深度表示和梯度下降可以近似任何学习算法(不确定性-MAML ) 将基于梯度...
    • SOTA-MT:该项目试图维持机器翻译中的SOTA性能
      神经机器翻译有几个研究方向,包括体系结构设计,多模式翻译,语音和同时翻译,文档翻译,多语言翻译,半监督翻译,无监督翻译,领域自适应,非自回归翻译等。在许多研究任务(例如文档翻译,多语言翻译和领域适应)...
    • ML_paper_list:我的阅读评论积压中的论文博客视频项目列表
      机器学习阅读清单 我的阅读/审阅积压工作中的论文/博客/视频/项目列表及其主题 自然语言处理(NLP) 面向组合任务的语义解析的低资源域自适应( ) ... 半监督的新事件类型归纳和事件检测( ) 通过弱标签数据学
    • SotA-CV-master.zip
      半监督分类 弱监督语义分割 场景识别 动作识别 形状识别 人脸识别 脸部对齐 关键点和地标检测 实例细分 人工解析 显着性检测 运动结构 图片字幕 表面重建 逆图形 对象定位 光学字符识别 图像表示和特征学习 医学影像...
    • HelloFace:很棒的面部技术存储库
      :collision: 大爆炸 :collision: 感受野是自然的锚 接收场就是您所需要的 2K实时检测是如此简单! 你好脸 脸部技术资料库(正在更新) :fire: :fire: :fire: 网址: : :thumbs_up: :thumbs_up: :...浅脸学习的
    • CVPR2018_attention:语义分割MegaDepth的上下文编码
      用于视差估计的合并双向匹配量学习用于语义分割的判别特征网络复习扩张式卷积:一种用于弱监督和半监督语义分割的简单方法无监督的深度生成对抗式哈希网络Web立体声数据监控的单眼相对深度感知具有感知损失的单图像...
    • matlab人脸匹配代码-da_literature:da_literature
      matlab人脸匹配代码da_litrature #内容 无监督的DA 对抗方法 ...半监督对抗学习,从3D变形模型生成新身份的真实感人脸图像 无监督域适应的深度对抗注意对齐:目标期望最大化的好处 学习用于无监督
    • matlab的egde源代码-libTLDA:迁移学习者和领域自适应分类器的库
      半监督子空间对齐(仅限python) 结构对应学习 稳健的偏见感知分类 功能级域自适应 目标对比悲观风险(仅python) Python 安装 可以通过pip完成安装: pip install libtlda pip软件包将安装所有依赖项。 为了确保...
    • credit_card_fraud_detection:信用卡欺诈检测-无监督异常检测-分类不平衡-自动编码器
      作者:安德烈·维特(Andre Veit) 领英(LinkedIn): : 电子邮件: ...自动编码器-无监督和半监督学习 4.1。 无监督学习4.2。 半监督学习 数据集 该数据集来自Kaggle网站,可以通过以下链接找到: