机器学习 - 自动工作流程


介绍

为了成功执行并产生结果,机器学习模型必须自动化一些标准工作流程。自动化这些标准工作流程的过程可以在 Scikit-learn Pipelines 的帮助下完成。从数据科学家的角度来看,管道是一个广义但非常重要的概念。它基本上允许数据从原始格式流向一些有用的信息。管道的工作可以借助下图来理解 -

数据

ML 管道的块如下 -

数据摄取- 顾名思义,它是导入数据以在 ML 项目中使用的过程。可以从单个或多个系统实时或批量提取数据。这是最具挑战性的步骤之一,因为数据质量会影响整个机器学习模型。

数据准备- 导入数据后,我们需要准备用于我们的 ML 模型的数据。数据预处理是数据准备中最重要的技术之一。

ML 模型训练- 下一步是训练我们的 ML 模型。我们有各种机器学习算法,如监督算法、无监督算法、强化算法等,用于从数据中提取特征并进行预测。

模型评估- 接下来,我们需要评估 ML 模型。对于 AutoML pipeline,可以借助各种统计方法和业务规则来评估 ML 模型。

ML 模型再训练- 在 AutoML 管道的情况下,第一个模型不一定是最好的模型。第一个模型被视为基线模型,我们可以重复训练它以提高模型的准确性。

部署- 最后,我们需要部署模型。此步骤涉及将模型应用并迁移到业务运营中以供使用。

机器学习管道面临的挑战

为了创建机器学习管道,数据科学家面临着许多挑战。这些挑战分为以下三类 -

数据质量

任何机器学习模型的成功在很大程度上取决于数据的质量。如果我们提供给机器学习模型的数据不准确、不可靠、不稳健,那么我们最终会得到错误或误导性的输出。

数据可靠性

与 ML 管道相关的另一个挑战是我们向 ML 模型提供的数据的可靠性。众所周知,数据科学家可以通过多种来源获取数据,但为了获得最佳结果,必须确保数据源可靠且值得信赖。

数据可访问性

为了从机器学习管道中获得最佳结果,数据本身必须可访问,这需要对数据进行整合、清理和管理。由于数据可访问性属性,元数据将使用新标签进行更新。

ML 管道建模和数据准备

从训练数据集到测试数据集发生的数据泄漏是数据科学家在为机器学习模型准备数据时需要处理的一个重要问题。一般来说,在数据准备时,数据科学家在学习之前对整个数据集使用标准化或归一化等技术。但这些技术无法帮助我们避免数据泄漏,因为训练数据集会受到测试数据集中数据规模的影响。

通过使用机器学习管道,我们可以防止这种数据泄漏,因为管道确保标准化等数据准备仅限于交叉验证过程的每个部分。

例子

以下是一个 Python 示例,演示数据准备和模型评估工作流程。为此,我们使用 Sklearn 的 Pima Indian Diabetes 数据集。首先,我们将创建标准化数据的管道。然后将创建线性判别分析模型,最后使用 10 倍交叉验证对管道进行评估。

首先,导入所需的包,如下所示 -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

现在,我们需要像之前的示例一样加载 Pima 糖尿病数据集 -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values

接下来,我们将借助以下代码创建一个管道 -

estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)

最后,我们将评估该管道并输出其准确性,如下所示 -

kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

输出

0.7790148448043184

上面的输出是数据集设置准确性的总结。

ML 管道建模和特征提取

数据泄漏也可能发生在机器学习模型的特征提取步骤中。这就是为什么特征提取过程也应该受到限制,以阻止我们的训练数据集中的数据泄漏。与数据准备的情况一样,通过使用机器学习管道,我们也可以防止这种数据泄漏。ML 管道提供的工具 FeatureUnion 可用于此目的。

例子

以下是一个 Python 示例,演示了特征提取和模型评估工作流程。为此,我们使用 Sklearn 的 Pima Indian Diabetes 数据集。

首先,将使用 PCA(主成分分析)提取 3 个特征。然后,通过统计分析提取6个特征。特征提取后,多个特征选择和提取过程的结果将通过使用进行组合

特征联盟工具。最后,将创建逻辑回归模型,并使用 10 倍交叉验证来评估管道。

首先,导入所需的包,如下所示 -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest

现在,我们需要像之前的示例一样加载 Pima 糖尿病数据集 -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values

接下来,将创建特征联合,如下所示 -

features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)

接下来,将在以下脚本行的帮助下创建管道 -

estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)

最后,我们将评估该管道并输出其准确性,如下所示 -

kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

输出

0.7789811066126855

上面的输出是数据集设置准确性的总结。