比赛连接:2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn)
赛题背景
- 强调了人工智能在科研领域,特别是在化学和药物研发中的重要性。
- 指出了PROTACs技术在靶向降解目标蛋白质方面的潜力。
赛题任务
- 要求选手使用提供的demo数据集,这个数据集包含了多个与PROTACs降解能力相关的字段。
- 允许选手通过数据增强或自行搜集数据来扩充数据集,并自行划分数据集用于训练和验证模型。
赛题提供的数据比较有限,仅有几百条,如果能搜索出合适的数据扩充数据集将会是很大的提升,当然数据的搜索也是非常困难的。
实践步骤:
1、跑通baseline
只需要按照DataWhile官方提供的文档进行学习就行。下面是示例:
Step1:下载相关库
!pip install lightgbm openpyxl
Step2:训练模型并预测获得结果!
# 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)
Step3:下载 submit.csv 文件
Step4:提交获取分数
官方提供的文档非常详细,可以跟着一步一步来!!!小白也没有问题。
2、尝试个人idea
在本教程中,我们将使用 AutoGluon 来对表格数据进行预处理、建模、预测,并将结果保存为提交文件。我们将分三步进行:数据预处理、模型训练、模型预测与结果保存。
Step1:数据预处理
据预处理是数据科学中非常关键的一步。在这一步,我们将读取数据,删除包含大量缺失值的列,并将数据类型转换为数值类型。
train_data = pd.read_excel('traindata-new.xlsx')
test_data = pd.read_excel('testdata-new.xlsx')
train_data = train_data.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)
drop_cols = []
for f in test_data.columns:
if test_data[f].notnull().sum() < 10:
drop_cols.append(f)
train_data = train_data.drop(drop_cols, axis=1)
test_data = test_data.drop(drop_cols, axis=1)
def preprocess_data(data):
for col in data.columns:
try:
data[col] = pd.to_numeric(data[col], errors='coerce')
except Exception as e:
print(f"Error converting column {col}: {e}")
return data
train_data = preprocess_data(train_data)
test_data = preprocess_data(test_data)
上述代码主要是对数据进行处理,分为一下几个方面:
- 读取数据:通过
pd.read_excel()
方法从 Excel 文件中读取训练数据 (traindata-new.xlsx
) 和测试数据 (testdata-new.xlsx
)。 - 列删除:从训练数据中删除列
DC50 (nM)
和Dmax (%)
,因为测试数据中不包含这些列。 - 缺失值处理:遍历测试数据中的每一列,统计非空值少于10个的列名并存储在
drop_cols
列表中,然后从训练集和测试集中删除这些列。 - 数据类型转换:定义
preprocess_data
函数,将数据集中的每一列尝试转换为数值类型,无法转换的值将被设置为 NaN。
Step2:模型训练
在数据预处理完成后,我们将使用 AutoGluon 的
TabularPredictor
进行模型训练。这里我们指定标签列
label
为
'Label'
,并去除不必要的列。
** 模型的选择,**
- 数据转换:使用
TabularDataset
方法将训练数据和测试数据转换为 Autogluon 的TabularDataset
格式。 - 训练模型:指定标签列
label
为'Label'
,并从训练数据中去除列"uuid", "GI50 (nM, Cellular activities)", "IC50 (nM, Protac to E3)"
后,使用TabularPredictor
训练模型。训练过程中设置presets='best_quality'
以获取最佳模型质量,并设置训练时间限制为300秒。
train_data = TabularDataset(train_data)
test_data = TabularDataset(test_data)
label = 'Label'
predictor = TabularPredictor(label=label).fit(
train_data.drop(["uuid", "GI50 (nM, Cellular activities)", "IC50 (nM, Protac to E3)"], axis=1),
presets='best_quality',
time_limit=300
)
Step3:模型预测与结果保存
在模型训练完成后,我们将使用训练好的模型对测试数据进行预测,并将预测结果保存为 CSV 文件。
import numpy as np
# 检查并添加缺失的列
missing_cols = set(train_data.columns) - set(test_data.columns)
for col in missing_cols:
test_data[col] = np.nan
# 转换测试数据为 TabularDataset 格式
test_data = TabularDataset(test_data)
# 进行预测
y_pred = predictor.predict(test_data.drop(["uuid", "GI50 (nM, Cellular activities)", "IC50 (nM, Protac to E3)"], axis=1))
# 打印模型评估结果、排行榜及特征重要性
print(predictor.evaluate(train_data, silent=True))
print(predictor.leaderboard(train_data))
print(predictor.feature_importance(train_data))
# 创建提交文件
submission = pd.DataFrame({
'uuid': test_data['uuid'],
'Label': y_pred
})
# 保存提交文件
submission.to_csv('submit1.csv', index=False)
我的分数:有效果,但还需要继续改进。
步骤说明:
- 缺失列处理:找出训练数据中有而测试数据中没有的列,在测试数据中添加这些列并设置为 NaN。
- 数据转换:再次将测试数据转换为
TabularDataset
格式。 - 进行预测:使用训练好的模型对测试数据进行预测,得到预测结果
y_pred
。 - 结果评估与特征重要性:打印模型评估结果、排行榜及特征重要性。
- 保存结果:将预测结果与
uuid
列组合成一个 DataFrame,并保存为 CSV 文件submit1.csv
。
通过上述步骤,我们完成了从数据预处理到模型训练再到模型预测与结果保存的全过程。使用 AutoGluon 进行表格数据建模不仅简单高效,还能在有限的时间内获取高质量的预测结果。希望这篇教程能帮助你更好地理解和使用 AutoGluon 进行表格数据的分析与建模。
3、尝试进阶baseline
未完待续!!!!
版权归原作者 Koma Wong 所有, 如有侵权,请联系我们删除。