lightGBMt和GridSearchCV调参代码

def train(x_train, y_train, X_test, y_test, systemCode):
    """XGB"""
    my_cv = TimeSeriesSplit(n_splits=5).split(x_train)

    eval_set = [(X_test, y_test)]
    cv_params = {'n_estimators':range(20,200,10),"max_depth":range(1,10,1),'num_leaves':range(10,100,5)}

    params = {
        #"boosting": "rf",
        # "num_boost_round":100,# 迭代次数
        'max_depth': 7,
        'n_estimators': 200,  # 基分类器个数
        'num_leaves': 10,  # 叶子节点数,由于lightGBM是leaves_wise生长,官方说法是要小于2^max_depth
        'learning_rate': 0.1,  # 学习速率
        'feature_fraction': 1,  # 建树的特征选择比例
        'bagging_fraction': 0.7,  # 建树的样本采样比例
    }
    model = lgb.LGBMRegressor(**params)
    optimized_GBM = GridSearchCV(estimator=model, param_grid=cv_params, scoring='neg_mean_absolute_error', cv=my_cv,
                                 n_jobs=6)
    # eval_metric输出每一轮的训练情况
    # early_stopping_rounds = 10 mae在10轮训练中没有提升,则停止
    optimized_GBM.fit(np.array(x_train), np.array(y_train), eval_metric='mae',
                      eval_set=[(np.array(x_train), np.array(y_train)), (np.array(X_test), np.array(y_test))],
                      early_stopping_rounds=100)
    # optimized_GBM.fit(np.array(x_train), np.array(y_train))
    model = optimized_GBM.best_estimator_
    print('参数的最佳取值:{0}'.format(optimized_GBM.best_params_))
    print('最佳模型得分:{0}'.format(optimized_GBM.best_score_))

    # model.fit(x_train, y_train, verbose=False)
    # plot_importance(model)
    # print(model)
    return model

你可能感兴趣的:(python)