- 在 Jupyter Notebook 中使用 Python 库训练机器学习模型
- 将训练有素的机器学习模型纳入 Streamlit 网络应用程序
这些是本课的活动:
使用机器学习模型
Jupyter Notebooks、Python 和 Streamlit 的另一大特点是能够训练机器学习模型并进行预测。
如果你是人工智能方面的新手,你可能需要先浏览本课程中的人工智能课程,学习基础知识,然后再学习这里涉及的更高级的编码。您可以使用像 Teachable Machine 这样的用户友好型机器学习模型平台来制作模型,并将其整合到 Python 网络应用程序中。
如果您在人工智能和使用 Jupyter Notebooks 处理数据集方面有过一些经验,那么这将是您下一步的良好选择。
在本课中,您将了解一些 Python 机器学习库,以及使用 Python 可以创建的一些不同的机器学习模型。
回顾一下,创建机器学习模型主要有 3 个部分。
数据集
通过学习算法发现模式
预测:
数据集是模型的输入。它可以包括文本、图像、声音或姿势。我们在第二单元使用 Jupyter 笔记本处理了文本和数字数据。本课我们将继续使用电子表格形式的文本数据。
寻找模式本质上就是利用数据集构建机器学习模型。Python 包含许多可以从数据中建立人工智能模型的库。在本课程中,我们将使用scikit-learn软件包中的许多函数。除了它提供的库之外,该网站还包含大量有关机器学习和构建模型过程的精彩信息。这是了解更多信息的绝佳资源!
一旦创建了模型,就可以根据新信息来预测结果。Python 提供的库可以再次实现这一点。
数据预处理
在将数据集发送给算法建立模型之前,必须对其进行 预处理或 "清理",这样模型构建算法才能使用数据集,并尽可能建立最准确的模型。事实上,创建机器学习模型的大部分工作都在预处理中。您需要仔细查看数据,决定哪些数据是重要的,哪些可以忽略,哪些需要清理。
预处理包括哪些内容?对于基于文本的数据集,需要处理以下一些问题。
空值
有时数据集包含空白或空值,尤其是调查数据。有时,您会剔除包含空数据的行。
但是,如果样本数量较少,您可能不想删除它们。另一种方法是用其他值替换空值。它可以是零,也可以是该字段所有其他值的平均值。
异常值
有时,数据中会包含一两个与其他数据截然不同的样本。这可能会使模型出现偏差。您不希望异常值影响模型的创建,因此通常会从数据集中剔除异常值。
例如,您可能有一个数据集,其中 95% 的样本都是 10-30 岁的人,但也有一些随机样本是 50 岁以上的人。由于绝大多数样本都在 10-30 岁年龄段,因此可以考虑剔除年龄较大的样本。
标准化
通常情况下,大型数据集中的数字会根据所代表的特征而有所不同。例如,年龄可能从 0 到 70 不等,但工资可能从 0 到 500,000 不等!这两个尺度截然不同,因此在模型中一个特征可能更重要。
Scikit-learn 提供了一个 StandardScaler,它可以更新每个特征,使平均值为 0,标准偏差为 1。
另一个需要考虑的问题是每个类或标签的样本数量要均衡。你要确保数据集中每个类别的样本数量大致相同。
编码
人工智能喜欢数字,而不一定是文字。scikit-learn 提供了编码器函数,因此您可以轻松地将一系列可能的文本值转换为一系列数字。
例如,活动水平的样本值包括久坐、轻度、中度和高度。这些回答可以编码为值 0、1、2 和 3,这样模型构建算法就更容易处理了。
分割数据
对数据进行预处理后,需要将其分成训练集和测试集。训练集将用于训练和创建模型。然后,您将使用测试集测试模型的性能。
有标准的分割方法(通常 75% 用于培训,25% 用于测试),但您也可以随意分割。同样,我们也提供了一些功能,可以自动完成这些工作。
创建模型
下一步是创建模型。要做的一个重大决定是,我应该使用哪种算法?有许多不同的监督学习算法可供选择,很难知道使用哪一种。一个好的方法是尝试几种不同的算法,然后看看哪种算法的准确率最高。
第一步是确定您是否需要一个 分类算法还是 回归算法。这取决于您想要预测什么。
分类算法用于预测离散目标或类别。例如,将电子邮件分为垃圾邮件或非垃圾邮件就是一个分类问题
回归算法用于预测连续范围内的事物。其中一个例子就是预测一个人将获得多少薪水。预测的是一个数字范围,输出可能是该范围内的任何值。
以下是几种常用的模型创建算法。

