【数据竞赛】DoubleEnsemble--专治硬样本的神奇集成技术。

作者:杰少

DoubleEnsemble 

简介

本文,我们介绍一种新的集成算法,算法的基本思想是希望让噪音样本的权重减小,让难以分类的样本权重增大从而提升模型的效果,从论文的思路和实验结果来看都是非常不错的,和大家一起分享一下。

在金融数据集中,数据的信噪比是非常低的,使用复杂的NN模型最大的挑战就是过拟合问题,而且相对并不稳定。当前非常多交易公司会生产非常多的特征(也称因子)。如何自动选择有效的特征成为一个迫在眉睫的问题。为了解决这些问题,本文提出DoubleEnsemble,这是一个集成框架,利用基于学习轨迹的样本重新加权和基于shuffle的特征选择。

具体地说,我们根据每个样本的训练动态识别关键样本,并通过shuffle根据每个特征的消融影响提取关键特征。

我们的模型适用于广泛的基础模型,能够抽取复杂的模式,同时缓解金融市场预测的过度拟合和不稳定问题。我们进行了广泛的实验,包括加密货币和股票交易的价格预测,使用DNN和GBDT作为基础模型。实验结果表明,与几种基线方法相比,DoubleEnsemble具有更好的性能。

背景

金融数据中存在较低的信噪比,为了解决低信噪比的问题,本文提出了一种新的金融市场预测集成框架DoubleEnsemble。特别地:

  • 在ensemble中逐个构造子模型,其中每个子模型都使用样本的权重和精心选择的特征进行训练。

在学习子模型时,可以使用多种基本模型,如线性回归模型、boosting决策树和深度神经网络。每次,使用基于采样重新加权机制的学习路径,我们对原始训练集合中的每个样本赋予一个权重,我们根据前一个子模型的损失曲线和当前集合的损失值(称之为学习轨迹),为原始训练集中的每个样本分配一个权重。此外,我们通过shuffle技术根据特征对当前集合的贡献来选择特征。

提出的方法

特征矩阵 ,标签 , 其中,其中 为样本个数, 是特征个数。 为第 个样本特征向量, 是第 个样本的标签。

在过程中,我们序列化地构建 哥自模型, ,在构建完第 哥自模型之后,我们定义当前的集成模型为: ,DoubleEnsemble的输出为 个子模型的均值。

每个子模型是在训练数据集 以及一个选出的特征集合 , 权重为 ,其中 为第 个样本的权重,对于第一个子模型,我们使用所有的特征以及一样的权重,对于接下来的子模型,我们使用基于采样重新加权的学习路径以及基于特征选择的shuggle技术来决定权重并且选择特征。

SR(Sample Reweighting)

我们抽取在前一个模型的训练损失曲线和当前集成的损失曲线,假设在之前子模型的训练中有 轮迭代。我们使用 来表示学习曲线,其中 是在第 轮的第 个样本的误差,我们使用 表示损失值, 为第 个样本的当前集成的误差(即 的误差);

FS(Feature Selection)

我们直接提供训练数据以及当前的集成结果。

DoubleEnsemble算法

01


算法

其中SR为:

SR算法中的(1)为,

为了防止极值的影响,我们将样本划分为B个分桶,并且给予同一个分桶中的样本一样的权重,

其中b 为第 个分桶的平均 值, 为衰减因子,这样可以是的后续的集成子模型更加均匀。

02


背后的思想

如上图所示:我们考虑分类任务中的三类样本:

  • 容易被正确分类的简单样本;

  • 接近真实决策边界的难被分类的样本,容易被错误分类;

  • 以及可能误导模型的噪声样本。

我们希望我们重新加权方案能够提高难以分类的样本的权重,同时降低简单样本和噪声样本的权重

  • 简单样本无论如何都可以拟合,而拟合噪声样本可能会导致拟合过度。

项有助于减少简单样本的权重。具体而言,简单样品的损失很小,会导致 值较大,因此权重较小。

