pytoolkit.pipeline package

Submodules

pytoolkit.pipeline.blending module

scikit-learn

class pytoolkit.pipeline.blending.BlendingModel(num_models, models_dir, score_fn=None, direction=None, n_trials=100, preprocessors=None, postprocessors=None)[ソース]

ベースクラス: pytoolkit.pipeline.core.Model

平均を取るだけのアンサンブル。

TODO: 作りかけ。将来的に重み付き平均にして重みの推定とかも入れたい。

パラメータ
  • num_models (int) -- モデル数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • score_fn (typing.Callable[[tk.data.LabelsType, np.ndarray], float]) -- 指定した場合は重みを探索する。指定しなければ全部同じ重み。

  • direction (str) -- "minimize" or "maximize"

  • n_trials (int) --

  • preprocessors (tk.pipeline.EstimatorListType) --

  • postprocessors (tk.pipeline.EstimatorListType) --

pytoolkit.pipeline.cb module

CatBoost

class pytoolkit.pipeline.cb.CBModel(params, nfold, models_dir, cv_params=None, preprocessors=None, postprocessors=None)[ソース]

ベースクラス: pytoolkit.pipeline.core.Model

CatBoostのモデル。

パラメータ
  • params (typing.Dict[str, typing.Any]) -- CatBoostのパラメータ

  • nfold (int) -- cvの分割数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • cv_params (typing.Dict[str, typing.Any]) -- catboost.train用パラメータ (**kwargs)

feature_importance()[ソース]

Feature ImportanceをDataFrameで返す。

pytoolkit.pipeline.core module

前処理+モデル+後処理のパイプライン。

class pytoolkit.pipeline.core.Model(nfold, models_dir, preprocessors=None, postprocessors=None, save_on_cv=True)[ソース]

ベースクラス: object

パイプラインのモデルのインターフェース。

パラメータ
  • nfold (int) -- CVの分割数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • preprocessors (EstimatorListType) -- 前処理 (sklearnのTransformerの配列)

  • postprocessors (EstimatorListType) -- 後処理 (sklearnのTransformerの配列)

  • save_on_cv (bool) -- cv時にsaveもするならTrue。

cv(dataset, folds)[ソース]

CVして保存。

パラメータ
  • dataset (pytoolkit.data.Dataset) -- 入力データ

  • folds (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) -- CVのindex

戻り値

self

戻り値の型

pytoolkit.pipeline.core.Model

save(models_dir=None)[ソース]

保存。

パラメータ

models_dir (Optional[Union[str, os.PathLike]]) -- 保存先ディレクトリ (Noneならself.models_dir)

戻り値

self

戻り値の型

pytoolkit.pipeline.core.Model

load(models_dir=None)[ソース]

読み込み。

パラメータ

models_dir (Optional[Union[str, os.PathLike]]) -- 保存先ディレクトリ (Noneならself.models_dir)

戻り値

self

戻り値の型

pytoolkit.pipeline.core.Model

predict_oof(dataset, folds)[ソース]

out-of-foldなpredict結果を返す。

パラメータ
  • dataset (pytoolkit.data.Dataset) -- 入力データ

  • folds (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) -- CVのindex

戻り値

推論結果

戻り値の型

numpy.ndarray

predict_all(dataset)[ソース]

全fold分の推論結果をリストで返す。

パラメータ

dataset (pytoolkit.data.Dataset) --

戻り値の型

List[numpy.ndarray]

predict(dataset, fold)[ソース]

推論結果を返す。

パラメータ
戻り値

推論結果

戻り値の型

numpy.ndarray

pytoolkit.pipeline.keras module

Keras

class pytoolkit.pipeline.keras.KerasModel(create_network_fn, nfold, models_dir, train_data_loader, val_data_loader, refine_data_loader=None, *, compile_fn=None, score_fn=None, epochs, refine_epochs=0, refine_lr_factor=0.003, callbacks=None, model_name_format='model.fold{fold}.h5', skip_if_exists=True, skip_folds=(), base_models_dir=None, fit_params=None, parallel_cv=False, on_batch_fn=None, load_by_name=False, preprocessors=None, postprocessors=None)[ソース]

ベースクラス: pytoolkit.pipeline.core.Model

Kerasのモデル。

_saveではなく学習時にsaveしてしまっているので注意。

tf.distributeを使う場合は__init__やcvの呼び出しをstrategyのscope内で呼び出す必要があるので注意。

