获得有关如何从头到尾创建和运行分类模型的实践经验在此数据科学和机器学习教程中,获取有关如何从头到尾创建和运行分类模型的动手示例。本教程涵盖以下步骤:
数据探索
数据预处理
拆分数据以进行训练和测试
准备分类模型
使用流水线组装所有步骤
训练模型
对模型运行预测
评估和可视化模型性能
本教程包括一个用 Python 编写的 Jupyter Notebook。您可以通过 IBM Cloud 帐户使用 Watson Studio 在 IBM Cloud 上运行 Notebook。
注册或登录。
通过从试用 IBM Cloud Pak for Data 页面登录到 IBM Cloud 帐户来激活 Watson Studio。
通过登录 https://dataplatform.cloud.ibm.com 访问 Watson Studio。
创建一个空项目。
单击“创建项目”或“新建项目”。
选择“创建空项目”。
为项目命名。
选择现有的对象存储服务实例或创建一个新实例。
单击创建。
添加笔记本。
单击“+添加到项目”。
单击“笔记本”。
单击“从 URL”。
提供名称。
在“选择运行时”下,选择“**默认 Python 3.6 免费**”。
输入作为笔记本 URL。https://raw.githubusercontent.com/IBM/ml-learning-path-assets/master/notebooks/classification_start_to_end_with_scikit_learn.ipynb
单击 Create Notebook。
运行笔记本。
在打开的 Notebook 中,单击“运行”以一次运行一个单元。本教程的其余部分遵循笔记本的顺序。
现在,您已经设置了笔记本,让我们继续开发分类模型,使用包含在线交易平台客户信息的数据集来预测客户是否会流失。
在实际的机器学习开始之前,必须执行几个步骤。首先,数据科学家必须分析将用于运行预测的数据的质量。数据的偏倚表示会导致模型偏斜。有几种方法可以分析数据。在本教程中,我们进行了最少的数据探索,足以让您了解所完成的工作。然后,我们继续讨论本主题的核心主题。
在本教程中,我们使用包含在线交易平台客户信息的数据集来对给定客户的流失概率是高、中还是低进行分类。这提供了一个很好的示例来了解如何从头到尾构建分类模型。预测将属于三个类别:高、中和低。现在,让我们仔细看看数据集。
数据以 .csv 文件的形式提供给我们,并使用 pandas 库导入。我们使用 numpy 和 matplotlib 来获取一些统计数据并可视化数据。
我们首先运行几行代码来了解每列的数据类型以及每列中的条目数。
性别列中的计数不匹配(见下图)在数据预处理步骤中处理。
我们使用 matplotlib 绘制了一个基本的条形图,以了解数据如何在不同的输出类之间拆分。如果我们对表征性数据不满意,那么现在是时候获取更多数据用于训练和测试了。
数据预处理是机器学习模型构建过程中的重要步骤,因为只有当训练数据良好且准备充分时,模型才能正常运行。因此,在构建模型时,此步骤会消耗大量时间。
机器学习中执行了几个常见的数据预处理步骤,在本教程中,我们将介绍其中的一些步骤。scikit-learn 提供的预处理选项的完整列表可以在scikit-learn 数据预处理页。
我们首先确定不会为预测输出增加任何价值的列。虽然其中一些列很容易识别,但通常会聘请主题专家来识别其中的大多数列。删除此类列有助于降低模型的维数。
必须为每列自定义应用的预处理技术。Sklearn 提供了一个名为 ColumnTransformer 的库,它允许使用管道将这些技术的序列应用于选择性列。
处理数据集时的一个常见问题是值会丢失。scikit-learn 提供了一种方法,用适用于其上下文的内容填充这些空值。我们使用了 Sklearn 提供的类,并用列中最常见的值填充了缺失值。SimpleImputer
此外,由于机器学习算法在处理数字时比在字符串上表现更好,因此我们希望识别具有类别的列并将其转换为数字。我们使用 Sklearn 提供的类。一个热编码器的想法是创建二进制变量,每个变量代表一个类别。通过这样做,我们删除了仅将数字分配给类别可能发生的任何序号关系。基本上,我们从包含多个类号的单个列转到仅包含二进制类号的多个列。OneHotEncoder
数据集中的数值列将被识别,并应用于每个列。这样,每个值都用其列的平均值减去,然后除以标准偏差。StandardScaler
如前所述,每种技术都按需要应用它们的列进行分组,并使用 .理想情况下,这是在训练模型之前在管道中运行的。但是,为了了解数据的外观,我们已将数据转换为临时变量。ColumnTransformer
机器学习算法不能使用简单文本。我们必须将数据从文本转换为数字。因此,对于每个作为类的字符串,我们分配一个标签,该标签是一个数字。例如,在客户流失数据集中,CHURNRISK 输出标签被分类为高、中或低,并分配了标签 0、1 或 2。为此,我们使用 Sklearn 提供的类。LabelEncoder
这些是应用于数据集的一些常用预处理步骤。有关详细信息,请参阅数据预处理。
对数据进行预处理后,下一步是将数据拆分为多个部分,用于创建和训练模型,以及测试和评估生成的模型。在训练和测试之间应该分配多少百分比的数据背后有几种理论。在本教程中,我们将 98% 的数据用于训练,将 2% 的数据用于测试。
有几种分类模型很受欢迎,并且已被证明具有很高的准确性。在本教程中,我们通过初始化 Sklearn 提供的库来应用随机森林分类器。作为此学习路径的一部分,我们在使用 Python 和 scikit-learn 学习分类算法中对各种分类模型进行了详细描述和比较。现在,我们将跳过随机森林如何工作的细节,并继续创建我们的第一个机器学习模型。
在此学习路径中,我们使用管道。管道是在机器学习流中设计数据处理的便捷方法。使用 Python 和 scikit-learn 学习分类算法中详细介绍了使用管道背后的想法。下面的代码示例演示如何使用 sklearn 设置管道。
创建模型的最后一步称为建模,您基本上可以在其中训练机器学习算法。在拆分数据步骤中拆分的 98% 的数据用于训练在上一步中初始化的模型。
模型训练完成后,即可进行一些分析。在此步骤中,为测试模型而保留的 2% 的数据用于运行预测。数据被蒙住眼睛,没有任何输出,并按下图所示传递。收集预测的输出以根据实际结果进行评估,这就是我们下一步要做的事情。
将上一步获得的预测结果与实际结果进行比较。生成多个评估指标来计算模型的性能。
在评估提供令人满意的分数之前,您将通过调整所谓的超参数来通过评估步骤重复数据预处理。
在本教程中,你获得了一个动手示例,演示了如何从头到尾开发基本的机器学习分类模型。