業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
AI

執筆者:Handbook編集部

scikit-learnの自作のtransformersクラスの作成方法

概要

scikit-learnでは特徴量を生成、処理する場合にはfittransformメソッドが実装されているtransformersクラス(i.g. StandardScalerMinMaxScalerなど)を使います。

transformersクラスを利用することでパイプライン化やハイパーパラメーターチューニングなどを簡単に行うことができます。

scikit-learnでは実装されていない処理に関しても自作のtransformersクラスを作成することでこれらの機能を利用することができます。

自作transformersクラスの作成方法1

基底クラス

transformersクラスはBaseEstimatorTransformerMixinが継承されている必要があります。

また、transformersクラスは__init__fittransformの3つのメソッドが定義されている必要があります。

Optionalですが、元に戻す処理をするinverse_transformも定義しておくと便利なことがあります。

参考に自作transformers用の基底クラスの例を載せています。

from sklearn.base import BaseEstimator, TransformerMixin

class BaseTransformer(BaseEstimator, TransformerMixin):

    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        return X

    # Optional
    def inverse_transform(self, X):
        return X

自作transformersクラスの作成

基底クラスを継承し、任意のメソッドを上書きすることで自作クラスを作成することができます。

ここでは例として特徴量を累乗に変換する自作クラスのコード例を紹介します。

class Power(BaseTransformer):
    def __init__(self, n=1):
        self.n = n

    def transform(self, X):
        X = X ** self.n
        return X

    def inverse_transform(self, X):
        X = X ** (self.n * (-1))
        return X

transformer_power = Power(2)
transformer_power.transform(2)

自作transformersクラスの作成方法2

もう一つの方法としてFunctionTransformerというtransformersを自動で作成する関数を使う方法もあります。FunctionTransformerを使用すると任意の処理を定義した関数からtransformersを作成することができます。

FunctionTransformerでtransformersを作成するには引数functransformで実行される処理を定義した関数を代入します。また、引数inverse_funcに逆関数を与えておくとinverse_transformも実行することができます。

例として累乗に変換する自作transformersのコード例を紹介します。

from sklearn.preprocessing import FunctionTransformer
transformer_power = FunctionTransformer(
                        func=lambda x: x**2,
                        inverse_func=lambda x: x**-2,
                    )
transformer_power.transform()

参考文献

2025年06月13日に最終更新
読み込み中...