V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bowbow93
V2EX  ›  投资

参数优化的 Bayesian Optimization 方法-- Raquant 镭矿量化平台

  •  
  •   bowbow93 · 2016-06-13 14:41:02 +08:00 · 4614 次点击
    这是一个创建于 3110 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很多时候我们比较头痛参数该怎么选取的问题,比如: KDJ 的回看时间设多少, PE 的上限设多少,版块的选股比例设多少。即便不是处女座,在我们写交易策略的时候也都希望能把参数调整到一个自己满意的数值,当交易系统变的复杂,手动优化这些参数就显得非常的费力,而单用历史数据去一个模块一个模块的优化,很有可能会过度拟合。

    那该如何是好呢?

    这里我来简单分享下我自己的参数优化方法: Bayesian Optimization

    先说明一下, Bayesian Optimization 和传统的优化方法完全不是一回事,一般我们优化就是梯度下降, variational inference 等解析方法或者 MCMC , particle filter 等随机取样的方法。但这些方法的前提是这个函数你是知道的。在很多实际情况下,原函数是没有数学表达式的,比如交易系统的回测效果,他也是一个函数,但是没有表达式。 这个时候就需要 BO 了。

    Bayesian Optimization :

        Beyesian Optimization(BO)是在原函数未知的情况下去最优化该函数的一种方法。比如,我们有个交易策略,里面有三个参数需要优化来使得该策略回测的收益最大。那这里的函数就是我们的交易策略,输入是这三个参数,输出是回测的收益率。我们不可能用梯度方法找参数的最优解,因为交易策略木有梯度可求,臣妾算不出来啊。这时候就需要 BO 闪亮登场了。
    
       BO 是先用一个 data driven 的模型去近似原函数,然后在近似的函数上找最值。在回测的例子中, BO 会用一个模型去构建交易策略的参数和回测效果之间的函数关系,我们用不同的参数进行回测,会有不同的回测表现,再根据这些表现去调整参数。是不是和我们手动去猜参数的过程一模一样!!!
    
        对, BO 其实就是在做我们平常一直做的事情,不停的回测不停的猜。但是我们总希望通过尽可能少的回测次数来得到最优的参数。这时候盲目去猜就比 BO 的效果差距十万八千里了。这里我就简单介绍下神奇而贴心的 BO 。
    

    import numpy as np import pandas as pd import matplotlib.pyplot as plt import scipy as sp from sklearn import gaussian_process from raquant import * import math 假设我们有如下一个未知的函数,我们不知道其函数形式,只能是给出自变量 xx ,然后函数能返回一个应变量 yy ,其他信息一概不知。

    为了实验起见,我们假装不知道如下一个函数:

    def func(x): mu1 = 0.3 var1 = 0.01 mu2 = 0.6 var2 = 0.03 y = (1/np.sqrt(2math.pivar1)) * math.exp(-(x-mu1)2./var1) + (1/np.sqrt(2math.pivar2)) * math.exp(-(x-mu2)**2./var2) return y 假设我们只知道如下的 3 个样本点了:

    x = np.linspace(0,1,200) y=[] for i in x: y.append(func(i)) y=np.array(y) plt.plot(x,y,'-r')

    xtr=np.array([0.1,0.5,0.8]) ytr=[] for i in xtr: ytr.append(func(i)) ytr=np.array(ytr) plt.plot(xtr,ytr,'ko',markersize = 10)

    当前只有三个观测值 (x=0.1 , y=0.0736),(x=0.5,y=1.7235),(x=0.8,y=0.6071)(x=0.1 , y=0.0736),(x=0.5,y=1.7235),(x=0.8,y=0.6071)

    我们的目标是尝试不同的 xx 来找到 yy 的最小值。再强调下,如果我们知道函数的形式,可以用梯度下降方法直接解决,但问题是我们连函数长啥样都没见过,只能瞎猫碰死老鼠了。那怎么去猜,如何减少猜的次数就是个问题。

    好,既然函数本身不知道,我们用其他的函数模拟他, BO 常用的拟合工具就是万金油的 Gaussian process(GP)。为啥用 GP 呢,原因很简单,在我们对建模缺乏经验时都会无脑假设为高斯类分布。。。现在做 BO 的也有拿 deep network 来做的,不过纯属因为 deep learning 比较火,好发文章,其实实际效果不如 GP 来的靠谱。

    直接上公式吧,给定观测值 yD,对某个给定的 xx ,其观测值 yxyx 的后验分布 N(yx|D,Kxx|D)

    详细后续内容请查看:

    http://raquant.com/qa/index.php?qa=248&qa_1=参数优化的 bayesian-optimization 方法

    ps:参与注册体验 raquant.com 量化交易平台并向我们提出您的意见与建议,我们还会有大礼相送哟。

    详情垂询: QQ-821535969.

    3 条回复    2017-03-02 12:27:26 +08:00
    mocxe2v
        1
    mocxe2v  
       2016-08-07 09:24:30 +08:00
    推荐一个靠谱的量化投资入门教程
    makegg
        2
    makegg  
       2016-08-27 18:45:39 +08:00
    濮元凯有一套简单的入门级视频教程
    raquant
        3
    raquant  
       2017-03-02 12:27:26 +08:00
    @mocxe2v http://www.raquant.com/qa/index.php?qa=314&qa_1=%E5%88%9D%E8%AF%86%E9%87%8F%E5%8C%96-%E7%AE%97%E6%B3%95%E4%BA%A4%E6%98%93 ,我们平台有一系列的教程贴,包括简单易懂的金融学,量化教程和策略教学。欢迎学习
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   7 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:57 · PVG 05:57 · LAX 13:57 · JFK 16:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.