这是交叉最基本的形式,我们称其为「单点交叉」。这里我们随机选择一个交叉点,然后,将交叉点前后的染色体部分进行染色体间的交叉对调,于是就产生了新的后代。 如果你设置两个交叉点,那么这种方法被成为「多点交叉」,见下图: 4.5 变异 如果现在我们从生物学的角度来看这个问题,那么请问:由上述过程产生的后代是否有和其父母一样的性状呢?答案是否。在后代的生长过程中,它们体内的基因会发生一些变化,使得它们与父母不同。这个过程我们称为「变异」,它可以被定义为染色体上发生的随机变化,正是因为变异,种群中才会存在多样性。 下图为变异的一个简单示例: 变异完成之后,我们就得到了新为个体,进化也就完成了,整个过程如下图: 在进行完一轮「遗传变异」之后,我们用适应度函数对这些新的后代进行验证,如果函数判定它们适应度足够,那么就会用它们从总体中替代掉那些适应度不够的染色体。这里有个问题,我们最终应该以什么标准来判断后代达到了最佳适应度水平呢? 一般来说,有如下几个终止条件: 在进行 X 次迭代之后,总体没有什么太大改变。 我们事先为算法定义好了进化的次数。 当我们的适应度函数已经达到了预先定义的值。 好了,现在我假设你已基本理解了遗传算法的要领,那么现在让我们用它在数据科学的场景中应用一番。 5、遗传算法的应用 5.1 特征选取 试想一下每当你参加一个数据科学比赛,你会用什么方法来挑选那些对你目标变量的预测来说很重要的特征呢?你经常会对模型中特征的重要性进行一番判断,然后手动设定一个阈值,选择出其重要性高于这个阈值的特征。 那么,有没有什么方法可以更好地处理这个问题呢?其实处理特征选取任务最先进的算法之一就是遗传算法。 我们前面处理背包问题的方法可以完全应用到这里。现在,我们还是先从建立「染色体」总体开始,这里的染色体依旧是二进制数串,「1」表示模型包含了该特征,atv,「0 表示模型排除了该特征」。 不过,有一个不同之处,即我们的适应度函数需要改变一下。这里的适应度函数应该是这次比赛的的精度的标准。也就是说,如果染色体的预测值越精准,那么就可以说它的适应度更高。 现在我假设你已经对这个方法有点一概念了。下面我不会马上讲解这个问题的解决过程,而是让我们先来用 TPOT 库去实现它。 5.2 用 TPOT 库来实现 这个部分相信是你在一开始读本文时心里最终想实现的那个目标。即:实现。那么首先我们来快速浏览一下 TPOT 库(Tree-based Pipeline Optimisation Technique,树形传递优化技术),该库基于 scikit-learn 库建立。下图为一个基本的传递结构。 图中的灰色区域用 TPOT 库实现了自动处理。实现该部分的自动处理需要用到遗传算法。 我们这里不深入讲解,而是直接应用它。为了能够使用 TPOT 库,你需要先安装一些 TPOT 建立于其上的 python 库。下面我们快速安装它们: # installing DEAP, update_checker and tqdm pip install deap update_checker tqdm # installling TPOT pip install tpot 这里,我用了 Big Mart Sales(数据集地址:https://datahack.analyticsvidhya.com/contest/practice-problem-big-mart-sales-iii/)数据集,为实现做准备,我们先快速下载训练和测试文件,以下是 python 代码: # import basic libraries importnumpy asnp importpandas aspd importmatplotlib.pyplot asplt %matplotlib inline fromsklearn importpreprocessing fromsklearn.metrics importmean_squared_error ## preprocessing ### mean imputations (责任编辑:本港台直播) |