lightgbm分类器:预测全是1

问题描述 投票:0回答:1

我有一个 lightGBM 分类器模型,我想在 un_balanced 数据上进行训练。训练集中有 32500 个 1 和 2898 个 0 。特征数量为 30 个,其中 17 个为分类数据。这就是我训练数据的方式。所有的预测都变成了 1 .

params_dict = dict(
        objective="binary",
        early_stopping_round=30,
        num_threads=-1,
        learning_rate=0.01,
        verbosity=1,
        is_unbalance=True,
        max_depth=15,
        num_leaves=30,
        num_iterations=500,
        min_child_samples=1000,
    )
model = lgbm.LGBMClassifier(**params_dict)
model.fit(X=X_train, y=y_train, eval_set =[(X_valid, y_valid)] )

python lightgbm
1个回答
0
投票

处理不平衡数据时,这种情况很常见。这里我给大家提供一些可能的解决方案。首先,您可以对训练和测试进行分层。然后您可以为模型传递另一个评分器,例如:recall 或 f1。您还可以使用可以传递 class_weight 参数的模型,例如逻辑回归或随机森林。另一种选择是使用 SMOTE 生成合成数据,这将平衡您的数据。 我给你举几个例子: 通过分层进行训练和测试拆分:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df, df['TARGET'],test_size=0.15,random_state=0,stratify=df['TARGET'])

类别权重,所以也许你使用另一个模型会得到更好的结果:

class_weight='balanced'

或者你可以尝试不同的重量:

[{0: w} for w in [1, 2, 10]] + ['balanced']

如果您确定要使用 LGBMClassifier,我认为 SMOTE 是您更好的选择,您可以在此处阅读示例:smote-oversampling_for-imbalanced-classification

您必须小心处理合成数据并验证您的真实数据。 希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.