迁移学习基础教程

近些年来,机器学习包括深度学习的发展,使模型的准确率越来越高。但是,如果将已有的模型直接拿来处理同类型的问题,结果却差强人意。迁移学习(Transfer Learning)提供了这一问题的解决方法。NAIE平台提供了迁移学习SDK,可以方便大家轻松使用多种常见的迁移学习方法,解决不同任务之间迁移的问题。 您只要将源域和目标域的数据准备好,就可以轻松使用迁移学习SDK训练出一个更好的模型。迁移学习SDK分为可迁移性判别方法、浅层迁移学习方法和深层迁移学习方法。集成了学术界和工业界常用的迁移学习能力,并在可迁移性判别上引入了一套独有的判别方法。

迁移学习方法介绍

1、可迁移性判别方法

NAIE平台提供的可迁移性判别方法SDK,可用于评估数据是否适用于迁移、哪种浅层迁移方法最有效。

迁移数据评估方法 (EasyTransferability)
评估数据是否适用于迁移。将源域和目标域的数据特征同时作为该方法的输入,该方法会输出一个评估分数,如果分数大于0.5,说明数据适合迁移。

浅层迁移算法评估方法 (MetaTrans)
评估各浅层迁移学习方法迁移的效果。将源域的数据特征和标签、目标域的数据特征作为输入,该方法会分别使用各浅层迁移学习方法SDK预置的历史Meta信息先训练出对应的SDK模型,然后分别使用SDK模型来预测源域和目标域的数据迁移效果,给出各SDK方法迁移的效果评估分数,如果分数大于1,说明使用对应的SDK来完成迁移学习是有效的,最终会给出效果最好的浅层迁移学习方法。

2、浅层迁移学习方法

基于数据特征和样本迁移,迁移时需同时使用源域和目标域数据,目标域数据无需标签。迁移学习完成后输出新的源域和目标域数据。 浅层迁移学习方法分类如下:

(1)特征迁移
(2)不需要源域的标签信息
对源域和目标域的数据特征进行变换或重构,得到分布对齐的样本表示,只需要使用源域和目标域的数据特征,不需要源域的标签信息。该类方法有:CMF (Collective Matrix Factorization)、CORAL (CORrelation ALignment)、GFK (Geodesic Flow Kernel)、LSDT (Latent Space Domain Transfer)、MSDA (Marginalized Stacked Denoising AutoEncoder)、PCA (Principal Component Analysis)、RANDPROJ (Random Projection to one dimension)、SA (Subspace Alignment)、TCA (Transfer Component Analysis)
(3)需要源域的标签信息
对源域和目标域的数据特征进行变换或重构,得到分布对齐的样本表示,需要使用源域数据特征和标签信息、目标域的数据特征。该类方法有:ITL (Information-Theoretical Learning)
(4)样本迁移在源域中选择和目标域相关性高的样本迁移,需要使用源域数据特征和标签信息、目标域的数据特征。该类方法有:KMM (Kernel Mean Matching)

3、深层迁移学习方法

基于深度自适应网络和深度对抗网络迁移,深度网络迁移训练时需同时使用源域和目标域数据,目标域数据无需标签。 深层迁移学习方法适用于图像、语音、文本、通信等业务领域。 深层迁移学习方法分为:
AFN (Adaptive Feature Norm):一种具有较大范数的无监督网络自适应方法。
DAN (Deep Domain Adaptation Network):一种采用多核MMD度量(MK-MMD),并将多核MMD的参数学习融入到深度网络的训练中,不增加网络的额外训练时间,以达到深度网络自适应目的方法。
RevGrad (DANN, Deep Adversarial Domain Adaptation):一种具有对抗性训练和梯度逆转层的深层网络迁移方法。

迁移学习方法使用样例

下文以使用浅层迁移学习方法GFK (Geodesic Flow Kernel)为例,介绍如何使用可迁移性判别方法和浅层迁移学习方法。深层迁移学习方法请参见迁移学习进阶教程。

