分子AI预测赛Task1笔记

server/2024/10/21 5:45:48/

实践步骤:跑通baseline → 尝试个人idea→尝试进阶baseline

一、跑通baseline

  • 根据官方操作文档:https://datawhaler.feishu.cn/wiki/Ue7swBbiJiBhsdk5SupcqfL7nLX#VAwHduw0woxtZIxuCRnchAZ5nef
  • 运行结果如下
    # python环境官方自带# 下载需求库
    # pip install lightgbm openpyxl# 运行测试代码
    # 1. 导入需要用到的相关库
    # 导入 pandas 库,用于数据处理和分析
    import pandas as pd
    # 导入 numpy 库,用于科学计算和多维数组操作
    import numpy as np
    # 从 lightgbm 模块中导入 LGBMClassifier 类
    from lightgbm import LGBMClassifier# 2. 读取训练集和测试集
    # 使用 read_excel() 函数从文件中读取训练集数据,文件名为 'traindata-new.xlsx'
    train = pd.read_excel('./data/data280993/traindata-new.xlsx')
    # 使用 read_excel() 函数从文件中读取测试集数据,文件名为 'testdata-new.xlsx'
    test = pd.read_excel('./data/data280993/testdata-new.xlsx')# 3 特征工程
    # 3.1 test数据不包含 DC50 (nM) 和 Dmax (%),将train数据中的DC50 (nM) 和 Dmax (%)删除
    train = train.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)# 3.2 将object类型的数据进行目标编码处理
    for col in train.columns[2:]:if train[col].dtype == object or test[col].dtype == object:train[col] = train[col].isnull()test[col] = test[col].isnull()# 4. 加载决策树模型进行训练
    model = LGBMClassifier(verbosity=-1)
    model.fit(train.iloc[:, 2:].values, train['Label'])
    pred = model.predict(test.iloc[:, 1:].values, )# 5. 保存结果文件到本地
    pd.DataFrame({'uuid': test['uuid'],'Label': pred}
    ).to_csv('submit.csv', index=None)
  • 以上代码运行结果提交的得分如下 

 二、个人感悟

  • 先声明,本人有一点python基础,但是对机器学习一概不知,纯小白,所以上面的代码除了pandas部分略懂,后面不知道具体在做什么
  • 简单看了一下LightGBM的数学原理解读,说实话看不懂,跟看天书一样
  • 然后经过这个baseline的测试,根据官方给的baseline注解,大致是对该数据集进行预测训练处理,后续要我们做的就是不断的去找到最优的模型进行训练,找到最优的算法去训练从而提高得分

 三、构思idea,改进baseline

  • 用于训练的模型应该有许多种,借助AI工具,直接生成代码(机器学习纯小白,不建议大家想我这样)
  • 例如随机森林模型:
    # 1. 导入需要用到的相关库
    import pandas as pd
    import numpy as np
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import LabelEncoder# 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:]:  # 跳过前两列('No' 和 'uuid')if train[col].dtype == object:# 合并训练集和测试集的类别combined_data = pd.concat([train[col], test[col]])le = 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')# 确保测试集中没有缺失值
    test = test.fillna(0)# 重新训练模型并预测
    rf_model.fit(X_train, y_train)
    pred = rf_model.predict(test.iloc[:, 1:].values)
    result = pd.DataFrame({'uuid': test['uuid'], 'Label': pred})# 4. 加载随机森林模型进行训练
    X_train = train.iloc[:, 2:].values
    y_train = train['Label'].values
    X_test = test.iloc[:, 1:].valuesrf_model = RandomForestClassifier(n_estimators=100, random_state=42)
    rf_model.fit(X_train, y_train)# 5. 使用模型进行预测并保存结果
    pred = rf_model.predict(X_test)
    result = pd.DataFrame({'uuid': test['uuid'], 'Label': pred})# 保存结果文件到本地
    result.to_csv('submit_rf.csv', index=False) 
    # 0.73905
    
  • 或者是随机森林模型优化版:
  • # 1. 导入需要用到的相关库
    import pandas as pd
    import numpy as np
    from sklearn.ensemble import RandomForestClassifier
    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:]:  # 跳过前两列('No' 和 'uuid')if train[col].dtype == object:# 合并训练集和测试集的类别combined_data = pd.concat([train[col], test[col]])le = 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')# 确保测试集中没有缺失值
    test = test.fillna(0)# 重新训练模型并预测
    rf_model.fit(X_train, y_train)
    pred = rf_model.predict(test.iloc[:, 1:].values)
    result = pd.DataFrame({'uuid': test['uuid'], 'Label': pred})# 4. 加载随机森林模型进行训练
    X_train = train.iloc[:, 2:].values
    y_train = train['Label'].values
    X_test = test.iloc[:, 1:].values# 4. 特征选择
    # 使用随机森林模型进行特征选择
    selector = SelectFromModel(RandomForestClassifier(n_estimators=100, random_state=42))
    selector.fit(X_train, y_train)
    X_train_selected = selector.transform(X_train)
    X_test_selected = selector.transform(X_test)# 5. 模型调优
    # 定义随机森林模型的参数网格
    param_grid = {'n_estimators': [100, 200, 300],'max_depth': [None, 10, 20, 30],'min_samples_split': [2, 5, 10],
    }# 使用网格搜索进行模型调优
    rf_model = RandomForestClassifier(random_state=42)
    grid_search = GridSearchCV(estimator=rf_model, param_grid=param_grid, cv=5)
    grid_search.fit(X_train_selected, y_train)# 获取最佳参数模型
    best_rf_model = grid_search.best_estimator_
    # 6. 使用最佳模型进行预测
    pred = best_rf_model.predict(X_test_selected)
    result = pd.DataFrame({'uuid': test['uuid'], 'Label': pred})# # 5. 使用模型进行预测并保存结果
    # pred = rf_model.predict(X_test)
    # result = pd.DataFrame({'uuid': test['uuid'], 'Label': pred})# 保存结果文件到本地
    result.to_csv('submit_rf.csv', index=False) 
    # 0.74296
    

  •  

