首届世界科学智能大赛:生命科学赛道——生物学年龄评价与年龄相关疾病风险预测(第三次笔记)

首届世界科学智能大赛:生命科学赛道——生物学年龄评价与年龄相关疾病风险预测(第三次笔记)

背景介绍见第一次笔记: http://t.csdn.cn/ylDRW
性能提升初步探索见第二次笔记:http://t.csdn.cn/Dz3Zh

在前两篇博客里,我们已经尝试了特征优化,包括降维、方差过滤、相关性过滤等方法,但是由于有些降维方法对缺失值或者负数比较敏感,是不能使用的;再则一些过滤方法的提升不大还是会造成各种各样的问题。

在本博客中,主要讨论上次提到的三点:

  • 一次性读取10万个特征扛不住,老是内核崩掉,如何解决?
  • 缺失值该如何处理?(前一节已经谈过,不再赘述)
  • catboost是否一定比xgboost和lightgbm的效果要好

1. 特征读取

经过多次试验,发现catboost只能读取2-3w条特征,即使经过数据压缩,一旦达到3w条左右就会由于内存过大,造成内核崩溃

在读取2w条特征,迭代次数6000次左右的时候,score可以达到3.3818。这时,即使增加迭代次数到8000次,性能也不再增加,说明在catboost这种模型下,读取2w条特征时性能已经达到瓶颈,要想其他方法继续提升性能。

请添加图片描述

| 小技巧:观察离线结果,不用只看线上的,要线上提交与线下测试结果同增同减

其实,我们可以看到,增加读取的特征是可以继续提升性能的,是一件让人很兴奋的事!!!后面可以继续朝着这个思路进行实验。

这时,我们有三个思路:

  • 一个是换其他的模型,看看能不能读取更多特征
  • 另一个是换一个内存更大的设备
  • 使用节省内存的存储方式

让我们先来看看第一个思路!

2.尝试其他模型

其实这个观点和我们上次提出的”catboost是否一定比xgboost和lightgbm的效果要好?“是一个问题,这里我们先比较一下catboost、xgboost和lightgbm,分析他们的概念,优缺点以及使用场景:

2.1 区别和联系

CatBoost、XGBoost和LightGBM 都是用于梯度提升树(Gradient Boosting Trees)的机器学习框架,它们在处理各种数据集和问题上都表现出色,但各自具有一些特点、优势和限制。以下是它们的比较:

1. CatBoost:

概念: CatBoost是一种基于梯度提升树的开源机器学习库,专门设计用于处理类别特征(categorical features)。它内部使用了有序统计编码(Ordered Boosting)等技术来处理分类特征,而不需要进行独热编码等手动处理。

优点:

  • 处理类别特征:CatBoost在处理分类特征方面表现出色,可以自动地处理类别特征,不需要用户进行额外的编码工作。
  • 自动调参:CatBoost具有自动调参的能力,可以自动优化超参数,使其更容易使用。
  • 鲁棒性:它对于噪声数据和缺失值具有较强的鲁棒性
  • 准确性:通常情况下,CatBoost在预测准确性方面表现很好。

缺点:

  • 训练时间:相对于XGBoost和LightGBM,CatBoost的训练时间可能较长
  • 内存占用:在处理大型数据集时,可能需要较大的内存
  • 参数选择:虽然有自动调参功能,但可能需要更多的时间来调整参数以达到最佳性能。

使用场景: CatBoost适用于需要处理大量分类特征的数据集,以及对准确性要求高的任务,如点击率预测、推荐系统等。

2. XGBoost:

概念: XGBoost(Extreme Gradient Boosting)是一种广泛使用的梯度提升树库,它在各种机器学习竞赛中表现出色。XGBoost采用了正则化技术来防止过拟合。

优点:

  • 高性能:XGBoost具有出色的性能,通常比其他梯度提升树库更快
  • 正则化:XGBoost支持正则化,可以减少过拟合风险。
  • 灵活性:它支持自定义损失函数,适用于多种不同类型的任务
  • 特征重要性:XGBoost提供了有用的特征重要性分数

缺点:

  • 对类别特征的处理:相对于CatBoost,XGBoost在处理分类特征时需要更多的预处理工作。
  • 参数调整:需要仔细的参数调整以获得最佳性能。

