本記事の目的
本記事は、コンペに参加する中で、勉強になった項目の個人的備忘録です。
随時追加していく予定です。
勉強になった点
ColumTransformer
公式リファレンスでは、ColumnTransfomerについて、
この推定器は、入力の異なる列または列のサブセットを個別に変換し、それぞれの変換器によって生成された特徴量を連結して単一の特徴空間を形成することができます。これは,複数の特徴抽出機構や変換を1つの変換器にまとめることができるため,異種データや列データに対して有用である.
と書かれています。(DeepL訳)
-
メリット
- カラムごとに異なる処理ができる
- ColumnTransfomerでは、オリジナルなtransformerも、TargetEncodingやOneHotEncodingなどの単一のtransformerの両方を使用することができる
- パイプライン化できるので、処理が単純になる
-
使い方
- インポート
from sklearn.compose import ColumnTransformer
- 処理内容と列を指定
ct = ColumnTransformer( [ ("scaling", StandardScaler(), ['numerical_column1', 'numerical_column2']), ("onehot", OneHotEncoder(), ['categorical_column1', 'categorical_column2']) ], )
- 適用する
X_transformed = ct.fit_transform(X)
- 以下のようにpipline化も可能
pipe = Pipeline( steps=[ ("preprocess", PreProcessTransformer()), ("ct", ct), ] )
- 新しい変換器は以下のように作成可能
- TransformerMixinとBaseEstimatorクラスを継承し、そのメソッドをオーバーライドして独自の変換器を作成する。
- https://scikit-learn.org/stable/modules/generated/sklearn.base.TransformerMixin.html
from sklearn.base import BaseEstimator, TransformerMixin class PreProcessTransformer(TransformerMixin, BaseEstimator): def fit(self, X, y=None): # ここでXから必要な情報を学習します(例: 各列の平均値を計算する等) return self def transform(self, X): # ここでXを変換します(例: スケーリング、欠損値の補完等) return X
TabNet (https://arxiv.org/pdf/1908.07442.pdf)
-
メリット
- TabNetでは内部的に重要な特徴を選択し、無関係な特徴を無視できる。
- TabNetはインスタンスごとの特徴の重要度を提供し、モデルの解釈を容易になる。
- 他の多くのディープラーニングモデルと同様に、TabNetはデータ内の非線形関係を効果的に捉えることができます。
- TabNetはスパースな特徴セットでも良好な性能を発揮します。
-
デメリット
- 大規模なデータセットの場合、TabNetのトレーニング時間は長くなる可能性があります。
- TabNetの性能はハイパーパラメータの選択に大きく依存します。最適なパラメータを見つけるには多くの実験が必要です。
- ディープラーニングモデルとして、TabNetは十分なメモリと計算リソースを必要とします。
-
使用方法
- インポート
pip install pytorch-tabnet
- 学習・評価
# モデルのインスタンスを作成 clf = TabNetClassifier() # モデルをトレーニング clf.fit(X_train, y_train) # テストデータで評価 preds = clf.predict(X_test)