提高逻辑模型的准确性

数据挖掘 分类 喀拉斯 逻辑回归 执行
2022-02-23 12:38:34

我试图从一篇论文中重现结果,其中作者最小化了以下损失函数 其中w是权重,\lambdaijcnn1 数据集的正则化参数。

minwRd1ni[n]log(1+exp(yixiTw))+λ2w2,
wλ

该数据集是由不平衡数据(90%-0、10%-1)所特有的。作为预处理步骤,我应用了 MinMaxScaler 和 StandardScaler。

我使用用 keras 编写的模型,它看起来很简单:

model = keras.Sequential([
    keras.layers.Dense(1, activation="sigmoid", kernel_initializer='uniform', kernel_regularizer=regularizers.l2(1e-4), use_bias=True)
])
sgd = optimizers.SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(optimizer=sgd, loss='binary_crossentropy', metrics=['accuracy'])
model.fit(train_dataset, epochs=1000)

但是,我最多只能获得 91% 的准确率。查看预测,我观察到我的模型学会了将几乎所有内容都预测为零。我也尝试使用 class_weight,但似乎没有帮助。有没有人有任何建议,如何获得更好的结果?

1个回答

如果你有不成比例的零,这意味着你的模型没有足够的数据来学习如何正确分类观察。因为它几乎总是看到零,它可能已经学会了输出零。

解决这个问题的主要方法是使用小批量训练模型,并通过以相等概率对 0 和 1 观测值进行采样来构建它们 - 换句话说,与零值相比,赋予 1 观测值更大的权重。这样,您的模型将获得平衡的数据,并学会正确分类它们。