http://www.ppmy.cn/server/55884.html

相关文章

Flask框架下图像的base64编码接收和解码流程

一、Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或We…

深入刨析Redis存储技术设计艺术(二)

三、Redis主存储 3.1、存储相关结构体 redisServer:服务器 server.h struct redisServer { /* General */ pid_t pid; /* Main process pid. */ pthread_t main_thread_id; /* Main thread id */ char *configfile; /* Absolut…

SwinTransformer的相对位置索引的原理以及源码分析

文章目录 1. 理论分析2. 完整代码 引用:参考博客链接 1. 理论分析 根据论文中提供的公式可知是在 Q Q Q和 K K K进行匹配并除以 d \sqrt d d ​ 后加上了相对位置偏执 B B B。 A t t e n t i o n ( Q , K , V ) S o f t m a x ( Q K T d B ) V \begin{aligned} &…

TQ15EG开发板教程:MPSOC创建fmcomms8工程

链接:https://pan.baidu.com/s/1jbuYs9alP2SaqnV5fpNgyg 提取码:r00c 本例程需要实现在hdl加no-OS系统中,通过修改fmcomms8/zcu102项目,实现在MPSOC两个fmc口上运行fmcomms8项目。 目录 1 下载文件与切换版本 2 编译fmcomms8项…

软考中级数据库系统工程师备考经验分享

前几天软考成绩出了,赶紧查询了一下发现自己顺利通过啦(上午63,下午67,开心),因此本文记录一下我的备考经验分享给大家。因为工作中项目管理类的知识没有系统学习过,本来想直接报名软考高级证书…

python读取写入txt文本文件

读取 txt 文件 def read_txt_file(file_path):"""读取文本文件的内容:param file_path: 文本文件的路径:return: 文件内容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

机器学习原理之 -- XGboost原理详解

XGBoost(eXtreme Gradient Boosting)是近年来在数据科学和机器学习领域中广受欢迎的集成学习算法。它在多个数据科学竞赛中表现出色,被广泛应用于各种机器学习任务。本文将详细介绍XGBoost的由来、基本原理、算法细节、优缺点及应用场景。 X…

Shell Expect自动化交互(示例)

Shell Expect自动化交互 日常linux运维时,经常需要远程登录到服务器,登录过程中需要交互的过程,可能需要输入yes/no等信息,所以就用到expect来实现交互。 关键语法 ❶[#!/usr/bin/expect] 这一行告诉操…