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

devtools/2024/10/18 14:24:17/

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

相关文章

activemq推数据给前端的方式

文章目录 消费者程序接收消息并通过 WebSocket 将消息传递给前端 消费者程序接收消息并通过 WebSocket 将消息传递给前端 ActiveMQ 是一个开源的消息代理服务,可以用来实现各种消息传递模式,包括点对点和发布/订阅模型。要将数据从 ActiveMQ 推送到前端…

如何检测和处理Android应用程序中的内存泄漏问题。

在Android开发中,内存泄漏是一个常见问题,它会导致应用程序占用过多的内存资源,影响性能,甚至引发应用崩溃。检测和处理内存泄漏是确保应用稳定性和用户体验的重要环节。以下从技术难点、面试官关注点、回答吸引力及代码举例四个方…

白话负载均衡、正反向代理(入门科普版)

什么是负载均衡?为什么需要负载均衡 从字面上理解,什么是负载,服务器承受访问量的大小是负载,但是单台服务器的访问性能是有限的,最典型的例子就是双十一、春运抢票这种,这时候就需要一种方案来解决这类问…

人工智能--循环神经网络

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉概述 🍈基本概念 🍍定义 🍍结构 🍌输入层 &#…

90元搭建渗透/攻防利器盒子!【硬件篇】

前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦,并不能实现真正全局,而且还老容易忘记,那么为了在实景工作中,防止蓝队猴子封IP,此文正现。 正文 先说一下实验效果&#xff1…

机器学习Day9:集成学习

概念 集成学习通过构建并结合多个学习器来完成学习任务 模型 集成学习的结果通过投票法(少数服从多数)产生,所以学习器要有多样性,精度高不一定是好事 1.Bagging模型:并行训练多个学习器 典型代表:随机…

栈和队列---循环队列

1.循环队列的出现 (1)上面的这个就是一个普通的数据的入队和出队的过程我们正常情况下去实现这个入队和出队的过程,就是这个数据从这个队尾进入,从队头离开,但是这个加入的时候肯定是没有其他的问题的,直接…

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

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