使用场景: XGBoost适用于各种类型的数据集,特别是对性能有较高要求的任务,如分类、回归、排名等。

3. LightGBM:

概念: LightGBM是一种基于梯度提升树的高性能库,它采用了一种称为“基于直方图的学习”的方法,可以有效地减少内存使用和训练时间。

优点:

  • 高性能:LightGBM通常比XGBoost和CatBoost更快,因为它使用了直方图技术来加速训练。
  • 内存效率:LightGBM对内存的需求较低,适用于大型数据集
  • 分布式训练:支持分布式训练,可扩展到大规模数据集。

缺点:

  • 对类别特征的处理:与XGBoost类似,LightGBM在处理分类特征时需要一些预处理。
  • 自动调参:自动超参数调整的功能有限。

使用场景: LightGBM适用于大规模数据集和需要高性能的任务,如点击率预测、图像分类等。

总的来说,选择使用CatBoost、XGBoost还是LightGBM取决于您的数据集和任务要求。如果您处理的数据包含大量分类特征,CatBoost可能是一个不错的选择。如果对性能要求很高且不介意一些额外的预处理工作,XGBoost和LightGBM都是不错的选择。在实际应用中,通常需要尝试不同的模型以找到最适合您的数据的模型。

2.2 在具体任务中的性能

首先,Catboost我们已经尝试过了,这里不再赘述。

XGBoost相较于catboost使用的内存更小,原理上来说应该可以读取更多的特征。实际上是不是呢?

在经过多次试验后,我们发现,xgboost确实可以处理更多的特征,使用它读取5w-6w条特征不成问题,随着读取的特征变多,我们学习到的信息也变多,性能确实也带来了很大的提升,通过调参,主要是迭代次数,学习率,读取的特征数等,性能大概在 2.7-3.0 之间

LightGBM这种算法,对内存的需求较低,适用于大型数据集,因此看起来应该会比前两种方法效果要更好,时间原因,经过几次实验,得到初步结果发现,LightGBM非常适合此任务,相较于前两种方法,一是能够读取的特征更多,而是运行更快,性能大概在 2.35-3.55 左右,还需要更多实验进行确定。

3. 文件存储方式

数据文件存储方式有很多种,选择哪种方式取决于您的数据类型、需求以及使用场景。以下是一些常用的数据文件存储方式:

  1. 文本文件格式:

    • CSV(逗号分隔值): 以逗号或其他分隔符分隔的文本文件,常用于存储表格数据
    • TSV(制表符分隔值): 以制表符分隔的文本文件,也用于存储表格数据。
  2. 二进制文件格式:

    • H5(HDF5): 一种层次化的二进制文件格式,用于存储大规模科学数据
    • PKL(Pickle): Python特定的二进制格式,用于存储Python对象。
    • Parquet: 列式存储格式,用于大规模数据分析。
    • Avro: 二进制数据序列化格式,用于数据交换和存储。
    • Arrow: 内存数据格式,用于高性能数据传输和共享。
  3. 数据库:

    • SQL数据库: 用于结构化数据的关系型数据库,如MySQL、SQLite、PostgreSQL等。
    • NoSQL数据库: 用于非结构化或半结构化数据的非关系型数据库,如MongoDB、Cassandra、Redis等。
    • NewSQL数据库: 结合了SQL和NoSQL特性的数据库,如CockroachDB、Google Spanner等。
  4. 云存储:

    • Amazon S3: 亚马逊的对象存储服务,用于存储和管理大规模数据。
    • Google Cloud Storage: 谷歌的云存储服务,用于数据存储和分析。
    • Microsoft Azure Blob Storage: 微软的云存储服务,用于数据存储和管理。
  5. 日志文件:

    • 日志文件: 用于记录系统、应用程序、网络活动等信息的文本文件,常用于故障排除和分析。
  6. 图像/音频/视频文件:

    • 图像格式: JPEG、PNG、BMP等用于存储图像数据。
    • 音频格式: MP3、WAV、FLAC等用于存储音频数据。
    • 视频格式: MP4、AVI、MKV等用于存储视频数据。
  7. 配置文件:

    • JSON(JavaScript Object Notation): 轻量级文本数据交换格式,用于配置文件和数据交换。
    • YAML(YAML Ain’t Markup Language): 人类可读的配置文件格式,常用于配置文件和数据序列化。
  8. 日历文件:

    • iCalendar: 用于存储日历事件和任务的文本文件格式,常用于日程管理。
  9. 数据仓库:

    • 数据仓库: 专门用于存储、管理和查询大规模数据的系统,如Amazon Redshift、Google BigQuery、Snowflake等。

