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

所以我意识到我在这里问的是大而复杂的问题。

一个潜在的解决方案

在我通过统计论坛和帖子进行的所有搜索中,我没有遇到一个科学合理的方法来考虑到我遇到的数据类型,
但是我已经考虑了一个(小说)潜在的解决方案,以完美地(在我心目中)对同一模型中的大型和小型数据集进行考虑。

所提出的方法涉及使用遗传算法来改变两个数字,这两个数字定义了构成隐含罢工率的数据集的大小与
要使用的隐含罢工的百分比,模型的目标最大化以下csv的两列中的数字1的同源性。 (超简化
但希望表明原则)

示例数据

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

所以我创建了一个小的模型数据集,其中包含了一些很好的例子,我现在的方法很少,我觉得遗传算法可以用来解决这个问题。如果我们查看上面的数据集,它包含6个独特的类,算法的最终目标是在调整的x / y的等级和列3中的实现等级之间创建尽可能高的对应关系(基于零的参考)在uniqueclass1我们有两个相同的x / y值,如果与平均值进行比较,则这些值相对较大的x / y值(注意平均值不是从该数据集计算的),但是希望3000/9610是常见的更重要,因此更可能达到300/961的1级。所以我想做的是使用由等式定义的对数增长关系来调整x / y以克服数据集大小中的这些差异:

调整后的xy =((1-exp(-y *α))* x / y))((1-(1-exp(-y *α)))*平均xy)

其中α是唯一的动态数

如果我可以解释一下我的逻辑,开放自己(希望)建设性的批评。下图显示了数据集的大小与x / y的调整x / y的百分比之间的指数增长关系。数据集越大,调整后的x / y中使用的原始x / y的百分比越大,上述方程式就越显着。剩下的任何百分比由平均xy组成。假设可以假设为75%x / y,平均xy为300/961平均为25%,3000/9610为95%/ 5%,创造了一个调整后的x / y,这清楚地表明了

为了帮助理解α的降低将产生以下关系,其中将通过更大的数据集来实现相同的“xy贡献的%”

相应地增加α将产生以下关系,其中将通过较小的数据集来获得相同的“贡献的%”

所以我已经解释了我的逻辑。我也可以使用代码段来帮助我克服这个问题。我计划在未来做出许多遗传/进化算法,并且可以真正使用一个工作实例来分解和玩,以帮助我理解如何利用这种python的这种能力。如果需要额外的细节或进一步澄清问题或方法,请问,我真的想能够解决这个问题和今后的这个问题。

所以经过多次讨论可以克服这里提出的问题的方法,我得出结论,他最好的方法是一个迭代α的遗传算法,以便最大化一个调整后的x / y的等级之间的同源性/对应性在第3列中取得的排名。如果有人能够在该部门帮助,将非常感谢

为了澄清,这篇文章不再是关于方法论的讨论

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

调整后的xy =((1-exp(-y *α))* x / y))((1-(1-exp(-y *α)))*平均xy)

其中调整的xy适用于csv的每一行。最大化同源性可以通过最小化调整后的xy(排名由每个唯一类别)到达到的等级之间的差异来实现。
最小化这个值将最大化同源性,并且基本上解决了向不同大小数据集呈现给我的问题。如果有任何更多的信息需要,请问,我每天检查这个帖子大约20次,所以应该及时回复。非常感谢SMLYLY。

从一般的角度来看,你所面临的问题就像“Bias Variance Dilemna”一样。简而言之,更精确的模型有利于差异(对单个训练集中的变化的敏感性),更一般的模型有利于偏见(适用于许多训练集的模型)

我可以建议不要专注于GA,而是查看实例基础学习和高级回归技术。 CMU的Andrew moore页面是good entry point

特别是those slides

[编辑]

二读后,这是我的第二个理解:

>您有一组具有两个相关属性X和Y的示例数据。
>当Y不小时,不要X / Y占主导地位(被认为较少代表)。
>因此,你想用一个适应的值adjust_xy来“比较”这些例子。
>你希望adjust_xy与第三个属性R(rank)有关。相关的,如每个类,adjust_xy被排序像R.
>为此,建议将其作为优化问题,搜索给定函数F(X,Y,PARAMS)= adjusted_xy的PARAMS。
>由于D = Distance(实现此类的排名,此类的calibr_xy的等级)的限制​​是最小的。

你的问题至少对我来说是在属性选择/属性适应领域。 (我猜这个数据集后来被用于监督学习)。

我在你的方法(如果很好理解)中看到的一个问题是,最终,等级将与calibr_xy高度相关,因此不会带来有趣的补充信息。

一旦这样说,我想你肯定知道GA是如何工作的。你必须

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

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

当您处理真实价值时,其他元启发式如进化策略(ES)或模拟吸引力可能比GA更适应。

由于解决优化问题是cpu密集型的,您最终可能会考虑使用C或Java而不是Python。 (因为健身至少会被解释,因此花费很多)。

或者,我将使用Y作为一些监督学习算法的重量(如果监督学习是目标)。

http://stackoverflow.com/questions/20320924/utilising-genetic-algorithm-to-overcome-different-size-datasets-in-model

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 利用遗传算法克服模型中不同大小的数据集