我有一个关于 lgb 的问题。当我编写
lgb.train(.......)
它在不到一毫秒内就完成了。(对于 (10 000,25) 形状的数据集)
当我编写预测代码时,所有输出变量的值都相同。
train = pd.read_csv('data/train.csv', dtype = dtypes)test = pd.read_csv('data/test.csv')test.head()X = train.iloc[:10000, 3:-1].valuesy = train.iloc[:10000, -1].valuessc = StandardScaler()X = sc.fit_transform(X)#pca = PCA(0.95)#X = pca.fit_transform(X)d_train = lgb.Dataset(X, label=y)params = {}params['learning_rate'] = 0.003params['boosting_type'] = 'gbdt'params['objective'] = 'binary'params['metric'] = 'binary_logloss'params['sub_feature'] = 0.5params['num_leaves'] = 10params['min_data'] = 50params['max_depth'] = 10num_round = 10clf = lgb.train(params, d_train, num_round, verbose_eval=1000)X_test = sc.transform(test.iloc[:100,3:].values)pred = clf.predict(X_test, num_iteration = clf.best_iteration)
当我打印 pred 时,所有值都是 (0.49)
这是我第一次使用 lightgbm 模块。我的代码中是否有错误?还是应该查找数据集中的一些不匹配之处。
回答:
你的 num_round 值太小了,它刚开始学习就停止了。除此之外,把你的 verbose_eval 值调小一些,这样在训练过程中可以 visually 看到结果。我建议你尝试如下 lgb.train 代码:
clf = lgb.train(params, d_train, num_boost_round=5000, verbose_eval=10, early_stopping_rounds = 3500)
始终使用 early_stopping_rounds,因为如果模型没有明显的学习或开始过拟合时,模型应该停止。
不要犹豫,多问一些问题。祝你玩得开心。