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

话不多说,直接上官方链接:‌​​​‍​⁠​‌​‍​​​‌​⁠‬​‬​​‌​​​​‬‬​​​​‍⁠‍‌​⁠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.mfbz.cn/a/781531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RAID的实现

软RAID,在实际工作中使用较少,性能太次。 mdadm工具,主要在虚拟机上使用, 硬RAID 用一个单独的芯片,这个芯片的名字叫做RAID卡,数据在RAID中进行分散的时候,用的就是RAID卡。 模拟RAID-5工作…

【Transformer】transformer模型结构学习笔记

文章目录 1. transformer架构2. transformer子层解析3. transformer注意力机制4. transformer部分释疑 图1 transformer模型架构 图2 transformer主要模块简介 图3 encoder-decoder示意图N6 图4 encoder-decoder子层示意图 1. transformer架构 encoder-decoder框架是一种处理NL…

AI编程探索- iOS 实现类似苹果地图 App 中的半屏拉起效果

想要的效果 功能分析 想要实现这种效果,感觉有点复杂,于是就想搜一下相关资料看看,可问题是,我不知道如何描述这种效果😂。 当我们遇到这种效果看着很熟悉,但是不知道如何描述它具体是什么的时候&#…

有一个日期(Date)类的对象和一个时间(Time)类的对象,均已指定了内容,要求一次输出其中的日期和时间

可以使用友元成员函数。在本例中除了介绍有关友元成员函数的简单应用外,还将用到类的提前引用声明,请读者注意。编写程序: 运行结果: 程序分析: 在一般情况下,两个不同的类是互不相干的。display函…

华为云OBS 通过S3客户端访问

华为云好像没有对S3协议的支持说明其实底层是支持S3协议的。 使用S3的时候我们会需要endpoint,桶名字,region,AWS_ACCESS_KEY,AWS_SECRET_KEY 其中endpoint 就是图片中的,桶名字也很容易找到,region 就是你的endpoint…

Nestjs基础

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

Maven一键配置阿里云远程仓库,让你的项目依赖飞起来!

文章目录 引言一、为什么选择阿里云Maven仓库?二、如何设置Maven阿里云远程仓库?三、使用阿里云Maven仓库的注意事项总结 引言 在软件开发的世界里,Maven无疑是一个强大的项目管理工具,它能够帮助我们自动化构建、依赖管理和项目…

C++初学者指南-5.标准库(第一部分)--迭代器

C初学者指南-5.标准库(第一部分)–迭代器 Iterators 文章目录 C初学者指南-5.标准库(第一部分)--迭代器 Iterators1.默认正向迭代器2.反向迭代器3.基于迭代器的循环4.示例:交换相邻的一对元素5.迭代器范围6.迭代器范围中的元素数量7. 总结:迭代器 指向某…

动态规划|剑指 Offer II 093. 最长斐波那契数列

如果数组 arr 中存在三个下标 i、j、k 满足 arr[i]>arr[j]>arr[k] 且 arr[k]arr[j]arr[i],则 arr[k]、arr[j] 和 arr[i] 三个元素组成一个斐波那契式子序列。由于数组 arr 严格递增,因此 arr[i]>arr[j]>arr[k] 等价于 i>j>k。 把这道题…

记录第一次使用air热更新golang项目

下载 go install github.com/cosmtrek/airlatest 下载时提示: module declares its path as: github.com/air-verse/air but was required as: github.com/cosmtrek/air 此时,需要在go.mod中加上这么一句: replace github.com/cosmtrek/air &…

jmeter-beanshell学习4-beanshell截取字符串

再写个简单点的东西,截取字符串,参数化文件统一用csv,然后还要用excel打开,如果是数字很容易格式就乱了。有同事是用双引号把数字引起来,报文里就不用加引号了,但是这样beanshell处理起来,好像容…

插入排序——C语言

假设我们现在有一个数组,对它进行排序,插入排序的算法如同它的名字一样,就是将元素一个一个插入到合适的位置,那么,该如何做呢? 如果我们要从小到大进行排序的话,步骤如下: 1.对于…

LabVIEW机器视觉系统中的图像畸变、校准和矫正

在机器视觉应用中,图像畸变、校准和矫正是确保图像准确性的关键步骤。LabVIEW作为一种强大的图像处理和分析工具,提供了一系列功能来处理这些问题。以下是对图像畸变、校准和矫正的详细介绍。 图像畸变 图像畸变 是指由于摄像镜头的光学特性或拍摄角度问…

二分法查找有序表的通用算法(可查链表,数组,字符串...等等)

find_binary函数 注意事项: (1)你设计的迭代器模板中必须有using value_type T,且有加减运算功能,其本上能与C标准库std中一样。 (2)集合必须是有序的。 下面是函数代码: /// &…

土豆炒肉做法

菜单:土豆、葱、铁辣子、纯瘦肉、淀粉、生抽、酱油、刀、案板、十三香、盐巴、擦板 流程: 洗土豆,削皮,擦成条,用凉水过滤两遍淀粉,顺便放个燥里洗肉,切成条,按照生抽、酱油、淀粉、…

react dangerouslySetInnerHTML将html字符串以变量方式插入页面,点击后出现编辑状态

1.插入变量 出现以下编辑状态 2.解决 给展示富文本的标签添加css样式 pointerEvents: none

JAVA之(方法的重载与重写、this关键字、super关键字)

方法的重载与重写 一、方法的重载与重写1、回顾方法的定义2、重载的概念3、重写 二、this关键字1、何为this方法2、使用方法(1)在构造方法中指构造器所创建的新对象(2) 方法中指调用该方法的对象(3) 在类本…

【植物大战僵尸杂交版】获取+存档插件

文章目录 一、还记得《植物大战僵尸》吗?二、在哪下载,怎么安装?三、杂交版如何进行存档功能概述 一、还记得《植物大战僵尸》吗? 最近,一款曾经在15年前风靡一时的经典游戏《植物大战僵尸》似乎迎来了它的"文艺复…

自用款 复制粘贴工具 Paste macOS电脑适配

Paste是一款专为Mac和iOS用户设计的剪贴板管理工具,它提供了强大的剪贴板增强功能。Paste能够实时记录用户复制和剪切的内容,包括文本、图片、链接等多种数据类型,并形成一个可视化的剪贴板历史记录,方便用户随时访问和检索。此外…

嵌入式鸿蒙系统openharmony编译方法详解

大家好,时光如梭,今天主要给大家分享一下,鸿蒙系统的使用方法,以及源码该如何编译,其中要注意的细节有哪些? 第一:OpenHarmony系统简介 OpenHarmony 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代,基于…