machine-learning - 目标大多为零的神经网络
问题描述
我对神经网络很陌生。我有一个包含 16M 记录的数据集,其中只有 70K 标记为 1,其余为 0(即使通过设置一些特殊限制,总数也不会少于 250 万条记录,其中 58K 标记为 1,并且限制不是也完全合乎逻辑)。处理这类数据有什么特殊的做法吗?
现在,如果我只是编写一个始终返回 0 的函数,那么准确率将是 99.56% !神经网络是一个合适的选择吗?如果不是,我的替代方案是什么,如果是,应该如何处理?
tnx
解决方案
您可以尝试为标记为 1 的样本或分别来自两个类的小批量样本赋予更高的权重,以便向网络显示来自两个类的相同数量的示例。
对于第一种方法,Keras 等框架提供了一个选项,可以为每个类包含一个权重因子:
class_weights = {
0: 1.0,
1: 43.0,
}
model.fit(X, y, ..., class_weight=class_weights)
scikit-learn 有一种自动计算类权重的方法,如Kaggle 上的评论所示
在这种情况下,准确性并不是衡量网络性能的好方法。精度、第 1 类的召回率或类似措施可能会更好地理解模型的性能。
推荐阅读
- reactjs - React + Redux PUT api 请求编辑我的 redux 存储中的数据
- angularjs - 检查 gridOptions 中是否存在行
- javascript - 如何仅使用本机 Promise 编写异步计数器,即具有异步代码同步接口的计数器?
- python - QPrinter 和 QPainter 从 TreeView 打印到 PDF 错误
- garbage-collection - Linux 中的 Mono GC:为什么要占用更多的内存、更多的时间来做 GC 和 GetTotalMemory 的成本如此之高?
- c++ - tcp 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- java - javafx 将并发绘制到多个画布中
- c++ - Code::Blocks C++ 用 MacOS Mojave 编译:致命错误:sys/cdefs.h:没有这样的文件或目录
- android - 更新到新的 Android Studio 3.2 后出现错误
- amazon-web-services - AWS CloudFormation:仅在角色不存在时创建角色