然而,该项也会增强噪声样本,因为仅根据损失值很难区分噪声样本和难以分类的样本。我们通过 的损失曲线来区分它们(上图b)。我们为具有递减归一化损失曲线的样本分配了较大的权重。由于训练过程是由大多数样本驱动的,因此大多数样本的损失趋于减少,而噪声样本的损失通常保持不变甚至增加。因此,噪声样本的归一化损耗曲线将增加,从而导致较大的 值和较小的权重。对于简单易分类的样品,它们的标准化损耗曲线更有可能保持不变或者轻微波动,这会导致 值适中。对于难以分类的样本,它们的归一化损失曲线在训练过程中缓慢下降,这表明它们对决策边界的贡献。这导致 值较小,因此权重较大。如果上图1c所示。使用 不仅增加了难分类样本的权重,而且也增加了难分类样本的权重。

最终通过 的结合,我们可以减少容易分类样本的权重和噪音样本的权重。

03


shuffling based feature selection

该算法用来对特征进行选择,并且将选择的特征输入到下一轮当中。


实验


从上面的实验中,我们发现:

  • 本文的算法获得了最佳的实验效果;

  • DoubleEnsemble(SR+FS)实现了50%以上的年化回报,且风险较低。夏普比接近5.0,最大drawdown小于6.0%。这表明Doubleensemble的策略具有优越而稳定的性能。

小结

本文通过学习基于轨迹的样本重加权和基于洗牌的特征选择,提出了一种稳健有效的集成模型DoubleEnsemble。基于学习轨迹的样本重加权方法将不同难度的样本赋予不同的权重,非常适合于高噪声和不规则的市场数据。基于shuffle的特征选择可以识别特征对模型的贡献,并为不同的子模型选择权重和多样的特征。目前该方法代码已经开源,有兴趣的朋友可以尝试一下。

参考文献

  1. https://arxiv.org/pdf/2010.01265.pdf



往期精彩回顾



适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑黄海广老师《机器学习课程》课件合集
本站qq群851320808,加入微信群请扫码:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 co-training 代码示例,用于处理已有的样本数据: ```python import random # 假设我们有两个数据集,分别为 X1 和 X2 X1 = [...] # 样本数据集 1 X2 = [...] # 样本数据集 2 # 初始化两个分类器 clf1 = [...] # 分类器 1 clf2 = [...] # 分类器 2 # co-training 迭代次数 n_iterations = 10 for i in range(n_iterations): # 随机选择一部分样本用于训练分类器 1 X1_train = random.sample(X1, k=100) y1_train = clf1.predict(X1_train) # 将分类器 1 的预测结果作为标签,训练分类器 2 X2_train = [] y2_train = [] for x in X1_train: if clf1.predict([x]) == 1: X2_train.append(x) y2_train.append(1) for x in X2: if clf1.predict([x]) == -1: X2_train.append(x) y2_train.append(-1) clf2.fit(X2_train, y2_train) # 随机选择一部分样本用于训练分类器 2 X2_train = random.sample(X2, k=100) y2_train = clf2.predict(X2_train) # 将分类器 2 的预测结果作为标签,训练分类器 1 X1_train = [] y1_train = [] for x in X2_train: if clf2.predict([x]) == 1: X1_train.append(x) y1_train.append(1) for x in X1: if clf2.predict([x]) == -1: X1_train.append(x) y1_train.append(-1) clf1.fit(X1_train, y1_train) # 使用训练好的分类器进行预测 X_test = [...] # 测试数据集 y_pred = [] for x in X_test: if clf1.predict([x]) == 1 and clf2.predict([x]) == 1: y_pred.append(1) elif clf1.predict([x]) == -1 and clf2.predict([x]) == -1: y_pred.append(-1) else: y_pred.append(0) ``` 注意,这只是一个简单的示例代码,实际应用中可能需要根据具体情况进行修改和优化。此外,co-training 算法的效果取决于数据集的性质和分类器的选择,需要进行充分的实验和评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值