Machine-learning-with-python-machine-learning-with-pipelines-automatic-workflows

提供:Dev Guides
移動先:案内検索

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

前書き

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

ワークフロー

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

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

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

  • MLモデルトレーニング*-次のステップは、MLモデルのトレーニングです。 データから特徴を抽出し、予測を行うための、監視あり、監視なし、強化などのさまざまなMLアルゴリズムがあります。

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

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

展開-最後に、モデルを展開する必要があります。 この手順では、モデルをビジネスオペレーションに適用および移行して使用します。

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

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

データの質

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

データの信頼性

MLパイプラインに関連するもう1つの課題は、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

上記の出力は、データセットのセットアップの精度の概要です。