1、导入依赖库

from naie.datasets import data_reference from naie.feature_processing import data_flow

2、读取数据集

我们以Office+Caltech数据集为例。
Office+Caltech为目标识别领域10分类数据集,分为:
C(Caltech):1123个样本,800维特征,最后一列为标签信息。
A(Amazon):958个样本,800维特征,最后一列为标签信息。
W(Webcam):295个样本,800维特征,最后一列为标签信息。
D(DSLR):157个样本,800维特征,最后一列为标签信息。
数据集下载路径: https://github.com/jindongwang/transferlearning/blob/master/data/dataset.md#officecaltech
将Amazon数据集作为源域,DSLR数据集作为目标域,并提前在NAIE训练平台上导入Amazon和DSLR数据集。
选取源域和目标域数据特征和标签:
# 将源域数据转换成dataframe source_dr = data_reference.get_data_reference(dataset=‘Default’, dataset_entity=‘amazon’) source_data = data_flow.create_data_flow(source_dr).to_pandas_dataframe() # 将目标域数据转换成dataframe target_dr = data_reference.get_data_reference(dataset=‘Default’, dataset_entity=‘dslr’) target_data = data_flow.create_data_flow(target_dr).to_pandas_dataframe() # 选取源域和目标域数据特征和标签 SX = source_data.values[:,:-1] SY = source_data.values[:,-1] TX = target_data.values[:,:-1] TY = target_data.values[:,-1]

3、迁移评估

评估迁移数据
评估将Amazon数据集作为源域,DSLR数据集作为目标域,是否适用于迁移。
from naie.transfer_learning import EasyTransferability model = EasyTransferability() score = model.predict(SX, TX) print("evaluation score: ", ‘{:.2f}’.format(score))
如果评估分数大于0.5,说明源域和目标域数据适合迁移。本例中评估分数为0.97,说明可以迁移。

评估迁移算法
评估使用哪种浅层迁移学习方法有效。
from naie.transfer_learning import MetaTrans tasks = [(SX, SY, TX, None)] # The algorithm_names paremeter is list of algorithms need to be evaluated. algorithm_names = [‘CMF’, ‘CORAL’, ‘GFK’, ‘ITL’, ‘KMM’, ‘MSDA’, ‘PCA’, ‘RPROJ’, ‘SA’, ‘TCA’] model = MetaTrans() score = model.evaluate(tasks, algorithm_names) print("The best transfer is: ", score)
评估结果显示:The best transfer is: {‘GFK’: 5.51}。 下面我们就使用浅层迁移学习方法GFK来完成数据迁移。

4、使用GFK方法完成迁移
导入浅层迁移学习方法库和依赖库
from naie.transfer_learning import ShallowTransferLearning import numpy as np import pandas as pd

使用GFK方法迁移数据
gfk = ShallowTransferLearning(“GFK”) new_SX, new_TX, _ = gfk.fit(SX, TX)

测试迁移数据
我们使用sklearn的k近邻分类器做迁移前后数据分类对比来测试数据迁移效果。
from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # 迁移前的数据分类准确率 knn = KNeighborsClassifier(n_neighbors=1) knn.fit(SX, SY) prey = knn.predict(TX) bef_acc = accuracy_score(y_true=TY, y_pred=prey) # 迁移后的数据分类准确率 knn = KNeighborsClassifier(n_neighbors=1) knn.fit(new_SX, SY) prey = knn.predict(new_TX) aft_acc = accuracy_score(y_true=TY, y_pred=prey) print(“Before accuracy : {:.2f}, After accuracy : {:.2f}”.format(bef_acc, aft_acc))
结果:Before accuracy : 0.25, After accuracy : 0.37
这样,我们就完成了数据迁移。可以看到,用GFK迁移学习之后,在目标域上做分类,准确率提升了不少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来达摩大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值