分子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.mzph.cn/bicheng/42466.shtml

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

相关文章

计算机项目介绍汇总——项目展示及购买

计算机项目介绍汇总 本文没有具体的项目内容介绍,只罗列我所发布的所有的项目的代码,主要包括Java和Python两门语言开发的相关项目,由于时间和个人精力问题,部分项目将在后续逐步更新。由于发布的项目都是投入了本人精力和时间&am…

C++左值右值

在C中,左值(lvalue)和右值(rvalue)是表达式分类的关键概念,它们主要影响表达式的赋值、函数调用以及操作符的使用方式。这些概念在C11及以后的版本中变得更加重要,因为引入了移动语义和右值引用…

妈妈带女儿美在心里

在这个充满温情与惊喜的午后,阳光温柔地洒落在每一个角落,仿佛连空气弥漫着幸福的味道。就在这样一个平凡的时刻,一段关于爱与成长的温馨画面,悄然在网络上绽放,引爆了无数人的心弦——#奚梦瑶2岁女儿身高#&#xff0c…

Android高级——智能指针

智能指针 智能指针是一种能够自动维护对象引用计数的技术 引用了一个实际使用的对象,而不是一个指针智能指针构造时,增加它所引用的对象的引用计数智能指针析构时,减少它所引用的对象的引用计数 但智能指针无法解决循环引用问题&#xff0…

【CSharp】获得结构体内字段占用的内存大小

【CSharp】获得结构体内字段占用的内存大小 1.背景2.代码3.说明1.背景 C#结构体:从C/C++时代迁移过来的经典。 struct结构体和class类非常相似,他们都能定义数据结构。 可以理解成class类是struct结构体的升级版。 博主以为最大的区别:struct结构体是值类型,而class类是引…

【Linux进程】命令行参数 环境变量(详解)

目录 前言 1. 命令行参数 什么是命令行参数? 2. 环境变量 常见的环境变量 如何修改环境变量? 获取环境变量 环境变量的组织方式 拓展问题 导入环境变量 3. 本地变量* 总结 前言 在使用Linux指令的时候, 都是指令后边根命令行参数, 每个指令本质都是一个一个的可执行程…

【UE5.1 角色练习】13-枪械射击——拿出与收起武器

目录 效果 步骤 一、安装射击武器 二、拿武器和收武器 效果 步骤 一、安装射击武器 1. 在虚幻商城中将“FPS Weapon Bundle”添加到工程中,由于我们使用的是5.1版本,我们可以先将该资产放入UE4工程中,然后迁移到5.1版本的工程 2. 打开角…

一.2.(4)放大电路静态工作点的稳定;(未完待续)

1.Rb对Q点及Au的影响 输入特性曲线:Rb减少,IBQ,UBEQ增大 输出特性曲线:ICQ增大,UCEQ减少 AUUO/Ui分子减少,分母增大,但由于分子带负号,所以|Au|减少 2.Rc对Q点及Au的影响 输入特性曲…

css之transform-origin

transform-origin 是 CSS 中的一个属性,它允许你改变一个元素变形的原点。默认情况下,变形的原点位于元素的中心点,即50% 50%(或 center center)。但是,通过使用 transform-origin 属性,你可以将…

【JavaSE复习】数据结构、集合

JavaSE 复习 1.数据结构1.1 查找1.1.1 基本查找1.1.2 二分查找1.1.3 插值查找1.1.4 斐波那契查找1.1.5 分块查找1.1.6 分块查找的扩展(无规律数据) 1.2 排序1.2.1 冒泡排序1.2.2 选择排序1.2.3 插入排序1.2.4 快速排序 2. 集合2.1 基础集合2.1.1 集合和数…

React中的useCallback

引言 在React应用开发中,优化组件性能是一个持续的过程。useCallback是一个React Hook,它用于记忆化回调函数,确保这些函数在组件的整个生命周期内保持一致,从而避免不必要的渲染和性能问题。 问题背景 在React中,如…

【玩转python】入门篇day09-python数据类型转换

在Python中,数据类型转换是一项非常常见的操作,它允许我们将一种类型的数据转换为另一种类型。这种转换在处理来自不同源的数据时尤其有用,例如用户输入、文件读取或网络数据等。下面,我将通过代码示例来展示如何将其他数据类型转…

android 在清单文件中配置receiver,系统是何时会注册此广播接收者的?

在 Android 中,通过清单文件(AndroidManifest.xml)配置的广播接收器(BroadcastReceiver),系统会在特定的时机自动注册这些广播接收器。以下是详细的说明: 静态注册的广播接收器 静态注册的广播…

爱了!8款超好用的PC端办公软件!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 你电脑中用的最久的软件是哪些?以下是否有你曾经使用过的软件呢?工欲善其事,必先利其器,今天继续…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备(定全向)是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式,能够覆盖较宽的频率范围,有效侦测并干扰无人机与遥控器之间的通信信号,从而达到控制或驱离无人机的目的。…

验证回文串-string题目

用双指针&#xff0c;left right从两头往中间对比&#xff0c;不是字母的都略过&#xff0c;比的时候化成小写字母 125. 验证回文串 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool isPalindrome(string s) {if(s.size() < 1)return true;int left …

Java SE入门及基础(61) 死锁 死锁发生条件

目录 死锁 1. 死锁的概念 2. 死锁发生条件 互斥条件 不可剥夺条件 请求与保持条件 循环等待 3. 案例分析 示例 分析 死锁 1. 死锁的概念 Deadlock describes a situation where two or more threads are blocked forever, waiting for each other 死锁描述了一种情…

帧布局的概念与属性

帧布局&#xff08;FrameLayout&#xff09;顾名思义就是将控件一层一层叠在一起&#xff0c;像视频的帧一样&#xff0c;一层叠一层&#xff0c;如图所示&#xff0c;帧布局中BUTTON叠在ImageView之上。帧布局常见的属性见表1。帧布局中的控件可以使用android:layout_gravity&…

论文复现-基于决策树算法构建银行贷款审批预测模型(金融风控场景)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;基于决策树算法构建银行贷款审批预测模型 目录 1.金融风控论文复现 2.项目背景介绍 3.决策树介绍 4.数据集介绍 5.合规风险提醒 6.技术工具 7.实验过程 7.1导入数据 7.2数据预处理 7.3数据可…

Spring Boot中的数据迁移策略

Spring Boot中的数据迁移策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 在软件开发的过程中&#xff0c;经常会遇到需要修改数据库结构、迁移…