パラメータ
  • create_network_fn (typing.Callable[[], typing.Union[tf.keras.models.Model, typing.Tuple[tf.keras.models.Model, tf.keras.models.Model]]]) -- モデルの作成関数。2個のモデルを返す関数の場合、1個目が訓練用、2個目が推論用。

  • nfold (int) -- cvの分割数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • train_data_loader (tk.data.DataLoader) -- 訓練データの読み込み

  • val_data_loader (tk.data.DataLoader) -- 検証データの読み込み

  • refine_data_loader (typing.Optional[tk.data.DataLoader]) -- Refined Data Augmentation <https://arxiv.org/abs/1909.09148> 用

  • model_name_format (str) -- モデルのファイル名のフォーマット。{fold}のところに数字が入る。

  • skip_if_exists (bool) -- cv()でモデルが存在するときスキップするならTrue。

  • skip_folds (typing.Sequence[int]) -- cv()で(skip_if_existsとは関係なく)スキップするfoldのリスト。[0, nfold)

  • base_models_dir (tk.typing.PathLike) -- 指定した場合、学習前に重みを読み込む。

  • compile_fn (typing.Callable[[tf.keras.models.Model], None]) -- モデルのコンパイル処理

  • score_fn (typing.Callable[[tk.data.LabelsType, tk.models.ModelIOType], tk.evaluations.EvalsType]) -- ラベルと推論結果を受け取り、指標をdictで返す関数。指定しなければモデルのevaluate()が使われる。

  • epochs (int) -- tk.models.fit()のパラメータ

  • refine_epochs (int) -- refineのエポック数

  • refine_lr_factor (float) -- refineの学習率の係数。初期学習率×refine_lr_factorがrefine時の学習率になる。

  • callbacks (typing.List[tf.keras.callbacks.Callback]) -- tk.models.fit()のパラメータ

  • fit_params (typing.Dict[str, typing.Any]) -- tk.models.fit()のパラメータ

  • parallel_cv (bool) -- lgb.cvなどのように全foldまとめて処理するならTrue

  • on_batch_fn (tk.models.OnBatchFnType) -- predictで使用するon_batch_fn。

  • load_by_name (bool) -- load()でby_name=TrueするならTrue。既定値はFalse。

  • preprocessors (tk.pipeline.EstimatorListType) --

  • postprocessors (tk.pipeline.EstimatorListType) --

train_models[ソース]

訓練用モデル

pred_models[ソース]

推論用モデル

model_name_formatに"{fold}"が含まれない名前を指定した場合、 cvではなくtrainを使うモードということにする。

事前にself.train_modelsにモデルがある状態でcvやfitを呼んだ場合は追加学習ということにする。

check(dataset=None)[ソース]

モデルの動作確認。(KerasModel独自メソッド)

パラメータ

dataset (Optional[pytoolkit.data.Dataset]) -- チェック用データセット

戻り値

self

戻り値の型

pytoolkit.pipeline.keras.KerasModel

bench(dataset)[ソース]

DataLoaderの速度確認。(KerasModel独自メソッド)

パラメータ

dataset (pytoolkit.data.Dataset) -- チェック用データセット

戻り値

self

戻り値の型

pytoolkit.pipeline.keras.KerasModel

train(train_set, val_set=None, fold=0)[ソース]

1fold分の学習。(KerasModel独自メソッド)

パラメータ
戻り値

メトリクス名と値のdict

戻り値の型

Optional[Dict[str, float]]

evaluate(dataset, prefix=None, fold=0)[ソース]

評価する。(KerasModel独自メソッド)

パラメータ
  • dataset (pytoolkit.data.Dataset) -- データ

  • prefix (Optional[str]) -- メトリクス名の接頭文字列

  • fold (int) -- 何番目のモデルを使うか

戻り値

metricsの文字列と値のdict

戻り値の型

Dict[str, float]

predict_flow(dataset, fold=0)[ソース]

予測。

パラメータ
戻り値の型

Iterator[Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]]

create_network(fold)[ソース]

指定foldのモデルの作成。

パラメータ

fold (int) --

戻り値の型

None

pytoolkit.pipeline.lgb module

LightGBM

class pytoolkit.pipeline.lgb.LGBModel(params, nfold, models_dir, early_stopping_rounds=200, num_boost_round=9999, verbose_eval=100, callbacks=None, cv_params=None, seeds=None, init_score=None, preprocessors=None, postprocessors=None)[ソース]

ベースクラス: pytoolkit.pipeline.core.Model

