Machine-learning-with-python-machine-learning-with-pipelines-automatic-workflows
機械学習-自動ワークフロー
前書き
機械学習モデルは、正常に実行して結果を生成するために、いくつかの標準的なワークフローを自動化する必要があります。 これらの標準的なワークフローを自動化するプロセスは、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
上記の出力は、データセットのセットアップの精度の概要です。