機械学習-自動ワークフロー

前書き

機械学習モデルを正常に実行して結果を生成するには、いくつかの標準ワークフローを自動化する必要があります。これらの標準ワークフローを自動化するプロセスは、Scikit-learnパイプラインを使用して実行できます。データサイエンティストの観点からは、パイプラインは一般化されていますが、非常に重要な概念です。基本的に、生の形式からいくつかの有用な情報へのデータフローを可能にします。パイプラインの動作は、次の図の助けを借りて理解することができます-

MLパイプラインのブロックは次のとおりです-

Data ingestion−名前が示すように、MLプロジェクトで使用するためにデータをインポートするプロセスです。データは、単一または複数のシステムからリアルタイムまたはバッチで抽出できます。データの品質がMLモデル全体に​​影響を与える可能性があるため、これは最も困難な手順の1つです。

Data Preparation−データをインポートした後、MLモデルで使用するデータを準備する必要があります。データ前処理は、データ準備の最も重要な手法の1つです。

ML Model Training−次のステップは、MLモデルをトレーニングすることです。データから特徴を抽出し、予測を行うために、教師あり、教師なし、強化などのさまざまなMLアルゴリズムがあります。

Model Evaluation−次に、MLモデルを評価する必要があります。AutoMLパイプラインの場合、MLモデルはさまざまな統計手法とビジネスルールを使用して評価できます。

ML Model retraining− AutoMLパイプラインの場合、最初のモデルが最適である必要はありません。最初のモデルはベースラインモデルと見なされ、モデルの精度を高めるために繰り返しトレーニングできます。

Deployment−最後に、モデルをデプロイする必要があります。このステップでは、モデルをビジネスオペレーションに適用して移行し、使用できるようにします。

MLパイプラインに伴う課題

MLパイプラインを作成するために、データサイエンティストは多くの課題に直面しています。これらの課題は、次の3つのカテゴリに分類されます-

データの品質

MLモデルの成功は、データの品質に大きく依存します。MLモデルに提供するデータが正確でなく、信頼性が高く、堅牢でない場合、間違った出力または誤解を招く出力で終了します。

データの信頼性

MLパイプラインに関連するもう1つの課題は、MLモデルに提供するデータの信頼性です。ご存知のように、データサイエンティストがデータを取得できるソースはさまざまですが、最良の結果を得るには、データソースの信頼性と信頼性を確保する必要があります。

データアクセシビリティ

MLパイプラインから最良の結果を得るには、データ自体にアクセスできる必要があります。これには、データの統合、クレンジング、キュレーションが必要です。データアクセシビリティプロパティの結果として、メタデータは新しいタグで更新されます。

MLパイプラインのモデリングとデータ準備

トレーニングデータセットからテストデータセットに発生するデータ漏洩は、データサイエンティストがMLモデルのデータを準備する際に対処する重要な問題です。一般に、データ準備の時点で、データサイエンティストは、学習する前にデータセット全体に対して標準化や正規化などの手法を使用します。ただし、トレーニングデータセットはテストデータセット内のデータの規模に影響されるため、これらの手法ではデータの漏洩を防ぐことはできません。

MLパイプラインを使用することで、このデータ漏洩を防ぐことができます。パイプラインにより、標準化などのデータ準備が相互検証手順の各段階に制限されることが保証されるためです。

以下は、データの準備とモデル評価のワークフローを示すPythonの例です。この目的のために、SklearnのPima IndianDiabetesデータセットを使用しています。まず、データを標準化したパイプラインを作成します。次に、線形判別分析モデルが作成され、最後にパイプラインが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

ここで、前の例で行ったように、ピマ糖尿病データセットをロードする必要があります-

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 IndianDiabetesデータセットを使用しています。

まず、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

ここで、前の例で行ったように、ピマ糖尿病データセットをロードする必要があります-

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

上記の出力は、データセットの設定の精度の要約です。