分类
- 决策树
- 随机森林
- K 最近邻
- 直觉贝叶斯
- 逻辑回归
- 支持向量机
回归
- 线性回归
- 岭回归
- 拉索回归
- 多项式回归
- 贝叶斯线性回归
- 支持向量回归
请注意,有些算法同时属于这两种类型。例如,既有决策树分类器,也有决策树回归器。支持向量机用于分类,支持向量回归用于回归。
那么,如何决定使用哪种方法呢?您应该研究其他数据科学家在不同情况下使用的算法,看看哪种算法适合您的模型。您还应该用您的数据尝试一些不同的算法,然后找出哪种算法的准确性最高。您还可以调整特定算法的参数,看看它是否能返回更准确的模型。
scitkit-learn提供了所有这些算法的函数,因此创建模型非常简单。
评估模型
您希望模型达到最佳状态,因此需要对其性能进行评估。评估模型的两个常见变量是偏差和方差。
偏差是模型预测值与正确值之间的差值。
方差是指使用不同数据时预测结果的变化程度。
您希望在偏差和方差之间取得良好的平衡。
偏差大 -> 拟合不足。
拟合不足当模型过于简单,无法解释训练数据中的噪声时,就会出现这种情况。如果数据量不足或特征(列)不够,或者数据中的噪声太大,就会出现这种情况。如果一个模型在训练数据和测试数据上都表现不佳,就说明模型欠拟合。
高方差 -> 过度拟合。
过拟合过拟合是指在一组数据上训练出的模型表现很好,但如果再用新的数据来训练,它的表现就完全不好了。如果模型过于复杂,试图过于贴近训练数据,就会出现这种情况。模型可能会在训练数据上预测得很好,但在测试数据上却表现不佳。
检查模型性能的一种技术是交叉验证。
交叉验证即多次训练模型,每次使用不同的训练/测试数据。您的数据集被分成多个 折叠或子集。然后将其中一个折叠作为验证集或测试集,其余的折叠用于训练。这样要进行多次,因此每次训练集和测试集都会发生变化。
sciikit-learn 还提供了 度量库,因此您可以轻松获得模型的性能评分。
- 准确率得分= 预测正确率/预测总数
- 精确度= 真阳性/(真阳性 + 假阳性)
- 召回率= 真阳性/(真阳性 + 假阴性)
- F1 分数= (2 x 精确度 x 召回率)/(精确度 + 召回率)
- 特异性= 真阴性/(真阳性 + 假阴性)
- 混淆矩阵- 显示真阳性、真阴性、假阳性和假阴性计数
通过检查各种算法的指标,您可以选择最佳模型。
预测!
有了满意的模型后,就可以在应用程序中使用它了。
通常的做法是在 Jupyter Notebooks 等环境中使用 Python 对模型进行预处理、创建和评估。在这里,您可以将模型导出为文件。
然后,您就可以在 Streamlit 应用程序中加载模型,并利用它进行预测。
在本课的活动中,您将使用中风风险数据集经历整个过程。您将看到如何预处理数据、使用不同算法创建模型,然后在一个简单的 Streamlit 应用程序中使用模型来预测中风风险(给定一些输入特征)。
挑战

尝试与 Jupyter Notebook 中不同的模型。
- 研究 scikit-learn 网站上的其他分类算法,并查看 Kaggle 上的其他建模示例。
- 选择一种算法,将代码添加到笔记本中,创建模型。
- 使用 scikit-learn 指标来检查准确性。
您的模型性能如何?是否优于笔记本中的其他算法?
挑战

鸢尾花数据集是一个经典数据集,它根据花瓣和萼片的尺寸将鸢尾花分为 3 个品种(setosa、versicolor 和 virginica)。
- 对数据集进行研究,了解其特征和目标。
- 您可以下载数据集并创建自己的模型,也可以使用使用 K 最近邻创建的模型(pickle 文件)。 请注意,该数据集不需要缩放器。 pickle 文件只包含模型。
- 导入模型并创建 Streamlit 应用程序,根据四个数据集特征预测虹膜种类。
技术创新灵感
以下是 Technovation 参与者使用 Python 和 Streamlit 构建包含机器学习模型的网络应用的一些令人惊叹的例子。
T.E.D.D.Y--基于文本的青少年早期困扰探测器 , 由 美国 TEDDY 团队TEDDY 可帮助教师和辅导员及早发现学生的心理健康问题。TEDDY 使用人工智能来识别表达消极情绪的句子或显示抑郁症患者应有的语言模式。然后,学生可被转介给辅导员以获得支持。
反思
您已经经历了预处理数据集、构建多个模型、评估并选择一个模型用于应用程序的整个过程。 一堂课要学的东西太多了!

关键术语回顾
- 预处理- 获取数据集,确保其中的数据适合用来训练机器学习模型
- 分类算法- 一种用于训练机器学习模型的算法,可对离散值进行分类或预测
- 回归算法 - 用于训练机器学习模型以预测连续范围内数值的算法
- 偏差- 由于简化模型的不正确假设而导致的模型预测值与正确值之间的差异
- 方差 - 当模型在面对新数据时无法归纳时,模型预测的变异量
- 过度拟合 - 当模型与训练数据的拟合程度过高时,无法很好地预测新数据,原因是模型的方差过大
- 欠拟合 - 模型过于简化,在训练或测试数据中表现不佳,原因是模型中的偏差或假设过高
其他资源
机器学习
- Geeks for Geeks机器学习教程》--对机器学习过程和术语进行了精彩的介绍和概述
- Simplilearn 的Scikit-Learn 教程--通过葡萄酒质量数据集练习在 Jupyter Notebook 中使用 scikit-learn
- 使用 scikit-learn 进行机器学习--Data School 的完整 Youtube 播放列表
流光溢彩
- 与 Patrick Loeber 一起从零开始构建机器学习网络应用- 另一个从头到尾构建模型并将其用于网络应用的例子
- 使用 Streamlit 的图像分类器,如果您的模型是在图像上训练的