目标数据值分布不均

数据挖掘 Python 逻辑回归 准确性
2022-03-08 03:56:26

数据性质:

我有 10 个数字类型和其他 10 个分类的特征,有很多值,最后,使用 one-hot 编码我得到了一个 600 列的矩阵。我的问题是准确度为 0.7,因为我知道其他同行的准确度超过了 0.9。

问题:

目标数据是二进制的,根本不均匀分布。在预处理后盲目尝试from sklearn.linear_model import LogisticRegressionsklearn.svm使用roc_auc_score: .7.75.

回到基础,我运行这个

train['cible'].value_counts() / train['cible'].count()

并得到

1    0.970791
0    0.029209
Name: cible, dtype: float64

我觉得很有趣,但我怎样才能提高准确性。有什么提示吗?

注意:我将编辑并添加假阳性率和真阳性率,因为我失去了输出,在缩放、丢失数据插补和重新训练模型后需要几个小时。

1个回答

来自scikitlearn LogisticRegression文档:

class_weight:dict或'balanced',默认值:无

与 {class_label: weight} 形式的类关联的权重。如果没有给出,所有的类都应该有一个权重。“平衡”模式使用 y 的值自动调整与输入数据中的类频率成反比的权重,如 n_samples / (n_classes * np.bincount(y))。请注意,如果指定了 sample_weight,这些权重将与 sample_weight(通过 fit 方法传递)相乘。0.17 新版功能:class_weight='balanced'

所以尝试添加class_weight='balanced'你的电话到LogisticRegression()

或者,如果这不起作用,请尝试将一个均匀分割的数据集用作 trainSet:其中 1 类的样本数等于 0 类。