天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测

作为天池上的新手,第一次参加天池阿里云线上的比赛,糖尿病预测,

一般的数据挖掘比赛,流程:数据清洗,特征工程(找特征,特征组合),不断的尝试的不同算法,不断调参,也可以考虑将多个模型进行线性组合

大赛初赛数据共包含两个文件,训练文件d_train.csv和测试文件d_test.csv,每个文件第一行是字段名,之后每一行代表一个个体。文件共包含42个字段,包含数值型、字符型、日期型等众多数据类型,部分字段内容在部分人群中有缺失,其中第一列为个体ID号。训练文件的最后一列为标签列,既需要预测的目标血糖值。

image

初赛是关于利用特征预测血糖值,以csv格式文件进行提交。

下面直接切入正题:

代码文件:xgboost_test.py,将代码放在新建项目下,并新建一个文件夹data,原始的数据放在data文件夹中。最终结果会保存在当前项目的目录下.csv文件。

算法思路:单模型+原始33个特征

(1) 最初想法:使用最近邻的插补方法,即找一条与空缺值相近的且完整的记录对空缺数据的进行插补,将插补后的数据和原始的未插补的数据都带入算法模型中进行验证,发现插补后的数据误差较大,果断放弃。最终仍然使用的是原始的带空缺值的数据用于训练模型。

(2) 在公布a榜测试集答案后,把a榜的数据作为训练集,把训练集拼接起来,增加了训练集的样本数量。

(3) 由于最开始的训练集中存在血糖值异常大的记录,删除训练集中血糖为38的那一行。由于与乙肝的缺失值太多,且相关性不高,因此删除了乙肝等5个特征属性,以及删除了‘id’、‘性别’、‘体检日期’特征属性。

(4) 在开始部分计算了各个特征与‘血糖’的Persona相关性系数,去相关系数较大的几个特征用于训练模型,发现效果不及用33个特征。因此算法模型采用的33个特征,进行血糖的预测。

(5) 在不断尝试过catboost,LightGBM ,神经网络等基本的算法模型和调参后,发现使用xgboost效果的最好,在无数次不断调参后,达到最优的效果,及最终的成绩86名|0.6316

最终比较幸运的初赛86名,进入复赛

代码:

  1 import pandas as pd
  2 import xgboost as xgb
  3 from sklearn.metrics import mean_squared_error
  4 
  5 # 将两部分的训练集train1,train2共同组合成总得训练集train
  6 train1=pd.read_csv(r"data/d_train_20180102.csv",encoding='gbk')
  7 # 合并训练集
  8 train2_1=pd.read_csv(r"data/d_test_A_20180102.csv",encoding='gbk')
  9 train2_2=pd.read_csv(r"data/d_answer_a_20180128.csv",encoding="gbk",header=None)
 10 train2_2.rename(columns={0:'血糖'},inplace=True) #取名“血糖”
 11 train2=pd.concat([train2_1,train2_2],axis=1)
 12 train=pd.concat([train1,train2],axis=0)
 13 
 14 # 删除特别大的‘血糖’异常值
 15 columns=len(train.columns)
 16 train.drop(train.index[[i for i in train.index if train.iloc[i,columns-1]>30]],inplace=True)
 17 # 测试集
 18 test=pd.read_csv(r"data/d_test_B_20180128.csv",encoding='gbk')
 19 # validate=pd.read_csv(r"data/d_answer_b_20180130.csv",encoding='utf-8',header=None)
 20 del_feat=['性别','体检日期','乙肝表面抗原', '乙肝表面抗体', '乙肝e抗原', '乙肝e抗体', '乙肝核心抗体']
 21 # 删除特征
 22 feat=[]
 23 for i in train.columns:
 24     if i not in del_feat:
 25         feat.append(i)
 26 train=train[feat]
 27 feat.remove('血糖') #测试集不需要‘血糖’属性
 28 test=test[feat]
 29 
 30 y_train = train["血糖"]
 31 x_train = train.drop(['id','血糖'], axis=1)
 32 y_test = test.drop('id', axis=1)
 33 
 34 # training xgboost
 35 dtrain = xgb.DMatrix(x_train, label=y_train)
 36 dtest = xgb.DMatrix(y_test)
 37 
 38 params = {'booster': 'gbtree',
 39           'objective': 'reg:linear',
 40           'eval_metric': 'rmse',
 41           'max_depth': 6,#通常取值:3-10
 42           'gamma':0.2,#给定了所需的最低loss function的值
 43           'lambda': 100,
 44           'subsample': 1,#用于训练模型的子样本占整个样本集合的比例
 45           'colsample_bytree': 0.6,
 46           'min_child_weight': 12,  # 5~10,孩子节点中最小的样本权重和,即调大这个参数能够控制过拟合
 47           'eta': 0.02,#更新过程中用到的收缩步长,取值范围为:[0,1]
 48           'sample_type': 'uniform',
 49           'normalize': 'tree',
 50           'rate_drop': 0.1,
 51           'skip_drop': 0.9,
 52           'seed': 100,
 53           'nthread':-1
 54           }
 55 
 56 bst_nb = 700
 57 watchlist = [(dtrain, '训练误差')]
 58 model = xgb.train(params, dtrain, num_boost_round=bst_nb, evals=watchlist)  # 训练模型
 59 
 60 y_pred = model.predict(dtest)
 61 
 62 # print((mean_squared_error(validate,y_pred))/2)
 63 y_predDF=pd.DataFrame({None:y_pred})
 64 y_predDF.to_csv("SMUDMers_test_B_res.csv",header=None,index=False,float_format="%.2f")

顺便把大佬们的思路粘贴一下:

豆腐大佬:初赛626方案(实际加上后验可以达到600)+(A榜线下81线上815)+复赛基本思路和方案

吴飞:天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测0.596931925方法代码分享

吴飞:人工智能辅助糖尿病遗传风险预测 XGBoost, LightGBM, NN,CATBOOST and OLS实验代码 线上0.8429

  • 0
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
天池精准医疗大赛糖尿病项目是天池平台主办的一个数据竞赛。糖尿病是一种慢性疾病,严重影响人们的健康和生活质量。为了寻找更好的糖尿病诊断和治疗方法,天池精准医疗大赛提供了一个开放的数据集供参赛者使用。 糖尿病的特点是血糖水平的异常升高,因此识别和预测糖尿病的关键在于建立一个有效的血糖预测模型。天池平台上的糖尿病数据集包含了大量的匿名化患者数据,如年龄、性别、血压、胰岛素水平等。参赛选手通过分析这些数据,可以建立一个机器学习模型,来预测一个人是否患有糖尿病或者糖尿病的严重程度。 GitHub是全球最大的开源社区平台之一,提供了一个便捷的代码托管和协作开发平台。在天池精准医疗大赛糖尿病项目中,参赛者可以使用GitHub存储和分享他们的代码、模型和解决方案。这不仅有助于开发者之间的交流和合作,还可以促进开源技术的共享和发展。 通过参与天池精准医疗大赛糖尿病项目,并在GitHub上分享相关代码和解决方案,有助于推动糖尿病诊断和治疗领域的发展。更多的开发者可以参与其中,分享他们的经验和观点,提供创新的解决方案,最终为糖尿病患者提供更准确、更个性化的诊疗服务。这个竞赛的举办和GitHub的使用,都进一步推动了精准医疗人工智能在健康领域的应用,为我们的医疗事业带来了更多的希望和进步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值