强化学习与扩展学习分类器系统在投资组合管理中的应用
1. 小训练样本下的行动价值图问题
行动价值图在最后一个情节结束时呈现出一些清晰的模式。大多数有回报的行动是从大量状态(X 轴)过渡到较少数量的状态(Y 轴)。小训练样本存在以下问题:
-
特征近似表示
:训练集规模小,迫使我们对每个特征采用近似表示,目的是增加大多数桶至少有一个数据点的概率。
-
状态分组问题
:宽松的函数近似容易将差异较大的状态归为同一桶。
-
状态特征误判
:数量极少的桶可能会错误描述状态的某一属性或特征。
2. 强化学习的优缺点
强化学习算法适用于以下问题:
- 在线学习
- 训练数据少或不存在
- 模型不存在或定义不明确
- 计算资源有限
然而,在以下情况下,这些技术表现不佳:
- 搜索空间(可能的行动数量)大,导致状态、行动图和奖励矩阵的维护具有挑战性
- 执行的可扩展性和性能并不总是可预测的
3. 学习分类器系统概述
学习分类器系统(LCS)是一种基于规则的系统,具有并行处理规则、自适应生成新规则以及测试新规则有效性的通用机制。它结合了规则、强化学习和遗传算法,涉及以下研究领域:
- 强化学习
- 遗传算法和进化计算
- 监督学习
- 基于规则的知识编码
一个学习分类器系统有四个组件:
-
规则种群
:随时间演变的分类器或规则种群。规则可以由领域专家创建,也可以在系统执行前随机生成。
-
规则发现模块
:基于遗传算法的发现引擎,从现有种群中生成新的分类器或规则。规则编码为字符串或位串,以表示条件(谓词)和行动。
-
性能评估函数
:衡量最适合的分类器或策略的行动产生的积极或消极影响。
-
信用分配模块
:对促成行动的分类器进行奖励或惩罚。有助于提高系统性能的规则得到奖励,而降低系统性能的规则则受到惩罚。
4. 选择学习分类器系统的原因
学习分类器系统特别适用于环境不断变化的问题,是学习策略和进化方法的结合,用于构建和维护知识库。监督学习方法在大型数据集上可能有效,但需要大量标记数据或减少特征集以避免过拟合,在不断变化的环境中,这些约束可能不切实际。
学习分类器系统的变体可分为两类:
-
匹兹堡方法
:根据正确预测计算准确性,并将发现应用于部分正确类别。结合监督学习元素来约束分类器种群。
-
密歇根方法
:探索所有分类器,并在规则的遗传选择中应用规则准确性。每个分类器都是一个规则。
接下来将重点介绍扩展学习分类器系统(XCS)。
5. 相关术语
| 术语 | 定义 |
|---|---|
| 环境 | 强化学习中的环境变量 |
| 代理 | 强化学习中使用的代理 |
| 谓词 | 使用“变量 - 运算符 - 值”格式的子句或事实,通常实现为 (运算符, 变量值),编码为基因以便遗传算法处理 |
| 复合谓词 | 多个谓词和布尔逻辑运算符的组合,通常实现为逻辑树 |
| 行动 | 通过修改环境的一个或多个参数值来改变环境的机制 |
| 规则 | 使用“IF 复合谓词 THEN 行动序列”格式的一阶逻辑公式 |
| 分类器 | 在 LCS 上下文中的规则 |
| 规则适应度或分数 | 规则在环境变化时被调用和触发的概率 |
| 传感器 | 代理监控的环境变量 |
| 输入数据流 | 传感器生成的数据流,通常与在线训练相关 |
| 规则匹配 | 将谓词或复合谓词与传感器匹配的机制 |
| 覆盖 | 在环境中没有匹配规则时创建新规则以匹配新条件(传感器)的过程 |
| 预测器 | 在一组匹配规则中找到出现次数最多的行动的算法 |
6. 扩展学习分类器系统(XCS)
XCS 算法有探索阶段和利用阶段。利用阶段利用现有规则以有利可图或有回报的方式影响目标环境。
graph LR
A[传感器] --> B[匹配规则]
B --> C{是否有匹配规则?}
C -- 是 --> D[按适应度排序规则]
C -- 否 --> E[创建新规则(覆盖)]
E --> D
D --> F[触发行动]
F --> G[奖励规则]
G --> H[更新规则适应度]
H --> I[遗传算法更新规则种群]
利用阶段组件说明:
1. 传感器从系统获取新数据或事件。
2. 搜索并从当前种群中提取条件与输入事件匹配的规则。
3. 如果现有种群中没有匹配规则,则创建新规则(覆盖)。
4. 根据适应度值对所选规则进行排序,使用预测结果最高的规则触发行动。
探索阶段组件说明:
5. 行动执行后,系统对执行该行动的规则进行奖励,强化学习模块为这些规则分配信用。
6. 奖励用于更新规则适应度,对现有种群应用进化约束。
7. 遗传算法使用交叉和变异等运算符更新现有分类器/规则种群。
7. XCS 在投资组合管理中的应用
投资组合管理和交易受益于扩展学习分类器的应用。以管理交易型开放式指数基金(ETF)投资组合为例,ETF 价格受宏观经济变化影响,如国内生产总值、通货膨胀、地缘政治事件和利率等。为简化起见,选择 10 年期国债收益率作为宏观经济条件的代理。
| XCS 组件 | 投资组合管理 |
|---|---|
| 环境 | 由证券构成、总价值和 10 年期国债收益率定义的证券投资组合 |
| 行动 | 改变投资组合的构成 |
| 奖励 | 投资组合总价值的盈亏 |
| 输入数据流 | 股票和债券价格报价的馈送 |
| 传感器 | 投资组合中证券的交易信息,如价格、成交量、波动率或收益率,以及 10 年期国债收益率 |
| 谓词 | 投资组合构成的变化 |
| 行动 | 通过买卖证券重新平衡投资组合 |
| 规则 | 交易数据与投资组合重新平衡的关联 |
首先要创建关于投资组合的初始规则集。规则可以随机生成,也可以由领域专家定义。用一些相关规则初始化 XCS 初始种群可以提高算法快速收敛的可能性。
8. XCS 核心数据
XCS 代理操作三种类型的数据:
-
信号
:交易信号
-
XcsAction
:对环境的行动
class XcsAction(val sensorid: String, val target: Double)(implicit val discr: Discretization) extends Gene(sensorid, target, EQUAL)
例如,将投资组合中 ETF(VWO)的股份数量增加到 80 的行动定义为:
val vwoTo80 = new XcsAction("VWO", 80.0)
- XcsSensor :来自环境的传感器或数据
case class XcsSensor(val sensorId: String, val value: Double)
val new10ytb = new XcsSensor("10yTBYield", 2.76)
在这个简单场景中,传感器从环境变量中获取新值,行动为环境变量设置新值。可以将传感器视为环境类的获取方法,将行动视为带有变量/传感器 ID 和值作为参数的设置方法。
9. XCS 规则
规则定义为两个基因的对:信号和行动。
class XcsRule(val signal: Signal, val action: XcsAction)
例如,规则“r1: IF(10 年期国债收益率 > 2.84%) THEN 将 VWO 股份减少到 240”实现如下:
val signal = new Signal("10ytb", 2.84, GREATER_THAN)
val action = new XcsAction("vwo", 240)
val r1 = new XcsRule(signal, action)
代理将规则编码为染色体,用 2 位表示运算符,32 位表示值。在这个实现中,由于代理只使用一种类型的行动(设置),因此无需对行动类型进行编码。对于复杂行动,需要对其类型进行编码。
10. 规则匹配与覆盖
匹配规则与新传感器意味着将传感器与信号进行匹配。例如,将新的
new10ytb
传感器与当前种群中使用相同传感器或变量
10ytb
的
s10ytb1
和
s10ytb2
规则的信号进行匹配:
val new10ytb = new XcsSensor("10ytb", 2.76)
val s10ytb1 = Signal("10ytb", 2.5, GREATER_THAN)
val s10ytb2 = Signal("10ytb", 2.2, LESS_THAN)
val r23: XcsRule(s10ytb1, act12)
val r34: XcsRule(s10ytb2, act17)
在这种情况下,代理选择规则
r23
而不是
r34
,并将
act12
行动添加到可能的行动列表中。代理列出所有匹配传感器的规则,如
r23
、
r11
和
r46
。引用次数最多的行动
act12
被执行。Q 学习算法根据执行所选规则
r23
和
r46
后投资组合的盈亏计算奖励。代理使用奖励调整
r23
和
r46
的适应度,然后进行下一个繁殖周期的遗传选择。
覆盖阶段的目的是在没有规则匹配输入或传感器时生成新规则。
XcsCover
单例的
cover
方法根据传感器和现有行动集生成新的
XcsRule
实例:
def cover(sensor: XcsSensor, actions: List[XcsAction]) (implicit discr: Discretization): List[XcsRule] = {
actions.foldLeft(List[XcsRule]()) ((xs, act) => {
val rIdx = Random.nextInt(Signal.numOperators)
val signal = new Signal(sensor.id, sensor.value, new SOperator(rIdx))
new XcsRule(signal, XcsAction(act, Random)) :: xs
})
}
cover
方法使用现有行动集作为参数,通过变异现有行动来创建新行动,而不是使用随机生成器。这是将行动定义为基因的优点之一。变异由
XcsAction
的一个构造函数执行:
def apply(action: XcsAction, r: Random): XcsAction = (action ^ r.nextInt(XCSACTION_SIZE))
运算符类型的索引
rIdx
是区间 [0, 3] 内的随机值,因为信号使用四种类型的运算符:无、>、< 和 =。
11. XCS 类的实现示例
class Xcs(config: XcsConfig, population: Population[Signal], score: Chromosome[Signal]=> Unit, input: Array[QLInput]) extends PipeOperator[XcsSensor, List[XcsAction]] {
val gaSolver = GASolver[Signal](config.gaConfig, score)
val featuresSet: Set[Chromosome[Signal]] = population.chromosomes.toSet
val qLearner = QLearning[Chromosome[Signal]](config.qlConfig, computeNumStates(input), extractGoals(input), input, featuresSet)
// ...
}
XCS 算法使用配置、初始规则集、适应度函数和 Q 学习策略的输入进行初始化,以生成
qlLearner
的奖励矩阵。目标和状态数量从 Q 学习算法策略的输入中提取。在这个实现中,通用算法
gaSolver
是可变的,与
Xcs
容器类一起实例化。Q 学习算法与任何分类器一样是不可变的,其模型是奖励规则的最佳策略。状态数量或奖励方案的任何变化都需要一个新的学习器实例。
12. 学习分类器系统的优点和局限性
学习分类器系统,特别是 XCS,具有以下优点:
- 允许非科学家和领域专家使用熟悉的布尔构造和推理(如谓词和规则)来描述知识。
- 帮助分析师通过区分知识库的探索和利用需求,全面了解知识库及其覆盖范围。
然而,学习分类器系统也可能存在一些局限性,例如在处理大规模复杂问题时,计算成本可能较高,规则的生成和优化可能需要较长时间。在实际应用中,需要根据具体问题和需求,权衡其优缺点,选择合适的算法和方法。
强化学习与扩展学习分类器系统在投资组合管理中的应用
13. XCS 算法优化投资组合分配的流程
XCS 算法在投资组合管理中优化分配的流程可以概括如下:
1.
初始化
:使用配置
config
、初始规则集
population
、适应度函数
score
和 Q 学习策略的输入
input
初始化 XCS 算法。从输入中提取目标和状态数量,为 Q 学习算法生成奖励矩阵。
2.
数据获取
:传感器从环境中获取新的数据或事件,如投资组合中证券的交易信息和 10 年期国债收益率等。
3.
规则匹配
:搜索当前规则种群,找出条件与输入事件匹配的规则。如果没有匹配规则,通过覆盖机制生成新规则。
4.
规则排序与行动选择
:根据规则的适应度值对匹配的规则进行排序,选择预测结果最高的规则触发相应的行动,如改变投资组合的构成。
5.
奖励与适应度更新
:行动执行后,根据投资组合的盈亏计算奖励,使用 Q 学习算法为执行行动的规则分配信用,并更新规则的适应度。
6.
规则进化
:遗传算法使用交叉和变异等运算符更新规则种群,促进规则的进化和优化。
7.
循环迭代
:重复步骤 2 - 6,不断根据环境变化调整投资组合的分配,使算法收敛到更优的规则和决策。
以下是该流程的 mermaid 流程图:
graph TD
A[初始化] --> B[数据获取]
B --> C[规则匹配]
C --> D{是否有匹配规则?}
D -- 是 --> E[规则排序与行动选择]
D -- 否 --> F[覆盖生成新规则]
F --> E
E --> G[行动执行]
G --> H[奖励与适应度更新]
H --> I[规则进化]
I --> B
14. 实际应用中的注意事项
在将 XCS 算法应用于投资组合管理时,需要注意以下几个方面:
-
规则初始化
:虽然规则可以随机生成,但使用领域专家提供的相关规则初始化 XCS 初始种群可以显著提高算法的收敛速度。在实际应用中,应尽可能收集和整合专业知识,为算法提供一个良好的起始点。
-
参数设置
:XCS 算法涉及多个参数,如遗传算法的交叉率、变异率,Q 学习算法的学习率、折扣因子等。这些参数的设置对算法的性能有重要影响,需要根据具体问题和数据集进行调优。可以使用网格搜索、随机搜索等方法进行参数优化。
-
数据质量
:输入数据的质量直接影响算法的性能。在投资组合管理中,需要确保交易信息、宏观经济数据等的准确性和及时性。同时,要对数据进行预处理,如去除噪声、归一化等,以提高算法的稳定性和可靠性。
-
计算资源
:XCS 算法在处理大规模数据集和复杂问题时,可能需要较高的计算资源。在实际应用中,需要根据可用的计算资源,合理调整算法的复杂度和规模,或者采用分布式计算等技术来提高计算效率。
15. 与其他投资组合管理方法的比较
与传统的投资组合管理方法相比,XCS 算法具有以下特点:
|方法|优点|缺点|
|----|----|----|
|XCS 算法| - 能够适应环境的不断变化,自动生成和优化规则。
- 结合了强化学习、遗传算法和规则推理,具有较强的学习和决策能力。
- 允许领域专家使用熟悉的规则语言描述知识。| - 计算成本较高,特别是在处理大规模问题时。
- 规则的生成和优化需要一定的时间,可能不适合实时性要求较高的场景。|
|传统均值 - 方差模型| - 理论基础成熟,计算相对简单。
- 能够在一定程度上平衡风险和收益。| - 假设资产收益率服从正态分布,与实际情况可能不符。
- 对输入参数的变化较为敏感,稳定性较差。|
|现代智能算法(如神经网络)| - 具有强大的非线性拟合能力,能够处理复杂的数据集。
- 可以自动学习数据中的模式和规律。| - 模型解释性较差,难以理解其决策过程。
- 需要大量的训练数据,对数据质量要求较高。|
16. 未来发展趋势
随着金融市场的不断发展和技术的进步,XCS 算法在投资组合管理中的应用有望得到进一步拓展和深化。以下是一些可能的发展趋势:
-
多源数据融合
:除了传统的交易数据和宏观经济数据,未来 XCS 算法可能会融合更多类型的数据,如社交媒体数据、新闻资讯等,以更全面地反映市场信息和投资者情绪,提高投资决策的准确性。
-
与其他技术的集成
:将 XCS 算法与区块链、云计算、人工智能等技术相结合,实现更高效、安全和智能的投资组合管理。例如,利用区块链技术保证数据的不可篡改和透明性,利用云计算提供强大的计算支持。
-
自适应策略优化
:进一步提高 XCS 算法的自适应能力,使其能够根据市场环境的快速变化实时调整策略。例如,引入元学习机制,让算法能够自动学习如何在不同的市场条件下选择最优的参数和规则。
-
跨领域应用拓展
:XCS 算法的思想和方法可以拓展到其他领域,如风险管理、供应链管理、资源分配等,为解决复杂的决策问题提供新的思路和方法。
17. 总结
XCS 算法作为一种结合了强化学习、遗传算法和规则推理的智能算法,在投资组合管理中具有独特的优势。它能够适应环境的变化,自动生成和优化规则,帮助投资者做出更合理的决策。然而,在实际应用中,也需要注意规则初始化、参数设置、数据质量和计算资源等问题。与其他投资组合管理方法相比,XCS 算法各有优缺点,需要根据具体情况选择合适的方法。未来,随着技术的不断发展,XCS 算法有望在金融领域和其他领域发挥更大的作用。
通过深入研究和实践 XCS 算法,我们可以更好地理解其原理和应用,为投资组合管理和其他决策问题提供更有效的解决方案。同时,不断探索和创新,将其与其他技术相结合,推动智能决策领域的发展和进步。
超级会员免费看
1124

被折叠的 条评论
为什么被折叠?



