为了加强实验室同学们的 编程/数据处理 能力,我们计划每月参与至少一次 编程/数据科学类 竞赛,以竞赛促进学习。本月,我们将参加 上海市青少年算法竞赛的6月赛(建议从丙组开始挑战)/讯飞算法挑战大赛。比赛结束后,请同学们向我反馈你们的成绩,以便我们进行后续的分析和学习。
比赛介绍
赛题名称:分子性质AI预测挑战赛 赛题类型:生命科学、数据挖掘 赛题任务:预测PROTACs的降解能力
赛题链接:https://challenge.xfyun.cn/topic/info?type=molecular-properties&ch=dw24_8Yoyn0
参加步骤
第一步:报名参赛
第二步:下载赛题数据
第三步:阅读赛题
第四步:建立模型编写代码
一个简单的baseline实例。
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_predict
from sklearn.metrics import f1_score
train = pd.read_excel('traindata-new.xlsx')
test = pd.read_excel('testdata-new.xlsx')
print(train.shape)
print(test.shape)
'''
(351, 90)
(353, 87)
'''
print([x for x in train.columns if x not in test.columns])
'''
['Label', 'DC50 (nM)', 'Dmax (%)']
训练集比测试集多3个特征,也就是多了标签部分
'''
train = train.drop(['DC50 (nM)', 'Dmax (%)'], axis=1)
for col in train.columns[1:]:
if train[col].dtype == object:
print(col, train[col].nunique(), test[col].nunique())
'''
查看各个特征在不同数据集中的分布
'''
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()
'''
对类别进行编码
'''
pred = cross_val_predict(
DecisionTreeClassifier(),
train.iloc[:, 2:].fillna(0),
train['Label']
)
print(f1_score(train['Label'], pred))
'''
决策树结果:0.6698795180722891
'''
pred = cross_val_predict(
RandomForestClassifier(),
train.iloc[:, 2:].fillna(0),
train['Label']
)
print(f1_score(train['Label'], pred))
'''
随机森林结果:0.7896995708154506
'''
model = RandomForestClassifier()
model.fit(train.iloc[:, 2:].fillna(0).values, train['Label'])
pred = model.predict(test.iloc[:, 1:].fillna(0).values, )
print(pred)
'''
选择随机森林为最终模型
'''
pd.DataFrame(
{
'uuid': test['uuid'],
'Label': pred
}
).to_csv('submit.csv', index=None)