10

我正在尝试lightgbm使用GridSearchCVfrom找到模型的最佳参数sklearn.model_selection。我一直无法找到真正有效的解决方案。

我设法设置了一个部分工作的代码:

import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import KFold

np.random.seed(1)

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
y = pd.read_csv('y.csv')
y = y.values.ravel()
print(train.shape, test.shape, y.shape)

categoricals = ['COL_A','COL_B']
indexes_of_categories = [train.columns.get_loc(col) for col in categoricals]

gkf = KFold(n_splits=5, shuffle=True, random_state=42).split(X=train, y=y)

param_grid = {
    'num_leaves': [31, 127],
    'reg_alpha': [0.1, 0.5],
    'min_data_in_leaf': [30, 50, 100, 300, 400],
    'lambda_l1': [0, 1, 1.5],
    'lambda_l2': [0, 1]
    }

lgb_estimator = lgb.LGBMClassifier(boosting_type='gbdt',  objective='binary', num_boost_round=2000, learning_rate=0.01, metric='auc',categorical_feature=indexes_of_categories)

gsearch = GridSearchCV(estimator=lgb_estimator, param_grid=param_grid, cv=gkf)
lgb_model = gsearch.fit(X=train, y=y)

print(lgb_model.best_params_, lgb_model.best_score_)

这似乎有效,但有UserWarning

categorical_feature已找到关键字params并将被忽略。请使用categorical_featureDataset 构造函数的参数来传递此参数。

我正在寻找一个可行的解决方案,或者可能是关于如何确保 lightgbm 接受上述代码中的分类参数的建议

4

2 回答 2

6

正如警告所说,categorical_feature这不是LGBMModel论据之一。它与lgb.Dataset实例化有关,在 sklearn API 的情况下,它直接在fit()方法中完成,请参见文档。因此,为了在GridSearchCV优化中通过那些,必须在 sklearn v0.19.1 的情况下将其作为方法的参数提供,或者在较旧的 sklearn 版本中GridSearchCV.fit()作为实例化的附加fit_params参数GridSearchCV

于 2018-06-05T10:13:45.063 回答
1

如果您正在为如何传递 fit_params 而苦苦挣扎,这也发生在我身上,您应该这样做:

fit_params = {'categorical_feature':indexes_of_categories}
clf = GridSearchCV(model, param_grid, cv=n_folds)
clf.fit(x_train, y_train, **fit_params)
于 2022-02-11T10:34:19.810 回答