繁体   English   中英

LightGBM的多类分类

[英]Multiclass Classification with LightGBM

我正在尝试使用Python中的LightGBM为多类分类问题(3个类)建模分类器。 我使用了以下参数。

params = {'task': 'train',
    'boosting_type': 'gbdt',
    'objective': 'multiclass',
    'num_class':3,
    'metric': 'multi_logloss',
    'learning_rate': 0.002296,
    'max_depth': 7,
    'num_leaves': 17,
    'feature_fraction': 0.4,
    'bagging_fraction': 0.6,
    'bagging_freq': 17}

数据集的所有分类特征都使用LabelEncoder标签编码。 我使用eartly_stopping运行cv后训练模型,如下所示。

lgb_cv = lgbm.cv(params, d_train, num_boost_round=10000, nfold=3, shuffle=True, stratified=True, verbose_eval=20, early_stopping_rounds=100)

nround = lgb_cv['multi_logloss-mean'].index(np.min(lgb_cv['multi_logloss-mean']))
print(nround)

model = lgbm.train(params, d_train, num_boost_round=nround)

训练结束后,我用这样的模型进行预测,

preds = model.predict(test)
print(preds)             

我有一个嵌套数组作为这样的输出。

[[  7.93856847e-06   9.99989550e-01   2.51164967e-06]
 [  7.26332978e-01   1.65316511e-05   2.73650491e-01]
 [  7.28564308e-01   8.36756769e-06   2.71427325e-01]
 ..., 
 [  7.26892634e-01   1.26915179e-05   2.73094674e-01]
 [  5.93217601e-01   2.07172044e-04   4.06575227e-01]
 [  5.91722491e-05   9.99883828e-01   5.69994435e-05]]

由于preds中的每个列表代表类概率,我使用np.argmax()来查找类似这样的类。

predictions = []

for x in preds:
    predictions.append(np.argmax(x))

在分析预测时,我发现我的预测仅包含2个类 - 0和1.类2是训练集中的第2大类,但在预测中无处可寻。在评估结果时,它给出了大约78%准确度。

那么,为什么我的模型没有预测任何一个案例的第2类。 我使用的参数有什么不对吗?

这不是模型进行解释预测的正确方法吗? 我应该对参数进行任何更改吗?

尝试通过交换0和2类进行故障排除,并重新运行训练和预测过程。

如果新预测仅包含类1和2(很可能包含您提供的数据):

  • 分类器可能没有学过第三类; 也许它的特征与较大类的特征重叠,并且分类器默认为较大的类,以便最小化目标函数。 尝试提供平衡的训练集(每班相同数量的样本)并重试。

如果新预测确实包含所有3个类:

  • 你的代码在某处出了点问题。 需要更多信息来确定究竟出了什么问题。

希望这可以帮助。

从您提供的输出中,预测中似乎没有任何错误。

当你展示时,该模型会产生三个概率,并且只是你提供的第一个输出[7.93856847e-06 9.99989550e-01 2.51164967e-06] 2级概率更高,所以我在这里看不到问题。

0类是第一类,第1类实际上是第2类第2类,第2类是第3类。 所以我猜没有错。

解决方案是:

best_preds_svm = [np.argmax(line) for line in preds]

然后您可以打印具有最合理结果的类。

import pandas as pd

pd.DataFrame(preds).apply(lambda x: np.argmax(x), axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM