Machine Learning 简明教程

Machine Learning - Automatic Workflows

Introduction

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

data

机器学习管道的模块如下 −

Data ingestion − 正如其名称所暗示的,这是为在机器学习项目中使用而导入数据的过程。数据可以从单个或多个系统中实时或批量提取。这是最具挑战性的步骤之一,因为数据质量会影响整个机器学习模型。

Data Preparation − 导入数据后,我们需要准备数据以便用于我们的机器学习模型。数据预处理是最重要的数据准备技术之一。

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

Model Evaluation − 其次,我们需要评估机器学习模型。在自动机器学习管道的情况下,机器学习模型可以在各种统计方法和业务规则的帮助下进行评估。

ML Model retraining − 在自动机器学习管道的情况下,第一个模型不一定是最好的。第一个模型被视为基线模型,我们可以重复训练它以提高模型的准确性。

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

Challenges Accompanying ML Pipelines

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

Quality of Data

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

Data Reliability

与 ML 管道相关的另一个挑战是我们要提供给 ML 模型的数据的可靠性。如我们所知,数据科学家可以从多个来源获取数据,但要获得最佳结果,必须确保数据来源是可靠且受信任的。

Data Accessibility

要从 ML 管道中获得最佳结果,数据本身必须是可访问的,这需要整合、清理和管理数据。由于数据可访问性属性,元数据将用新标签进行更新。

Modelling ML Pipeline and Data Preparation

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

通过使用 ML 管道,我们可以防止此数据泄露,因为管道确保数据准备(例如此处标准化)受到我们的交叉验证过程的每个折的影响。

Example

以下是一个演示数据准备和模型评估工作流的 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 diabetes 数据集,如在之前的示例中所做的那样:

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

以上输出是对该设置的准确度的摘要,该设置位于数据集上。

Modelling ML Pipeline and Feature Extraction

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

Example

以下是在 Python 中演示特征提取和模型评估工作流的一个示例。为此,我们正在使用来自 Sklearn 的 Pima 印第安人糖尿病数据集。

首先,将用 PCA(主成分分析)提取 3 个特征。然后,将用统计分析提取 6 个特征。在特征提取之后,将通过使用

FeatureUnion 工具。最后,创建一个逻辑回归模型,使用十倍交叉验证评估管道。

首先,按如下所示导入所需包:

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 diabetes 数据集,如在之前的示例中所做的那样:

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

以上输出是对该设置的准确度的摘要,该设置位于数据集上。