pytoolkit.lgb module

LightGBM関連。

importしただけでlightgbm.register_loggerを呼び出すため注意。

サンプル

import pytoolkit.lgb
import pytoolkit.tablurs

train_data_path = "path/to/train.csv"
test_data_path = "path/to/test.csv"
input_data_path = "path/to/input.csv"

# ログの初期化
pytoolkit.logs.init()

# データの読み込み
train_data, train_labels = pytoolkit.tablurs.load_labeled_data(
    train_data_path, "label_col_name"
)
test_data, test_labels = pytoolkit.tablurs.load_labeled_data(
    test_data_path, "label_col_name"
)

# 学習
model = pytoolkit.lgb.train(train_data, train_labels, groups=None)

# 保存・読み込み
model.save(model_dir)
model = pytoolkit.lgb.load(model_dir)

# 評価
evals = model.evaluate(test_data, test_labels)
assert 0.0 <= evals["acc"] <= 1.0
assert 0.0 <= evals["auc"] <= 1.0

# 推論
input_data = pytoolkit.tablurs.load_unlabeled_data(input_data_path)
results = model.infer(input_data)
assert isinstance(results, np.ndarray)
class pytoolkit.lgb.ModelMetadata[ソース]

ベースクラス: TypedDict

モデルのメタデータの型定義。

task: Literal['binary', 'multiclass', 'regression'][ソース]
categorical_values: dict[str, list[Any]][ソース]
class_names: list[Any] | None[ソース]
params: dict[str, Any][ソース]
nfold: int[ソース]
best_iteration: int[ソース]
cv_scores: dict[str, float][ソース]
class pytoolkit.lgb.Model(boosters, metadata)[ソース]

ベースクラス: BaseModel

テーブルデータのモデル。

パラメータ:
  • boosters (list[lightgbm.basic.Booster]) --

  • metadata (ModelMetadata) --

save(model_dir)[ソース]

保存。

パラメータ:

model_dir (str | PathLike[str]) -- 保存先ディレクトリ

戻り値の型:

None

classmethod load(model_dir)[ソース]

モデルの読み込み

パラメータ:

model_dir (str | PathLike[str]) -- 保存先ディレクトリ

戻り値:

モデル

戻り値の型:

Model

evaluate(data, labels)[ソース]

推論。

パラメータ:
  • data (DataFrame | DataFrame) -- 入力データ

  • labels (_SupportsArray[dtype] | _NestedSequence[_SupportsArray[dtype]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]) -- ラベル

戻り値:

スコア

戻り値の型:

dict[str, float]

infer(data, verbose=True)[ソース]

推論。

パラメータ:
  • data (DataFrame | DataFrame) -- 入力データ

  • verbose (bool) -- 進捗表示の有無

戻り値:

推論結果(分類ならshape=(num_samples,num_classes), 回帰ならshape=(num_samples,))

戻り値の型:

ndarray[Any, dtype[float32]]

infer_oof(data, folds, verbose=True)[ソース]

out-of-fold推論。

パラメータ:
  • data (DataFrame | DataFrame) -- 入力データ

  • folds (Sequence[tuple[numpy.ndarray[Any, numpy.dtype[numpy.int32]], numpy.ndarray[Any, numpy.dtype[numpy.int32]]]]) -- 分割方法

  • verbose (bool) -- 進捗表示の有無

戻り値:

推論結果(分類ならshape=(num_samples,num_classes), 回帰ならshape=(num_samples,))

戻り値の型:

ndarray[Any, dtype[float32]]

infers_to_labels(pred)[ソース]

推論結果(infer, infer_oof)からクラス名などを返す。

パラメータ:

pred (ndarray[Any, dtype[float32]]) -- 推論結果

戻り値:

クラス名など

戻り値の型:

ndarray[Any, dtype[ScalarType]]

get_feature_names()[ソース]

列名を返す。

戻り値:

列名の配列

戻り値の型:

list[str]

get_feature_importance(importance_type='gain', normalize=True)[ソース]

feature importanceを返す。

パラメータ:
  • importance_type -- "split" or "gain"

  • normalize (bool) -- Trueの場合、合計が1になる配列を返す

戻り値:

feature importance

戻り値の型:

ndarray[Any, dtype[float32]]

pytoolkit.lgb.train(data, labels, weights=None, groups=None, folds=None, task='auto', categorical_feature='auto', init_score=None, num_boost_round=9999, do_early_stopping=True, first_metric_only=True, learning_rate=0.1, objective=None, metric=None, fobj=None, feval=None, eval_train_metric=False, hpo=False, do_bagging=True, encode_categoricals=True, seed=1)[ソース]

学習

パラメータ:
  • data (DataFrame | DataFrame) -- 入力データ

  • labels (_SupportsArray[dtype] | _NestedSequence[_SupportsArray[dtype]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes]) -- ラベル

  • weights (_SupportsArray[dtype] | _NestedSequence[_SupportsArray[dtype]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None) -- 入力データの重み

  • groups (_SupportsArray[dtype] | _NestedSequence[_SupportsArray[dtype]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None) -- 入力データのグループ

  • folds (Sequence[tuple[numpy.ndarray[Any, numpy.dtype[numpy.int32]], numpy.ndarray[Any, numpy.dtype[numpy.int32]]]] | None) -- CVの分割情報

  • do_early_stopping (bool) -- Early Stoppingをするのか否か

  • hpo (bool) -- optunaによるハイパーパラメータ探索を行うのか否か

  • do_bagging (bool) -- bagging_fraction, feature_fractionを設定するのか否か。 ラウンド数が少ない場合はFalseの方が安定するかも。 hpo=Trueなら効果なし。

  • categorical_feature (Literal['auto'] | list[str]) -- カテゴリ列

  • encode_categoricals (bool) -- categorical_featureに指定した列をエンコードするか否か

  • seed (int) -- 乱数シード

  • task (Literal['classification', 'regression', 'auto']) --

  • init_score (_SupportsArray[dtype] | _NestedSequence[_SupportsArray[dtype]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None) --

  • num_boost_round (int) --

  • first_metric_only (bool) --

  • learning_rate (float) --

  • eval_train_metric (bool) --

戻り値:

モデル

戻り値の型:

Model

pytoolkit.lgb.load(model_dir)[ソース]

学習済みモデルの読み込み

パラメータ:

model_dir (str | PathLike[str]) -- 保存先ディレクトリ

戻り値:

モデル

戻り値の型:

Model

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

ベースクラス: object

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

参照