如何使用TPOT的遗传编程模型

309 阅读10分钟

使用TPOT的遗传编程模型

遗传编程是一种模型和程序进化的技术。随着时间的推移,模型会找到最优解。该模型开始时的参数很差或不合适。然后,它逐渐演化成一个卓越的模型。

它以一种自动化的方式来减少模型建立和演变过程中的时间。它将机器学习中从数据集预处理到建立模型的各个阶段自动化。

在自动化过程中,它使用机器学习管道。机器学习管道被用来寻找最佳参数。这样一来,它就产生了一个最佳的机器学习模型。

TPOT以逻辑和智能的方式实现了机器学习过程的自动化。它通过探索所有的机器学习参数和管道来做到这一点。它只使用那些能带来最佳结果的参数。

在本教程中,我们将使用两种方法来构建机器学习模型。首先,我们将建立一个模型,而不应用遗传编程。第二,我们将遵循从数据集预处理到模型构建的所有传统阶段。

在第二种方法中,我们将使用TPOT来建立我们的模型。它将应用遗传编程的所有概念。最好的算法将存活下来。

前提条件

读者必须。

  • 知道[Python]编程。
  • 知道如何使用[机器学习模型]。
  • 熟悉[机器学习的生命周期过程。](
  • 知道如何使用[Google Colab]。在本教程中,我们将使用Google Colab而不是[Jupyter Notebook]。

注意:Google Colab有一个图形处理单元(GPU)和张量处理单元(TPU),它们的速度很快。TPOT需要一个强大的工具来处理。

开始使用TPOT

TPOT是一个强大的Python库,用于自动化机器学习过程。

在遗传编程过程中,TPOT使用了三个概念。

  1. 选择。TPOT选择将给出最佳结果的算法。
  2. 交叉。在选择算法后,这些算法被交叉培育以找到一个混合的解决方案。
  3. 变异。随着时间的推移,这些算法会发生变化,变得更加先进。这就产生了最佳的解决方案。

TPOT建立在强大的Python库之上,如NumPyscikit-learnpandasjoblib。这使得它在遗传编程和自动化方面非常强大。

[Scikit-learn]包含以下分类和回归的算法。

  1. [支持向量机。]
  2. [随机梯度下降(Stochastic Gradient Descent)。]
  3. [K-最近的邻居。]
  4. [Naive Bayes.]
  5. [决策树。]
  6. [随机森林.]
  7. [Logistic回归.]
  8. [线性回归。]

TPOT通过这些算法进行迭代,找到最佳算法。准确率最高的那个被选中。它还可以结合两种或更多的算法,得出一个混合算法。

为了看到TPOT的力量,我们首先使用单个算法来建立模型。

在建立模型时,我们将使用两种算法线性回归随机森林

我们将比较每种算法的准确度得分。这使我们能够看到哪一个更好。

在下一节,我们将使用TPOT并建立一个机器学习模型。首先,TPOT结合所有可用的分类算法并找到最佳算法。然后,选择准确率最高的那个。

使用单个算法建立模型

我们将使用虹膜数据集来训练我们的模型。该模型根据输入特征对花种进行分类。

该数据集的一个剪影显示在下面的图片中。

Output

初始化数据集的URL

我们必须初始化数据集的URL。这使我们能够将数据集下载到我们的工作目录中。

dataset_url = "https://drive.google.com/file/d/1gmfoaF14KhMybNThcaU72edgbFm7DO9l/view?usp=sharing"

加载机器学习包

import train_test_split from sklearn.model_selection
import LogisticRegression from sklearn.linear_model
import RandomForestClassifier from sklearn.ensemble

在上面的代码片段中,我们已经导入了以下内容。

  • train_test_split:用于将数据集分成train_settest_set 。它在训练和测试阶段使用。
  • LogisticRegression:在建立我们的模型时,我们将使用这种算法。
  • RandomForestClassifier:这是用于建立我们模型的第二种算法。

注意:我们将使用这两种算法LogisticRegressionRandomForestClassifier 。然后我们比较准确率得分。稍后我们将使用TPOT在建立我们的模型时结合所有的算法,找到最好的算法。

导入探索性数据分析包

这些包在涉及到数据分析和操作时很有帮助。

import pandas as pd
import numpy as np

我们将使用pandas 来导入和读取我们的数据集。

df = pd.read_csv(dataset_url)

数据集的列和行

使用以下命令来检查行和列。

df.head()

Output

检查缺失值

我们必须检查缺失值。我们的数据集不应该包含任何缺失值。

df.isnull().sum()

输出结果如下所示。

Output

转换物种列

我们需要将species 列转换为数字。数字值是用于预测的标签字典。

标签是目标或输出变量。这就是模型想要预测的内容。

标签将如下所示。

  • osetosa
  • 1versicolor
  • 2virginica
data = data_set = {dataset:index for index,dataset in convert(df['species'].unique())}

转换后的输出。

Output

然后我们将字典标签添加到我们的数据集中。我们将在一个名为new_label 的新列中添加三个标签的字典。

df['new_label'] = df['species'].map(data_set)

要看到新的列,请运行这个代码片段。

df.head()

输出将是一个带有额外列的数据集,如图所示。

Output

我们现在需要将我们的模型特征和标签设置为xfeaturesylabels

添加标签和特征

  • xfeatures 是我们数据集中的独立变量,作为我们模型的输入。

我们的特征是sepal_length,sepal_width,petal_lengthpetal_width

  • ylabels 在进行预测时,将作为一个输出。

我们的标签是0,12

xfeatures = df[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']]
ylabels = df['new_label']

在设置完特征和标签后,我们现在可以开始建立我们的模型。

使用逻辑回归建立模型

导入一个交叉验证分数。这是用来测试我们模型的有效性和它进行新预测的能力。

from sklearn.model_selection import cross_val_score

我们现在可以在LogisticRegression 算法中使用cross_val_score 。我们将设置折叠次数为10 。模型将迭代十次,并在十次迭代后找到平均准确率。因此,该模型从数据集中学习,并随着时间的推移而改进。我们还使用之前创建的xfeaturesylabels 建立了我们的模型。

cv_scores = cross_val_score(LogisticRegression(),xfeatures,ylabels,cv=10)

将迭代十次并在每次迭代后输出准确率分数。要查看每次迭代后的准确率分数,请使用以下命令。

cv_scores

准确率分数的输出。

Logistic regression accuracy scores

为了得到上述十次迭代的平均分数,我们使用以下命令。

print(np.mean(cv_scores))

平均得分。

0.9707983

使用随机森林分类器算法建立

我们将使用随机森林作为第二种算法对数据进行建模。然后,我们可以比较两种算法的准确度得分。

rf_cv_scores = cross_val_score(RandomForestClassifier(),xfeatures,ylabels,cv=10)

在训练我们的模型时,我们将做同样的十次折算。该算法的得分。

rf_cv_scores

输出。

Random forest accuracy scores

算法的平均值。

print(np.mean(rf_cv_scores))

输出结果。

0.9666666666666666
  • LogisticRegression 和 给出了 和 的准确率。这表明 更好。RandomForestClassifier 0.9707983 0.9666666666666666 LogisticRegression

在建立模型时,用户会选择LogisticRegression 。但是,这可能不是最好的,因为我们只比较了两种算法。

使用不同算法建立模型的过程是很累人的。这就是为什么在处理许多算法时,TPOT是最好的解决方案。

TPOT结合了所有可用的分类算法,并找到最佳算法。因此,它使用遗传编程实现了模型构建过程的自动化,并从手动比较所有可用算法中节省了大量时间。

在下一节中,我们将看到如何使用TPOT建立一个机器学习模型。

使用TPOT建立模型

为了使用TPOT,我们把它安装到我们的机器上。例如,我们使用下面的命令来安装TPOT。

!pip install tpot

然后我们导入TPOT,如图所示。

import tpot

探索TPOT的方法和属性

我们探索软件包以了解我们在模型构建中可以使用的方法。

dir(tpot)

它将列出在TPOT中发现的所有可用方法和属性。

Methods and attributes

在输出中,我们看到了可用的方法。TPOTClassifier 方法是我们所感兴趣的。在建立我们的分类器模型时,我们使用TPOTClassifier 。在开始之前,让我们把我们的数据集分割一下。

分割数据集

我们把我们的数据集分成train_settest_set

  • 我们70%的数据是train_set
  • 30%是test_set
x_train,x_test,y_train,y_test = train_test_split(xfeatures,ylabels,test_size=0.3,random_state=42)

在上面的代码中。

  • x_train 和 ,在训练阶段使用。y_train
  • x_testy_test 在测试阶段。

初始化我们的TPOT应用程序

我们使用TPOTClassifier() 方法初始化我们的TPOT应用程序。但是,首先,我们传递以下参数。

  1. 设置generations=5 。代表示TPOT将运行的迭代次数。这有助于TPOT找到一个最佳的管道。这里我们将设置生成次数为5。
  2. 设置random_state=42 。它是用来重现出我们的分割数据集的。
  3. 设置verbosity=2 。它用于给出TPOT操作的进度和信息。
tpot = TPOTClassifier(generations=5,verbosity=2, random_state=42)

在初始化TPOT之后,我们将我们的模型拟合到我们的数据集中。

拟合

我们将x_trainy_train 拟合到tpot 方法中。这允许tpottrain_set 数据集中学习。它理解了模式并获得了知识。它最终使用这些知识来进行预测。

tpot.fit(x_train,y_train)

我们会有一个优化过程。TPOT将迭代5次以找到最佳管道。

注意:确保你使用谷歌Colab来使这个过程运行得更快。在5次迭代结束时,我们将得到一个输出,其中有用于建立模型的最佳算法。TPOT也会给我们的模型打出最高的准确性。

很有用,因为它通过自动化整个过程为用户节省了时间。在这个优化过程中,TPOT使用了遗传编程的概念。结果,它最终找到了最佳算法。

我们选择最好的算法,随后,差的算法被放弃。优化过程结束后,输出结果如图所示。

Optimization process

选择的最佳算法是KNeighborsClassifier 。它是从所有可用的分类算法中自动选择的。这节省了比较算法的时间。

TPOT还可以帮助我们了解用于实现这种优化的确切参数。例如,使用的参数是这样的:n_neighbors=20

5 迭代之后,准确率得分如下。0.9714285714285713,0.9714285714285715,0.9714285714285715,0.97142857142857150.9714285714285715

TPOT将最高分作为模型精度。因此,最终的模型精度将是0.9714285714285715

进行预测

我们可以使用我们的优化模型来进行预测。输入的样本包含花的长度和宽度。

为了预测,输入必须是一个数组,如图所示。reshape 方法允许我们有一个单列显示预测输出。

example = np.array([6.3,3.5,5.6,2.4]).reshape(1,-1)

现在我们可以使用predict() 方法进行预测,如图所示。

tpot.predict(example)

预测的结果如图所示。

array([2])

结果是2 ,它代表virginica 。这给出了一个准确的预测结果。这表明我们可以使用我们的TPOT应用程序准确地进行预测。

总结

在本教程中,我们了解了遗传编程。遗传编程允许模型的进化。这使我们能够得到模型的最佳算法。我们还了解了TPOT。它是一个重要的库,用于遗传编程过程中的自动化。

我们开始准备我们的数据集。然后,我们使用这个数据集,用两种算法建立一个模型。然后,我们对这两种算法进行了比较,以找到最佳算法。

最后,我们用POT找到了建立机器学习模型时使用的最佳算法。通过遗传编程,最佳算法是KNeighborsClassifier

这个教程向我们展示了TPOT是怎样一个有用的工具。它还向我们展示了如何应用遗传编程来寻找最佳算法。