分子AI预测赛Task4笔记(结束)

news2024/9/20 6:00:10

话不多说,直接上官方链接:‌​​​‍​⁠​‌​‍​​​‌​⁠‬​‬​​‌​​​​‬‬​​​​‍⁠‍‌​⁠Task3:进阶baseline详解 - 飞书云文档 (feishu.cn)Task4:持续尝试,上分! - 飞书云文档 (feishu.cn)

 一、理解

  • 阅读了官方发布的Task4链接内容,主要是对“特征工程”、“模型训练”、"模型验证"三大模块进行优化
    • “特征工程”模块优化对InChI进行展开构建特征(即提取分子式、计算分子量、原子记数)
    • “模型训练”模块优化:
      • 方案一:使用lightgbm、xgboost和catboost模型依次跑完测试,取三个模型结果的平均值。
      • 方案二:使用stacking分层模型集成框架
    • "模型验证"模块优化,类比模型训练方案一和方案二,从而得出最终的优化后的结果

 二、此次分子AI赛个人最终代码

  • # 1. 导入需要用到的相关库
    import pandas as pd  # 导入Pandas库,用于数据处理
    import numpy as np  # 导入Numpy库,用于数值计算
    from xgboost import XGBClassifier  # 导入XGBoost分类器
    from sklearn.model_selection import train_test_split, GridSearchCV  # 导入训练测试集划分和网格搜索库
    from sklearn.preprocessing import LabelEncoder  # 导入标签编码器
    from sklearn.feature_selection import SelectFromModel  # 导入基于模型的特征选择库
    
    # 2. 读取训练集和测试集
    train = pd.read_excel('./data/data280993/traindata-new.xlsx')  # 读取训练集数据
    test = pd.read_excel('./data/data280993/testdata-new.xlsx')  # 读取测试集数据
    
    # 3. 特征工程
    # 3.1 删除train数据中的 'DC50 (nM)' 和 'Dmax (%)' 列
    train = train.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)  # 删除不需要的列
    
    # 3.2 处理分类数据
    # 使用LabelEncoder对分类特征进行编码
    label_encoders = {}  # 创建一个空字典来存储编码器
    for col in train.columns[2:]:  # 遍历除了前两列之外的所有列
        if train[col].dtype == object:  # 检查列是否为对象类型(即字符串)
            # 合并训练集和测试集的类别
            combined_data = pd.concat([train[col], test[col]])  # 合并训练集和测试集的对应列
            le = LabelEncoder()  # 创建LabelEncoder实例
            combined_data = le.fit_transform(combined_data)  # 对合并后的数据编码
            train[col] = combined_data[:len(train)]  # 将编码后的数据放回训练集
            test[col] = combined_data[len(train):]  # 将编码后的数据放回测试集
            label_encoders[col] = le  # 保存编码器以备后用
    
    # 检查测试集中非数值类型的特征
    non_numeric_cols = test.select_dtypes(include=['object']).columns.tolist()  # 获取测试集中非数值类型的列名列表
    
    # 处理非数值类型的特征
    for col in non_numeric_cols:
        # 如果该特征应该在模型中,确保它是数值类型的
        if col in train.columns[2:]:
            # 尝试将字符串转换为数值类型
            test[col] = pd.to_numeric(test[col], errors='coerce')  # 转换为数值类型,无法转换的变为NaN
    
    # 确保测试集中没有缺失值
    test = test.fillna(0)  # 用0填充测试集中的缺失值
    
    # 分离特征和标签
    X_train = train.iloc[:, 2:].values  # 获取训练集的特征值
    y_train = train['Label'].values  # 获取训练集的标签值
    X_test = test.iloc[:, 1:].values  # 获取测试集的特征值
    
    # 4. 特征选择
    # 使用 XGBoost 模型进行特征选择
    selector = SelectFromModel(XGBClassifier(use_label_encoder=False, eval_metric='logloss'))  # 创建特征选择器
    selector.fit(X_train, y_train)  # 训练特征选择器
    X_train_selected = selector.transform(X_train)  # 应用特征选择器到训练集
    X_test_selected = selector.transform(X_test)  # 应用特征选择器到测试集
    
    # 5. 模型调优
    # 定义 XGBoost 模型的参数网格
    param_grid = {  # 定义参数网格
        'n_estimators': [100, 200, 300],  # 树的数量
        'max_depth': [5, 7, 9],  # 树的最大深度
        'learning_rate': [0.006, 0.04, 0.15],  # 学习率
        'subsample': [0.35, 0.55, 0.95],  # 子采样率
        'colsample_bytree': [0.55, 0.75, 0.95],  # 列采样率
    }
    
    # 使用网格搜索进行模型调优
    xgb_model = XGBClassifier(use_label_encoder=False, eval_metric='logloss')  # 创建XGBoost模型
    grid_search = GridSearchCV(estimator=xgb_model, param_grid=param_grid, cv=5)  # 创建网格搜索实例
    # 执行网格搜索以找到最佳参数组合
    grid_search.fit(X_train_selected, y_train)  # 执行网格搜索以找到最佳参数组合
    
    # 获取最佳参数模型
    best_xgb_model = grid_search.best_estimator_  # 获取最佳估计器(模型)
    
    # 6. 使用最佳模型进行预测
    pred = best_xgb_model.predict(X_test_selected)  # 使用最佳模型对测试集进行预测
    result = pd.DataFrame({'uuid': test['uuid'], 'Label': pred})  # 创建包含预测结果的DataFrame
    
    # 7. 保存结果文件到本地
    result.to_csv('submit_xgb2.csv', index=False)  # 将结果保存为CSV文件,不包含索引
    
  • 得分:0.76761

 三、结语

  • 还是学到了不少东西,虽然在机器学习这方面零基础但是通过官方4个Task的指引,从中学到了不少思路,尽管还是有很多东西看不懂,但是思维方式起码跟着Task有所提升
  • 工作之余学习一下,对我来说还是有提升的,非常新颖的学习方式,但是想要彻底去学习透彻还是得去学习原理,慢慢的从原理到实践,得脚踏实地才行,当一个思维方式的提升吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式C语言面试相关知识——内存管理(不定期更新)

