机器学习自动工作流程
为了成功执行和产生结果,机器学习模型必须自动化一些标准工作流程。这些标准工作流程的自动化过程可以在 Scikit-learn Pipelines 的帮助下完成。从数据科学家的角度来看,管道是一个通用但非常重要的概念。它基本上允许数据从其原始格式流向一些有用的信息。管道的工作原理可以通过下图来理解:
ML pipeline 的块如下:
数据摄取 :顾名思义,就是将数据导入ML项目中使用的过程。可以从单个或多个系统中实时或批量提取数据。这是最具挑战性的步骤之一,因为数据的质量会影响整个 ML 模型。
数据准备 : 导入数据后,我们需要准备用于我们的ML模型的数据。数据预处理是数据准备中最重要的技术之一。
机器学习模型训练 :下一步就是训练我们的ML模型。我们有各种 ML 算法,如监督、无监督、强化,以从数据中提取特征并进行预测。
模型评估 :接下来,我们需要对ML模型进行评估。在 AutoML 管道的情况下,可以借助各种统计方法和业务规则来评估 ML 模型。
ML 模型再训练 : 在 AutoML pipeline 的情况下,第一个模型不一定是最好的。第一个模型被视为基线模型,我们可以重复训练它以提高模型的准确性。
部署 : 最后,我们需要部署模型。此步骤涉及将模型应用和迁移到业务运营以供其使用。
伴随机器学习流水线而来的挑战
为了创建 ML 管道,数据科学家面临许多挑战。这些挑战分为以下三类:
数据质量
任何 ML 模型的成功很大程度上取决于数据的质量。如果我们提供给 ML 模型的数据不准确、不可靠和稳健,那么我们将以错误或误导性的输出结束。
数据可靠性
与 ML 管道相关的另一个挑战是我们提供给 ML 模型的数据的可靠性。众所周知,数据科学家可以从各种来源获取数据,但为了获得最佳结果,必须确保数据来源可靠且值得信赖。
数据可访问性
为了从 ML 管道中获得最佳结果,数据本身必须是可访问的,这需要对数据进行整合、清理和管理。由于数据可访问性属性,元数据将使用新标签进行更新。
建模 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 模型的特征提取步骤。这就是为什么特征提取过程也应该被限制在我们的训练数据集中阻止数据泄漏。与数据准备的情况一样,通过使用 ML 管道,我们也可以防止这种数据泄漏。 ML 管道提供的工具 FeatureUnion 可用于此目的。
例子
以下是一个 Python 示例,演示了特征提取和模型评估工作流程。为此,我们使用来自 Sklearn 的 Pima Indian Diabetes 数据集。
首先,将使用 PCA(主成分分析)提取 3 个特征。然后,将使用统计分析提取 6 个特征。特征提取后,多个特征选择和提取过程的结果将通过使用
FeatureUnion 工具。最后,将创建一个逻辑回归模型,并使用 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
上面的输出是数据集上设置的准确性的总结。