这只是一些常用的数据文件存储方式的示例。选择合适的存储方式应该考虑数据的类型、规模、访问需求以及处理工具和平台的兼容性。

这里我们具体比较在日常竞赛、数据处理中常用的csv、pkl和h5这三种数据存储方式:

3.1 区别和联系

1. H5(HDF5)文件格式:

  • 概念: H5(HDF5)是一种层次化数据格式,专为大规模科学数据设计。它支持多种数据类型,具有内置压缩和并行读写功能。

  • 优点:

    • 层次结构: H5文件支持层次结构,可以组织和存储多个数据集和组,使数据组织更有条理。
    • 多数据类型: 支持多种数据类型,包括数值、文本、图像等。
    • 跨平台兼容性: H5文件格式跨平台,可在不同操作系统上使用。
    • 高性能: 适用于大型数据集和高速读写操作。
  • 缺点:

    • 复杂性: H5文件的层次结构和功能相对复杂,可能需要更多的工作来创建和处理文件。
    • 文件大小: 由于结构和元数据,H5文件可能较大。
  • 使用场景: H5文件适用于需要组织大规模、多类型数据的科学研究、高性能计算和大数据应用。

2. PKL(Pickle)文件格式:

  • 概念: PKL(Pickle)是Python中的一种序列化格式,用于将Python对象转化为二进制数据并进行存储。

  • 优点:

    • 简单: 创建和使用PKL文件非常简单,无需额外的库或工具。
    • Python对象: 可以存储任何Python对象,包括模型、自定义类等。
    • 速度: 加载PKL文件的速度相对较快。
  • 缺点:

    • Python特定: PKL文件是Python特定的,不适用于跨语言或跨平台数据交换。
    • 安全性: 加载未知来源的PKL文件可能存在安全风险,因为它可以执行存储在其中的代码。
  • 使用场景: PKL文件适用于在Python环境中保存和加载Python对象,如模型权重、配置等。

3. CSV 文件格式:

  • 概念: CSV(逗号分隔值)是一种简单的文本文件格式,用于存储表格数据,数据之间以逗号或其他分隔符分隔。

  • 优点:

    • 简单: 创建和编辑CSV文件非常简单,可以用文本编辑器打开。
    • 通用性: CSV文件是通用的,几乎所有编程语言和数据分析工具都支持读写CSV。
    • 跨平台: CSV文件可以在不同操作系统之间轻松共享。
  • 缺点:

    • 有限的数据类型: CSV文件只支持文本和数值数据,不支持复杂的数据类型。
    • 性能: 对于大型数据集,CSV文件可能不如二进制格式快速。
  • 使用场景: CSV文件适用于存储简单的表格数据,如数据库导出、数据分析结果等。

选择哪种文件格式取决于您的具体需求。如果需要存储结构化表格数据,CSV可能是一个不错的选择。如果需要保存和加载Python对象,PKL可以方便地实现。对于大规模科学数据或需要多种数据类型的情况,H5文件格式可能更合适。要根据特定的用例和需求来选择最适合的文件格式。

3.2 在具体任务中的性能

性能比较: h5 > pkl > csv

由于H5文件具有内置压缩和并行读写功能,能够快速读取大量数据,非常适合用于此任务。

下一步可以尝试的思路

  1. 探索h5文件存储格式能够读取的最大特征数
    on对象,PKL可以方便地实现。对于大规模科学数据或需要多种数据类型的情况,H5文件格式可能更合适。要根据特定的用例和需求来选择最适合的文件格式。

3.2 在具体任务中的性能

性能比较: h5 > pkl > csv

由于H5文件具有内置压缩和并行读写功能,能够快速读取大量数据,非常适合用于此任务。

下一步可以尝试的思路

  1. 探索h5文件存储格式能够读取的最大特征数
  2. 尝试LightGBM算法的最佳参数

猜你喜欢

转载自blog.csdn.net/qq_42859625/article/details/132502870