0


【机器学习】Datawhale-AI夏令营分子性质AI预测挑战赛

#ai夏令营#datawhale#夏令营

1. 赛事简介

比赛还是大家熟悉的预测算法类:
分子性质AI预测挑战赛
欢迎大家参加!我是Datawhale夏令营15群的运营助教 ☀️

要求选手根据提供的demo数据集,可以基于demo数据集进行数据增强、自行搜集数据等方式扩充数据集,并自行划分数据。运用深度学习、强化学习或更加优秀人工智能的方法预测PROTACs的降解能力,若DC50>100nM且Dmax<80% ,则视为降解能力较差**(demo数据集中Label=0);若DC50<=100nM或Dmax>=80%,则视为降解能力好**(demo数据集中Label=1)

本模型依据提交的结果文件,采用F1-score进行评价。

👉 读题可知,这是一个常规的分类问题,选手需要构建分类模型,判断分子性质(降解能力是好还是坏)

2. baseline代码

baseline 代码由 Datawhale 提供,采用常规的机器学习方法,流程如下。

在这里插入图片描述

# 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 ==objector 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)

提交结果验证后:
在这里插入图片描述

分数是0.7064,大家跑baseline都是这个分数。

3.有关baseline的问题

代码是如何实现分类的?

baseline 采用的分类模型是 LightGBM
LightGBM 是一个基于梯度提升决策树(Gradient Boosting Decision Tree, GBDT)算法的快速、分布式的梯度提升框架,用于处理机器学习和数据挖掘中的分类和回归问题。

LightGBM 实现分类的过程如下:

  1. 特征预处理:LightGBM 在训练过程中会自动进行特征预处理,包括缺失值处理、分箱等。
  2. 初始化模型:LightGBM 会根据数据集的标签类别数量,初始化一个包含 K 个叶子节点的决策树,每个叶子节点对应一个类别的预测概率,这些概率之和为 1。
  3. 迭代训练:LightGBM 会通过梯度提升算法,不断地训练新的决策树,每个决策树都会对上一棵决策树的预测结果进行修正,使得预测结果更加准确。在每个迭代中,LightGBM 会计算出每个特征的梯度和二阶导数,并根据这些信息选择最佳的分割点,从而生成新的决策树。
  4. 预测:在预测过程中,LightGBM 会将一个样本输入到所有已经训练好的决策树中,每个决策树都会输出一个预测概率,最后将所有的预测概率相加,得到该样本属于每个类别的概率,选择概率最大的类别作为最终的预测结果。

LightGBM 实现分类的过程中,还有一些细节需要注意,例如使用分类损失函数、使用类别平衡等。

LGBMModel官方文档

Catboost, LightGBM 和 XGBoost 的区别

Catboost, LightGBM和XGBoost都是基于梯度提升决策树算法的框架,用于解决分类和回归问题,但它们之间存在一些区别。

分类算法的差异:

  • XGBoost:XGBoost 使用的是二阶泰勒展开的梯度提升算法,它同时优化了一阶导数和二阶导数。
  • LightGBM:LightGBM 使用的是梯度提升算法的一阶导数,它使用了基于直方图的近似算法,可以加快训练速度。
  • Catboost:Catboost 使用了对数损失函数和基于对数概率的梯度提升算法,它可以处理分类型特征。

特征处理的差异:

  • XGBoost:XGBoost 使用树结构进行特征处理,它可以处理数值型和分类型特征。
  • LightGBM:LightGBM 使用基于直方图的近似算法进行特征处理,它可以处理大规模数据集。
  • Catboost:Catboost 使用了一种称为目标统计量的技术进行特征处理,它可以处理分类型特征。

并行计算的差异:

  • XGBoost:XGBoost 使用了一种称为线程级并行的技术进行并行计算。
  • LightGBM:LightGBM 使用了一种称为数据级并行的技术进行并行计算。
  • Catboost:Catboost 使用了一种称为模型级并行的技术进行并行计算。

总的来说,XGBoost、LightGBM和Catboost都是非常强大的梯度提升决策树算法,但它们在分类算法、特征处理和并行计算方面存在一些差异。因此,选择使用哪个框架需要根据具体的应用场景和数据集特点来决定。

评分标准是准确率吗?

不完全是,本次比赛的结果评价指标是 F1-score,不仅考虑了精确率(Precision)还考虑到了召回率(Recall),因此不同于准确率(Accuracy)。

在二元分类问题中,Precision表示模型预测为正类的样本中有多少比例真正为正类,而Recall表示实际正样本中被模型预测为正类的样本比例,F1-score结合了Precision和Recall,可用于评估分类器的整体性能,即模型能够准确识别多少正样本,以及能够识别多少正样本中的真实正样本。

在这里插入图片描述

在这里插入图片描述

图源 王圣元老师的《快乐机器学习》

4.我的代码1-替换分类模型

把 LGBMClassifier 换成 CatBoostClassifier

# 1. 导入需要用到的相关库# 导入 pandas 库,用于数据处理和分析import pandas as pd
# 导入 numpy 库,用于科学计算和多维数组操作import numpy as np
# 从 lightgbm 模块中导入 LGBMClassifier 类from lightgbm import LGBMClassifier
# AdaBoostfrom sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 导入CatBoostRegressor库,用于梯度提升树模型from catboost import CatBoostRegressor
from catboost import CatBoostClassifier

# 过滤警告消息from warnings import simplefilter
from sklearn.exceptions import ConvergenceWarning
simplefilter("ignore", category=ConvergenceWarning)# 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 ==objector test[col].dtype ==object:
        train[col]= train[col].isnull()
        test[col]= test[col].isnull()# 4. 加载决策树模型进行训练#model = LGBMClassifier(verbosity=-1)
model = CatBoostClassifier(iterations=500, depth=10, learning_rate=0.01, loss_function='Logloss')
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('submit1.csv', index=None)

在这里插入图片描述

分数提高了一点点

修改了一下参数:

# 4. 加载决策树模型进行训练#model = LGBMClassifier(verbosity=-1)
model = CatBoostClassifier(iterations=1000, depth=16, learning_rate=0.005, loss_function='Logloss')
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('submit2.csv', index=None)

在这里插入图片描述

分数又提高了一点点,0.72062


本文转载自: https://blog.csdn.net/weixin_43470383/article/details/139994386
版权归原作者 不雨_亦潇潇 所有, 如有侵权,请联系我们删除。

“【机器学习】Datawhale-AI夏令营分子性质AI预测挑战赛”的评论:

还没有评论