利用遗传算法克服模型中不同大小的数据集

SMN*_*LLY 17 python algorithm scipy genetic-algorithm python-2.7

所以我意识到我在这里提出的问题是庞大而复杂的.

对尺寸变化的潜在解决方案

在我通过统计论坛和帖子搜索的所有内容中,我没有遇到一种科学合理的方法来考虑我遇到的数据类型,但我已经想到一个(新颖的?)潜在的解决方案来完美地解决(在我的想法)对于同一模型中的大型和小型数据集.

所提出的方法涉及使用遗传算法来改变定义构成implied strike速率的数据集的大小implied strike与要使用的百分比之间的关系的两个数字,其中模型的目标最大化1两列中的数字的同源性.以下csv.(超简化但希望证明原理)

示例数据

Date,PupilName,Unique class,Achieved rank,x,y,x/y,Average xy
12/12/2012,PupilName1,UniqueClass1,1,3000,9610,0.312174818,0.08527
12/12/2012,PupilName2,UniqueClass1,2,300,961,0.312174818,0.08527
12/12/2012,PupilName3,UniqueClass1,3,1,3,0.333333333,0.08527
13/12/2012,PupilName1,UniqueClass2,1,2,3,0.666666667,0.08527
13/12/2012,PupilName2,UniqueClass2,2,0,1,0,0.08527
13/12/2012,PupilName3,UniqueClass2,3,0,5,0,0.08527
13/12/2012,PupilName4,UniqueClass2,4,0,2,0,0.08527
13/12/2012,PupilName5,UniqueClass2,5,0,17,0,0.08527
14/12/2012,PupilName1,UniqueClass3,1,1,2,0.5,0.08527
14/12/2012,PupilName2,UniqueClass3,2,0,1,0,0.08527
14/12/2012,PupilName3,UniqueClass3,3,0,5,0,0.08527
14/12/2012,PupilName4,UniqueClass3,4,0,6,0,0.08527
14/12/2012,PupilName5,UniqueClass3,5,0,12,0,0.08527
15/12/2012,PupilName1,UniqueClass4,1,0,0,0,0.08527
15/12/2012,PupilName2,UniqueClass4,2,1,25,0.04,0.08527
15/12/2012,PupilName3,UniqueClass4,3,1,29,0.034482759,0.08527
15/12/2012,PupilName4,UniqueClass4,4,1,38,0.026315789,0.08527
16/12/2012,PupilName1,UniqueClass5,1,12,24,0.5,0.08527
16/12/2012,PupilName2,UniqueClass5,2,1,2,0.5,0.08527
16/12/2012,PupilName3,UniqueClass5,3,13,59,0.220338983,0.08527
16/12/2012,PupilName4,UniqueClass5,4,28,359,0.077994429,0.08527
16/12/2012,PupilName5,UniqueClass5,5,0,0,0,0.08527
17/12/2012,PupilName1,UniqueClass6,1,0,0,0,0.08527
17/12/2012,PupilName2,UniqueClass6,2,2,200,0.01,0.08527
17/12/2012,PupilName3,UniqueClass6,3,2,254,0.007874016,0.08527
17/12/2012,PupilName4,UniqueClass6,4,2,278,0.007194245,0.08527
17/12/2012,PupilName5,UniqueClass6,5,1,279,0.003584229,0.08527
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个很小的模型数据集,其中包含一些很好的例子,说明我当前的方法不足之处,以及我觉得遗传算法可以用来解决这个问题.如果我们查看上面的数据集,它包含6个唯一的类,该算法的最终目标是在调整的排名x/y和第achieved rank3列(基于零的参考)之间创建尽可能高的对应关系.在uniqueclass1我们有两个相同的x/y值,现在这些都是比较大的x/y,如果你用的平均水平进行比较(注意是平均不从这个数据集计算)值,而这将是预期,九千六百十分之三千更显著,因此更有可能有一个常识achieved rank1比961分之300.所以我想做的是adjusted x/y使用等式定义的对数增长关系克服数据集大小的这些差异:

adjusted xy = ((1-exp(-y*?)) * x/y)) + ((1-(1-exp(-y*?)))*Average xy)

?唯一的动态数字在哪里