LightGBMのモデル。

パラメータ
  • params (typing.Dict[str, typing.Any]) -- lgb.cvのパラメータ

  • nfold (int) -- cvの分割数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • early_stopping_rounds (int) -- lgb.cvのパラメータ

  • num_boost_round (int) -- lgb.cvのパラメータ

  • verbose_eval (int) -- lgb.cvのパラメータ

  • callbacks (typing.Sequence[typing.Callable[[typing.Any], None]]) -- lgb.cvのパラメータ

  • cv_params (typing.Dict[str, typing.Any]) -- lgb.cvのパラメータ (**kwargs)

  • seeds (np.ndarray) -- seed ensemble用のseedの配列

  • init_score (np.ndarray) -- trainとtestのinit_score

  • preprocessors (tk.pipeline.EstimatorListType) --

  • postprocessors (tk.pipeline.EstimatorListType) --

feature_importance(importance_type='gain')[ソース]

Feature ImportanceをDataFrameで返す。

パラメータ

importance_type (str) --

class pytoolkit.pipeline.lgb.ModelExtractor[ソース]

ベースクラス: object

lightgbm.cv() から学習済みモデルを取り出すためのコールバックに使うクラス

NOTE: 非公開クラス '_CVBooster' に依存しているため将来的に動かなく恐れがある

参照

property boosters_proxy[ソース]

Booster へのプロキシオブジェクトを返す。

property raw_boosters[ソース]

Booster のリストを返す。

property best_iteration[ソース]

Early stop したときの boosting round を返す。

class pytoolkit.pipeline.lgb.EvaluationLogger(period=100, show_stdv=True, level=20)[ソース]

ベースクラス: object

pythonのloggingモジュールでログ出力するcallback。

参照

pytoolkit.pipeline.lgb.lgb_r2(preds, train_data)[ソース]

LightGBM用R2

pytoolkit.pipeline.sklearn module

scikit-learn

class pytoolkit.pipeline.sklearn.SKLearnModel(estimator, nfold, models_dir, weights_arg_name='sample_weight', predict_method='predict', score_fn=None, preprocessors=None, postprocessors=None)[ソース]

ベースクラス: pytoolkit.pipeline.core.Model

scikit-learnのモデル。

パラメータ
  • estimator (sklearn.base.BaseEstimator) -- モデル

  • nfold (int) -- cvの分割数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • weights_arg_name (str) -- tk.data.Dataset.weightsを使う場合の引数名 (pipelineなどで変わるので。例: "transformedtargetregressor__sample_weight")

  • predict_method (str) -- "predict" or "predict_proba"

  • score_fn (typing.Callable[[tk.data.LabelsType, tk.models.ModelIOType], tk.evaluations.EvalsType]) -- ラベルと推論結果を受け取り、指標をdictで返す関数。指定しなければモデルのscore()が使われる。

  • preprocessors (tk.pipeline.EstimatorListType) --

  • postprocessors (tk.pipeline.EstimatorListType) --

pytoolkit.pipeline.xgb module

xgboost

class pytoolkit.pipeline.xgb.XGBModel(params, nfold, models_dir, early_stopping_rounds=200, num_boost_round=9999, verbose_eval=100, callbacks=None, cv_params=None, preprocessors=None, postprocessors=None)[ソース]

ベースクラス: pytoolkit.pipeline.core.Model

XGBoostのモデル。

パラメータ
  • params (typing.Dict[str, typing.Any]) -- XGBoostのパラメータ

  • nfold (int) -- cvの分割数

  • models_dir (tk.typing.PathLike) -- 保存先ディレクトリ

  • early_stopping_rounds (int) -- xgboost.cvのパラメータ

  • num_boost_round (int) -- xgboost.cvのパラメータ

  • verbose_eval (int) -- xgboost.cvのパラメータ

  • callbacks (typing.List[typing.Callable[[typing.Any], None]]) -- xgboost.cvのパラメータ

  • cv_params (typing.Dict[str, typing.Any]) -- xgboost.cvのパラメータ (kwargs)

  • preprocessors (tk.pipeline.EstimatorListType) --

  • postprocessors (tk.pipeline.EstimatorListType) --

feature_importance(importance_type='total_gain')[ソース]

Feature ImportanceをDataFrameで返す。

パラメータ

importance_type (str) --

pytoolkit.pipeline.xgb.xgb_r2(preds, dtrain)[ソース]

XGBoost用R2

Module contents

前処理+モデル+後処理のパイプライン。