嵌入式C语言面试相关知识——内存管理(不定期更新) 一、博客声明二、自问题目1、嵌入式系统的内存布局是怎么样的?2、动态内存分配在嵌入式系统中的使用有什么注意事项?3、什么是内存碎片,如何减少内存碎片&#xff1f…

用ThreadLocal解决线程隔离问题

存在的以下代码所示的线程隔离问题: package study.用ThreadLocal解决线程隔离问题;/*线程隔离 - 在多线程并发场景下,每个线程的变量都应该是相互独立的线程A:设置(变量1) 获取(变量1)线程B&a…

【数据结构与算法】希尔排序

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​

Go语言--复合类型之map、结构体

map Go 语言中的 map(映射、字典)是一种内置的数据结构,它是一个无序的 key-value 对的集合,比如以身份证号作为唯一键来标识一个人的信息。 格式 map [keyType]valueType 在一个 map 里所有的键都是唯一的,而且必须是支持和!操作符的类型…

实验五 图像增强—空域滤波

一、实验目的 了解图像平滑滤波器(均值滤波和中值滤波)和图像锐化算子(Sobel算子、Prewitt算子、Laplacian算子)在工程领域中的应用;理解图像平滑滤波器和图像锐化算子的工程应用范围;掌握图像平滑滤波器和…

[终端安全]-4 移动终端之硬件架构安全

1 移动终端硬件架构 上图图展示了典型移动终端硬件架构,包括应用处理器(AP)、基带处理器(BP)以及各类共享组件和外设,所有组件通过AXI总线(和APB桥)连接在一起。以下分别介绍基于整…

【Linux进阶】文件系统6——理解文件操作

目录 1.文件的读取 1.1.目录 1.2.文件 1.3.目录树读取 1.4.文件系统大小与磁盘读取性能 2.增添文件 2.1.数据的不一致(Inconsistent)状态 2.2.日志式文件系统(Journaling filesystem) 3.Linux文件系统的运行 4、文件的删…

69.WEB渗透测试-信息收集- WAF、框架组件识别(9)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:68.WEB渗透测试-信息收集- WAF、框架组件识别(8) 有无waf存在&am…

秋招提前批面试经验分享(下)

⭐️感谢点开文章👋,欢迎来到我的微信公众号!我是恒心😊 一位热爱技术分享的博主。如果觉得本文能帮到您,劳烦点个赞、在看支持一下哈👍! ⭐️我叫恒心,一名喜欢书写博客的研究生在读…

【MySQL】4.MySQL 的数据类型

MySQL 的数据类型 一.数据类型分类在这里插入图片描述二.注意点1.char VS varchar2.datetime VS timestamp3.enum 和 set 的使用方法 一.数据类型分类 二.注意点 1.char VS varchar char 的意义是直接开辟固定大小的空间,浪费磁盘空间,但是效率高varcha…

解决GPT-4o耗电难题!DeepMind新算法训练效率提升13倍,能耗降低10倍!

目录 01 有更好的解决方案吗? 02 从“超级batch”中筛选数据 03 技术介绍 04 实验结果 生成可学习batch 谷歌DeepMind推出的新算法JEST,将LLM训练的迭代次数减少了13倍,计算量降低了10倍,有望重塑AI未来。GPT-4o早已成为耗能…

下载,连接mysql数据库驱动(最详细)

前言 本篇博客,我讲讲如何连接数据库?我使用mysql数据库举例。 目录 下载对应的数据库jar 包 百度网盘 存有8.4.0版本压缩包:链接:https://pan.baidu.com/s/13uZtXRmuewHRbXaaCU0Xsw?pwduipy 提取码:uipy 复制这…

使用Ubuntu 22.04安装Frappe-Bench【二】

系列文章目录 第一章 使用VMware创建Ubuntu 22.04【一】 文章目录 系列文章目录前言什么是Frappe-Bench?使用安装ERPNext能实现什么效果? 官网给了一个说明 一、使用Ubuntu 22.04安装Frappe-Bench一、安装要求二、安装命令三、 可能出现问题 总结 前言 …

GESP C++一级真题

PDF图片1-7 点赞❤️关注😍收藏⭐️ 互粉必回🙏🙏🙏

对BSV区块链的曼达拉网络通俗易懂的解释

​​发表时间:2023年6月15日 BSV区块链正在引入“曼达拉”升级,使BSV区块链网络的拓扑结构能够适配Teranode,适配这个可以大幅扩容的节点软件。BSV区块链上曼达拉网络的概念并不会改变整个系统的核心规则;相反,它能够引…

基于SSM+JSP的KTV点歌系统(带1w+文档)

基于SSMJSP的KTV点歌系统(带1w文档) 开发一个KTV点歌系统可以解决不利于线下点歌的问题,同时管理员可以利用网络对KTV点歌系统信息进行管理,设计的网站保证信息的完整安全,这样才能提高工作效率,保证系统安全正常的运行。 项目简介…

公众号文章阅读20w+?你猜腾讯给了我多少钱?

前两天写的一篇文章, 《1000T的文件怎么能快速从南京传到北京?最佳方案你肯定想不到》 一不小心被平台推荐,阅读量居然达到了20w(这篇收益在文章底部!)。 留言也是相当精彩 说来惭愧,这篇文章我…

【网络安全】实验三(基于Windows部署CA)

一、配置环境 打开两台虚拟机,并参照下图,搭建网络拓扑环境,要求两台虚拟的IP地址要按照图中的标识进行设置,并根据搭建完成情况,勾选对应选项。注:此处的学号本人学号的最后两位数字,1学号100…

Nestjs基础

一、创建项目 1、创建 安装 Nest CLI(只需要安装一次) npm i -g nestjs/cli 进入要创建项目的目录,使用 Nest CLI 创建项目 nest new 项目名 运行项目 npm run start 开发环境下运行,自动刷新服务 npm run start:dev 2、…

【Unity】RPG2D龙城纷争(八)寻路系统

更新日期:2024年7月4日。 项目源码:第五章发布(正式开始游戏逻辑的章节) 索引 简介一、寻路系统二、寻路规则(角色移动)三、寻路规则(角色攻击)四、角色移动寻路1.自定义寻路规则2.寻…