: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

古期:一篇很棒的测试(回测)技术文章 外语翻译[古期心得]

古期:一篇很棒的测试(回测)技术文章 外语翻译[古期心得]

网友Tianba提供了一篇网络上的测试简报,觉得很棒,先在此探讨此文的内容,有时间,再来谈交易上的应用与问题.

这是简报的原始网址:

http://research.cs.tamu.edu/prism/lectures/iss/iss_l13.pdf

这篇简报,名为测试(Validation),分为四个部分来讨论.

中文的测试,涵盖的相当广,容易造成误解.这篇简报的原文,叫做Validatation,指的是有效性的测试.一般计算机程序的测试,指的是Verification,专门测试与解决程序撰写时所产生的问题.Verify动作在前,Validate在后.


以下是用中文来整理这篇简报




    第一部分,谈到的是测试的动机(Motivation):

有效性测试,处理模式识别上(pattern recognition)的两个基本问题:

    模型选择(Model selection):

    几乎所有的模式识别技术,都会有一个或多个自由参数(free parameters),如

      kNN分类法(kNN Classification Rule)中的邻近数(Number of neighbors),

      MLPs方法的网络数(network size),学习参数(learning parameters)与加权(weights).

    要如何针对特定的分类问题(given classification problem)中,选择"最佳"参数或模型呢?  

    绩效估计(Performance estimation):

    一旦选择了模型,要怎样来估计绩效呢?传统上,绩效的测量是采用真实误差率(True Error Rate),采用的分类(Classifier)与要处理的真实母体之间,所存在的误差率.(X5super注: 此并非母体的绩效高低,而是估计准确度,如果100分,误差率0.2,那母体只有80分,如果90分,误差率0,那母体就是90分了.前者的分数虽然较高,但是误差率高,估计就过于乐观.若以程序交易为例,这只是评估回测的可靠度,不管策略本身的绩效好坏)

    假如我们没有取样数的限制,这些问题就有了直接的答案:取最低的母体误差率(Error Rate on Entire Population),当然,这时候就等于真实误差率(True Error Rate).

    在实际的应用上,我们只能用有限的取样数,而且通常都比我们想要的还小.一种做法是,把所有的数据(trainning data),只当成一个分类(Classifier),并以此来估计误差率.这样,产生了两个主要问题:

    问题1) 最终选定的模型会过度匹配于我们使用的数据(trainning data),如果模型的参数越多,问题就更显着.

    问题2) 误差率的估计,会太过于乐观(低于True Error Rate).事实上,要取得学习资料(Trainning data)100%正确率的分类(classification),不是不寻常的事.(X5super注:这样的估计太过于乐观)

    另一个更好的做法是,holdout method:把学习数据(trainning data)分割为更多互不交集的区块(disjoint subsets).



    第二部分: holdout method

    切割后的区块(dataset),有两类:学习组(Trainning set),用来找分类(Classifier)的模型;另一类是测试组(Test set)用来评估这分类(classifier)的误差率.

    201309070020503948.jpg

    这个方法有两个缺点:一是通常我们拥有的数据不多,无法在做这样奢华的切割后,还有测试的能力与价值;另一个是,只切割成为一组的学习与测试数据,一旦我们不幸选择了不具代表性的那个组合,结果的误差率计算就没有估计的意义与价值了.

    这样的限制,是有一些重复取样的方法族群(family of resampling methods)可以克服的,这些方法需要更多的计算过程.比如交互验证法(Cross Validation):随机子取样(random subsampling),K-Fold交互验证,Leave-One-Out交互验证.另外,还有BootStrap(引导)方法.



    第三部分: Re-sampling techniques

    A) Random subsampling:

       将数据分割为K组.首先,随机决定K个号码小于总样本数,这些号码不重复,每个号码代表每一个分割的最终样本数.在每一个分割中,学习数据组(trainning samples),带入模型参数,测试数据组(test samples)估计误差率.

      201309070020505597.jpg

       总共产生K组的估计,最后的误差估计值E=ΣEi/K,显着的比holdout method单组估计好很多.

    B) K-Fold Cross Validation:

       建立K格位的数据组,也就是把所有的测试数据等分成K组:第K次的试验(experiments),采用前面K-1组的数据来学习(trainning),第K组的数据来测试(testing)

         201309070020500656.jpg


       此法与random subsampling类似.K-Fold Cross Validataion的优点,是每一个取样数据,最后都扮演过学习(trainning)与测试(testing)的脚色.

       绩效估计如同前者,误差估计值E=ΣEi/K.

    C) Leave-One-Out Cross Validation:

       这是K-Fold Validation的一种退化变形,总数据样本数就是K个.

       当样本数N个,就采取N个试验(experiments).第N次试验,采用前面N-1个的样本数据来学习(trainning),第N个样本数数据来试验(testing).         

       201309070020519143.jpg

       同样的,真实误差的估计=E=ΣEi/N.

       有一个有意思的问题,到底数据要折迭多少个分割(folds)呢?

       A)当数量大:

          (+有利):真实误差估计的偏差会很小(估计会接近正确)

          (-不利):真实误差估计的变异会很大

          (-不利):计算时间长

       B)当数量小:

          (有利):计算时间短

          (有利):真实误差估计的变异小

          (不利):真实误差估计的偏差会很大

       实务上,Folds的数量取决于拥有的样本数据数.当资料数够多,即使3-Fold Cross Valiation,也能有相当正确的估计.当数据数少,最好使用Leave-One-Out Cross Validation,尽量让试验数够多.

       K-Fold Cross Valiation一般的用法是K=10.

    第四部份: 数据三类别切割法(Three-Way data split)

    假如模型的选定与真实误差率的估计要同时算出,那么数据需要分割成互不交集的三部分.

    学习区(Trainning set):模型形成(learning)之用,让模型的参数符合这个分类(classifier).前面提到的MLP方法,在使用back-prop rule时,这学习区可以去寻找"最佳"的权数(weights).

    修正区(Validation set):用来微调参数.MLP方法在使用back Propagation算法时,修正区可以用来寻找"最佳隐藏单元的数量(number of hidden units),或决定停止点(stopping point)

    测试区(test set):只用来评估完全学习结束后的分类(classifier)绩效.(真实误差率).MLP方法在此已经选定了最终模型后(MLP size与实际权重),将估计模型误差率.在最终模型绩效估计后,不可再修改参数值了.

    把修正区(validation set)从测试区(test set)分离出来,有两个理由:一是合并选定模型与估计绩效在同一区的话,会低估误差率;另一个就是前面提过的,在最终模型绩效估计后,不可再修改参数值了.

    步骤纲要:

    1) 将可用的数据,分成学习(trainning set),修正(validation set)与测试(test set)三部分.

    2) 选定架构(architecture)与参数

    3) 用学习区(tranning set)的数据,让模型学习形成.

    4) 用修正区(validation set)的数据,来评价(evaluate)模型.

    5) 用不同的架构与学习参数,重复步骤2~4.

    6) 选定模型,并且用学习区与修正区的数据来学习

    7) 用测试数据(test set),来评估(assess)最后的模型.

    以上的步骤是假设用holdout method.如果用的是Cross Validation或Bootstrap方法,对于K folds中的每一个,都要重复步骤3与4.


201309070020527315.jpg

201309070020491546.jpg (26.87 KB)

201309070020491546.jpg

201309070020503948.jpg (34.32 KB)

201309070020503948.jpg


论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表