如果我可以稍微解释一下我的逻辑,并打开自己(希望)建设性的批评.下图显示了数据集大小与调整后的x/y的x/y%之间的指数增长关系.基本上上面的等式所说的是随着数据集变得越大,原始x/y使用的百分比adjusted x/y越大.剩下的百分比由平均xy组成.可假设为300/961 为75%x/y和25%average xy,3000/9610为95%/ 5%,创造了调整后的x/y,这清楚地表明了

数据集大小与调整后的x/y的x/y%之间的指数增长关系

为了帮助理解降低?将产生以下关系,其中需要更大的数据集以实现相同的"%xy贡献"

在此输入图像描述

相反增加 ?将产生以下关系:通过较小的数据集将需要获得相同的"xy贡献的百分比"

在此输入图像描述

所以我解释了我的逻辑.我也对代码片段持开放态度,以帮助我克服这个问题.我计划在未来制作大量的遗传/进化算法,并且可以真正使用一个工作示例来分开和玩耍,以帮助我理解如何利用这种python的能力.如果需要额外的细节或进一步澄清问题或方法,请问,我真的希望能够解决这个问题和未来这种性质的问题.

因此,在对可用于克服此处提出的问题的方法进行大量讨论之后,我得出结论,他最好的方法是迭代α的遗传算法,以便最大化调整的x/y的等级之间的同源性/对应性.第3栏中取得的排名.如果有人能够在该部门提供帮助,我们将非常感激.

所以要澄清一下,这篇文章不再是关于方法论的讨论

我希望有人可以帮助我制作遗传算法,以最大化方程结果之间的同源性

adjusted xy = ((1-exp(-y*?)) * x/y)) + ((1-(1-exp(-y*?)))*Average xy)

adjusted xy适用于CSV的每一行.最大化同源性可以通过最小化等级之间的差异adjusted xy(其中等级仅由每个等级Unique class)Achieved rank. 来实现,并且最小化该值将最大化同源性并且基本上解决了呈现给我的不同大小数据集的问题.如果需要更多信息请询问,我现在每天检查这篇文章大约20次,所以应该及时回复.非常感谢SMNALLY.

Lou*_*ues 2

从一般角度来看,您面临的问题在我看来就像“偏差方差困境” 。简而言之,更精确的模型有利于方差(对单个训练集变化的敏感性),更通用的模型有利于偏差(模型适用于许多训练集)

我建议不要关注 GA,而是关注实例基础学习和高级回归技术。CMU 的 Andrew Moore 页面是一个很好的切入点

尤其是那些幻灯片

[编辑]

经过第二次阅读,我的第二个理解是:

  • 您有一组具有两个相关属性 X 和 Y 的示例数据。
  • 当 Y 很小时,您不希望 X/Y 占主导地位(被认为代表性较差)。
  • 因此,您希望使用调整后的值 adjustment_xy 来“衡量”示例。
  • 您希望 adjustment_xy 与第三个属性 R(等级)相关。相关的,例如,每个类,调整后的xy像R一样排序。

  • 为此,您建议将其作为优化问题,搜索给定函数 F(X,Y,PARAMS)= adjustment_xy 的 PARAMS 。

  • 约束条件是 D=Distance(达到该类的排名,该类的 adjustment_xy 的排名)是最小的。

至少对我来说,您的问题是在属性选择/属性适应领域。(我猜该数据集稍后将用于监督学习)。

我在您的方法中看到的一个问题(如果很好理解的话)是,最后,排名将与 adjustment_xy 高度相关,因此不会带来有趣的补充信息。

说到这里,我想你肯定知道 GA 是如何工作的了。你必须

  • 定义染色体的内容:这似乎是您的 alpha 参数。
  • 定义适当的适应度函数

一个人的适应度函数可以是数据集所有示例的距离之和。

当您处理真实值时,其他元启发法(例如进化策略(ES)或模拟退火)可能比遗传算法更适合。

由于解决优化问题需要占用大量 CPU 资源,因此您最终可能会考虑使用 C 或 Java 而不是 Python。(因为健身至少会被解释,因此花费很多)。

或者,我会考虑使用 Y 作为某些监督学习算法的权重(如果监督学习是目标)。