機械学習パイプラインの作成方法

機械学習パイプラインの作成方法

  • 人工知能(AI)
6分で読めます 更新日 Jan 7, 2020

ポイント: 機械学習パイプラインの作成には、scikit-learnのようなフレームワークを使用してモデル化のためのデータを準備するステップが含まれます。これには、データ抽出、変換、正規化が含まれ、最適なパフォーマンスが得られます。

  • 機械学習パイプラインは、データの準備とモデリングプロセスを合理化します。
  • TripAdvisorデータを使用した例では、データ変換および正規化手法が示されています。

この記事では、機械学習パイプラインの作成方法を示します。この例では、scikit-learn機械学習フレームワークを使用します(私たちのscikit-learnガイドを参照するか、右側のメニューでトピックをブラウズしてください)。ただし、パイプラインの概念はほとんどの機械学習フレームワークに存在します。続けて行くために、データはこちらで利用可能で、コードはこちらです。

機械学習パイプラインとは何ですか?

一般的に、機械学習パイプラインはあなたのMLプロセスを説明またはモデル化します: コードを書く、プロダクションにリリースする、データ抽出を行う、トレーニングモデルを作成する、アルゴリズムを調整する。MLパイプラインは、チームがMLプラットフォームで作業する際に継続的なプロセスであるべきです。機械学習プログラムでは、MLモデルにデータを供給する前にデータを準備するための一連のステップが含まれます。それらのステップには以下が含まれることがあります:

  • データを読み取り、Pandasデータフレームに変換する
  • いくつかの列を削除または追加する
  • 列に対していくつかの計算を実行する
  • データを正規化する

これを1ステップずつ実行するためにPipelineオブジェクトを使用できます。例を見てみましょう。

サンプルデータを使用したMLパイプラインの例

私たちは以前、Trip Advisorからこのデータを見てきました以前。ご覧のように、データはテキストと数値の組み合わせです。機械学習モデルでは、すべての入力は数字でなければなりません(いくつかの例外を除く)。したがって、データを数値に変換するステップ1としてパイプラインを使用します。また、データを正規化するステップ2としてパイプラインを使用します。これは、各データポイントxに対して新しい値z = x - (平均) / (標準偏差)を計算することを意味します。これにより、大きな数値が小さくなり、MLモデルは入力が正規化されると最も良く機能します。

まず、Pandasを使用してデータをインポートします。次に、数値に変換する非数値列の配列を作成します。

    import pandas as pd
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

df = pd.read_csv('/home/ubuntu/Documents/TripAdvisor.csv',sep=',',header=0)

cols = ['User country',  'Period of stay', 'Traveler type', 'Pool', 'Gym',
       'Tennis court', 'Spa', 'Casino', 'Free internet', 'Hotel name',
       'User continent',
       'Review month', 'Review weekday','Hotel stars']

これをPandasのfactorize()関数を使用して行います。これはテキストを受け取り、それをカテゴリカル値に変換します。つまり、それをユニークな数字に変換します。パイプラインメソッドは次のように機能します: 実行したい順序で関数をスタックします。これらはトランスフォーマーと呼ばれます。以下では、カスタムトランスフォーマーを作成し、scikit-learnに組み込まれているものを使用します。形式は次の通りです: Pipelineコンストラクターに('説明的な名前', 関数)のタプルを渡します。最初の関数のinit()メソッドに引数を渡すことができますいくつかの引数。各メソッドはfit()およびtransform()関数を実装する必要があります。ただし、最後の関数はfit()のみを実装します。

    pipeline = Pipeline([ 
    ('someName', someFunction(some args)),
    ('next Name', nextFuntion())
])

data = pipeline.fit_transform(dataframe)

これが呼び出す最初の関数です。これはBaseEstimatorおよびTransforMixinオブジェクトを使用しており、いくつかのコードを書くのを省きます。たとえば、私たちのためにfit_transform()メソッドを作成し、他のパラメーターを渡すために使用できるゲッターとセッターを作成します。変換する列をinit()コンストラクターに渡します。私たちがトランスフォーマーに渡すデータセットを含むXオブジェクトが作成されます: pipeline.fit_transform(dataframe).次に、cols配列内の各列をループし、factorize().を使用してそれらを変更します。最後に、機械学習モデルはNumPy配列で動作するため、強調表示されたX.valuesを使用してPandasデータフレームをNumPy配列として返します(ほとんどの場合)。

    from sklearn.base import BaseEstimator, TransformerMixin

class ToNumbers(BaseEstimator, TransformerMixin):
    def __init__(self, cols):
        self.cols = cols
    def fit(self, X, y=None):
        return self
    def transform(self, X):
        for c in cols:
            encoded, categories = X[c].factorize()
            X[c] = encoded
        return X.values

2番目のステップは、配列内の値を正規化するためにStandardScaler()を呼び出します。前のステップのデータを使用することを知っているので、引数を渡す必要はありません。

    pipeline = Pipeline([ 
    ('toNumbers', ToNumbers(cols)),
    ('scaler', StandardScaler())
])

data = pipeline.fit_transform(df)

ここにNumPy配列として変換されたデータがあります。

    data

array([[-0.51293975, -0.49559486, -0.50236994, ...,  0.10211954,
        -1.59325501, -1.62074647],
       [-0.51293975,  0.94590453,  0.20791152, ...,  0.02768968,
        -1.59325501, -1.1089318 ],
       [-0.51293975, -0.16191445, -0.29346363, ...,  0.0152847 ,
        -1.30357228, -0.59711712],
       ...,
       [-0.51293975,  1.41305711,  0.29147405, ...,  0.04009466,
         1.30357228, -1.62074647],
       [-0.51293975, -0.5222893 , -0.41880742, ...,  0.10211954,
         1.59325501,  0.42651223],
       [-0.51293975, -0.37546991,  0.124349  , ...,  0.05249964,
         1.59325501, -0.08530245]])

これらの投稿は私自身のものであり、BMCの立場、戦略、または意見を必ずしも表しているわけではありません。

人工知能(AI)の関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。