APP下载

在R中使用遗传演算法进行特征选择

消息来源:baojiabao.com 作者: 发布时间:2024-06-01

报价宝综合消息在R中使用遗传演算法进行特征选择

点选上方关注,All in AI中国这是一篇关于在R中使用遗传算法进行特征选择的文章,我们先快速回顾一下:

什么是遗传算法?机器学习中的遗传算法(GA)解决方案是什么样的?GA流程及其运算子适应度函式R中的遗传算法!亲自尝试一下相关概念动画来源:“基于肌肉的双足生物运动” - Thomas Geijtenbeek

背后的秘密

想象一个黑盒子可以帮助我们产生无限多种可能性,其标准是我们可以找到一个可接受的解决方案(时间和质量)来解决我们制定的问题。

什么是遗传算法?

遗传算法(GA)是一个受著名的查尔斯达尔文自然选择思想启发的数学模型。

自然选择仅保留了不同代人中最适合的个体。

想象一下,1900年有100只兔子,我们会比兔子祖先更快、更熟练地找到食物。

机器学习中的GA

在机器学习中,遗传算法的一个用途是获取正确数量的变数以建立预测模型。

选择正确的变数子集是一个组合优化的问题。

这种技术优于其他技术的优势在于,它可以从最好的先前解决方案中获得最佳解决方案。一种进化算法,随着时间的推移可以改进选择。

GA的想法是将一代又一代的不同解决方案结合起来,从每一个解决方案中提取最佳基因(变数)。这样就形成了更新、更适合的个体。

我们可以找到GA的其他用途,例如超调节引数,找到函式的最大值(或最小值)或搜寻正确的神经网络结构(Neuroevolution),或者其他......

特征选择中的GA

作为选定变数(单个兔子)的GA的每个可能解决方案都被视为一个整体,它不会针对目标单独对变数进行排序。

这很重要,因为我们已经知道变数在组中是起作用的。

解决方案是什么样的?

举个简单的例子,假设我们总共有6个变数,

一个解决方案可以是获取3个变数,比方说:var2、var4和var5。

另一种解决方案可以是:var1和var5。

这些解决方案是人群中所谓的个体或染色体。它们是解决问题的可能办法。

从影象中可以看出,解3可以表示为单热向量:c(1,0,1,0,1,1)。每个1表示包含该变数的解决方案。在这种情况下是:var1、var3、var5、var6。

而解决方案4是:c(1,1,0,1,1,0)。

载体中的每个位置都是一个基因。

GA过程及其运算子

遗传算法的基本思想是生成一些随机可能的解决方案(称为人口),它们代表不同的变数,然后在迭代过程中组合最佳解决方案。

这种组合遵循基本的GA操作,即:选择、变异和交叉。

选择:在一代人中挑选最适合的人(即:提供最高ROC的解决方案)。交叉:基于两种解决方案的基因建立2个新个体。这些”孩子“将出现在下一代。突变:在个体中随机改变基因(即:将0翻转为1)这个想法是针对每一代人,我们会找到更好的个体,就像跑得很快的兔子一样。

我推荐Vijini Mallawaarachchi关于遗传算法如何工作的帖子。

这些基本操作允许算法通过以最大化目标的方式组合它们来改变可能的解决方案。

适应度函式

例如,该目标最大化是为了保持与最大化ROC曲线下面积最大化的解。这是在适应度函式中定义的。

适应度函式采用一个可能的解决方案(或染色体,如果您想要听起来更复杂的话),并以某种方式评估选择的有效性。

通常,适应度函式采用单热向量c(1,1,0,0,0,0),例如,建立一个具有var1和var2的随机森林模型,并返回适应值(ROC)。

此程式码中的适应度值计算为:ROC值/变数数。通过这样做,该算法利用大量变数惩罚解。类似于Akaike资讯标准或AIC的想法。

R中的遗传算法!

我的目的是为您提供一个干净的程式码,以便您可以了解背后的内容,同时尝试修改适应度函式等新方法。这是至关重要的一点。

要在您自己的资料集上使用,请确保data_x(资料框)和data_y(因子)与custom_fitness函式相容。

主库是由Luca Scrucca开发的GA。请看这里的示例。

重要提示:以下程式码不完整。克隆储存库以执行该示例。

蓝点:总体适合度平均值绿点:最佳适应度值注意:不要期望那么快的结果

现在我们根据最佳选择计算精度!

精度约为95,08%,而ROC值接近0.95(ROC =适应值*变数数,检查适应度函式)。

分析结果

我不喜欢在没有截断点的情况下分析准确度(评分资料),但是与这个Kaggle帖子的结果进行比较是有用的。

他使用基于5个变数的递回特征消除或RFE获得了类似的精度结果,而我们的解决方案保持在4。

亲自尝试一下

尝试新的适应度函式,有些解决方案仍然提供大量变数,可以尝试平方变数的数量。

要尝试的另一件事是获取ROC值的算法,甚至是更改度量标准的算法。

一些配置持续很长时间。在建模之前平衡类并使用p_sampling引数。取样技术可以对模型产生重大影响。有关详细资讯,请检视模型效能帖子上的样本大小和类平衡。

如何改变基因突变率或成为精英主义的比率?或尝试其他交叉方法?

增加popSize以同时测试更多可能的解决方案(按时间成本)。

随意分享任何见解或想法,以改善选择。

克隆储存库以执行该示例。

相关的概念

GA和深度学习之间存在一种并行性、迭代和改进的概念随着时间的推移是相似的。

我添加了p_sampling引数以加快速度。它通常会实现其目标,与深度学习中使用的批处理概念类似。另一个相似之处是在GA引数执行和神经网络训练中的早期停止标准之间。

但最大的相似之处在于两种技术都来自于对自然的观察。在这两种情况下,人类都观察神经网络和遗传学如何工作,并建立了一个模仿其行为的简化的数学模型。大自然有数百万年的进化,为什么不尝试模仿它呢?

编译出品

2019-11-21 13:56:00

相关文章