「Scikit-Learnクラスを使用したカスタムトランスフォーマを作成するためのシンプルなアプローチ」

Scikit-Learnクラスのカスタムトランスフォーマを作成するための簡単なアプローチ

この記事では、Scikit-Learnのクラスを使用して、処理のニーズに応じたトランスフォーマーを作成する方法を説明します。

Jeffery Hoによる写真、Unsplash

データの前処理は、データサイエンスライフサイクルで最も重要なステップの1つです。非常に人気のある機械学習ライブラリであるScikit-Learnには、データを必要な形式に変換するのに役立つ多くの事前定義のトランスフォーマーがあります。

ただし、Scikit-Learnには適切なトランスフォーマーがない場合には、処理操作を行いたい場合があります。幸いなことに、Scikit-Learnのクラスを使用して、非常に簡単に独自のトランスフォーマー、つまりカスタムトランスフォーマーを作成することができます。また、カスタムトランスフォーマーを作成する理由(トランスフォーマーなしでもこれらのカスタム操作を行うこともできるため)は、Scikit-Learnのクラスを使用して作成されたカスタムトランスフォーマーが、パイプラインなどのScikit-Learnの機能と非常にうまく連携するため、私たちの生活を非常に簡単にするからです。Scikit-Learnのパイプラインについてもっと学びたい場合は、私の別の記事をチェックしてください。

Scikit-Learnのパイプラインを使用して、機械学習モデルのトレーニングと予測を自動化する

この記事では、Scikit-Learnのパイプラインクラスの理論と使用方法について、コーディング例を使用して説明します…

VoAGI.com

Scikit-Learnのクラスを使用して、カスタムトランスフォーマーを作成する方法を見てみましょう。

まず、理論を理解しましょう。カスタムトランスフォーマーを作成するには、fit()、transform()、およびfit_transform()の3つのメソッドを実装するだけです。

カスタムトランスフォーマークラスにTransformerMixinというベースクラスがある場合、fit_transform()メソッドを無料で使用できます。また、BaseEstimatorクラスをカスタムトランスフォーマーのベースクラスにすることで、ハイパーパラメータチューニング操作後にパラメータを取得および設定するのに非常に便利なget_params()メソッドとset_params()メソッドを取得することができます。

次に、カスタムトランスフォーマー内のfit()メソッドとtransform()メソッドの役割を理解しましょう。fit()メソッドは、データ処理操作に必要なパラメータを計算するために使用されます。fit()メソッドは必要なパラメータを計算してself(クラスのインスタンス)を返します。transform()メソッドは、fit()メソッドで計算されたパラメータを使用してデータの変換を行います。このメソッドは変換されたデータを返します。fit()メソッドとtransform()メソッドは、次の3つの引数を取ります:

  1. self
  2. X(独立した特徴値)
  3. y(従属する特徴値)

このアイデアを固めるために、例を挙げましょう。

データから外れ値を削除するトランスフォーマーを作成したいとします。この操作を行うには、Q1(第1四分位数)、Q3(第3四分位数)、および四分位範囲の値(つまり、Q3 – Q1)の値を知る必要があります。これらの値はfit()メソッドで計算されます。fit()メソッドを実装した後、fit()メソッドで計算されたパラメータを使用してtransform()メソッドで外れ値を見つけます。

もう1つのアプローチは、パラメータを計算し、transform()メソッドで変換を行うことです。この場合、fit()メソッドはself(クラスのインスタンス)のみを返します。

自分でカスタムトランスフォーマーを作成してみましょう。上記で説明した外れ値の例を取ります。コードにわずかな変更を加えます。外れ値を完全に削除する代わりに、データの中央値でそれらを置き換えます。

## データから外れ値を処理するためのカスタムトランスフォーマーの作成from sklearn.base import BaseEstimator, TransformerMixinclass Outlier_Remover(BaseEstimator, TransformerMixin):        def __init__(self,list_of_feature_names = notable_num_feat):         self.list_of_feature_names = list_of_feature_names        def fit(self, X, y=None):        return self        def transform(self, X, y=None):        quantiles = X[notable_num_feat].quantile(np.arange(0,1,0.25)).T        quantiles = quantiles.rename(columns={0.25:'Q1', 0.50: 'Q2', 0.75:'Q3'})                quantiles['IQR'] = quantiles['Q3'] - quantiles['Q1']        quantiles['Lower_Limit'] = quantiles['Q1'] - 1.5*quantiles['IQR']        quantiles['Upper_Limit'] = quantiles['Q3'] + 1.5*quantiles['IQR']                for feature in notable_num_feat:            X[feature] = np.where((X[feature] < quantiles.loc[feature,'Lower_Limit']) |                                   (X[feature] > quantiles.loc[feature,'Upper_Limit']) & (X[feature] is not np.nan),                                    X[feature].median(), X[feature])                return X

上記のコードを行ごとに理解しましょう。

  1. Outlier_Removerという名前のカスタムトランスフォーマーには、BaseEstimatorとTransformerMixinという2つのベースクラスがあります。
  2. 数値特徴の名前のリストを、カスタムトランスフォーマークラスへの入力として、initメソッドを使用して取得しています。これは、数値特徴の外れ値を見つけるためです。
  3. fit()メソッドでは何も行っていません。
  4. 外れ値に関するすべての作業は、transformメソッドで行われます。まず、quartile1、quartile2、およびquartile3の値を求めます。次に、これらの値を使用して四分位範囲を求めます。
  5. quartile1、quartile3、および四分位範囲の値を持っているので、(quartile3 + 1.5 x 四分位範囲)より大きい値と(quartile1–1.5 x 四分位範囲)より小さい値の外れ値をデータの中央値で置き換えます。
  6. 最後に、変換されたデータ、つまりXを返します。

別の例を見てみましょう:データから無用な特徴(カラム)を除去するためのカスタムトランスフォーマーを作成します。

## 無用な特徴を除去するためのカスタムトランスフォーマーの作成class Remove_Useless_Features(BaseEstimator, TransformerMixin):        def __init__(self):        pass        def fit(self, X, y=None):        return self        def transform(self, X, y=None):        X.drop(columns=['Alley','PoolQC'], axis=1, inplace=True)        return X

再び、このコードを行ごとに理解しましょう。

  1. Remove_Useless_Featuresという名前のカスタムトランスフォーマーには、BaseEstimatorとTransformerMixinという2つのベースクラスがあります。これにより、fit_transform()、get_params()、およびset_params()メソッドが利用できます。
  2. この場合、initおよびfit()メソッドには何も実装する必要はありません。
  3. transform()メソッドでは、pandasのdrop()メソッドを使用してデータセットから無用な特徴を削除し、変換後のデータセットを返します。

上記の例がカスタムトランスフォーマーのコンセプトを十分に理解できたかと思います。疑問点があれば、お気軽にコメントしてください。また、これらのカスタムトランスフォーマーをScikit-Learnパイプラインでどのように使用するかを知りたい場合は、こちらの他の記事をご覧ください。

この記事のコードは、私のKaggleアカウントのコードを借用しています。全体のコードをチェックしてみてください:

House Prices Prediction – sklearnパイプライン

Kaggle Notebooksでの機械学習コードの探索と実行 | House Prices – Advanced Regressionからのデータの使用…

www.kaggle.com

アウトロ

この記事がお気に入りになったことを願っています。VoAGIで私をフォローして、さらに多くの記事を読んでください。

以下の方法で私と連絡を取ることができます:

LinkedIn

ウェブサイト

[email protected]へメール

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more