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

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

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

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

天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测的更多相关文章

  1. 微软发布云端基因服务:推动AI驱动的精准医疗

    微软发布云端基因服务:推动AI驱动的精准医疗 2018年03月07日 00:00:00 微软研究院AI头条 阅读数:117    版权声明:本文为博主原创文章,未经博主允许不得转载. https:// ...

  2. 精准医疗|研发药物|Encode|roadmap|

    生物医学大数据 精准医疗 研发药物:特异性靶点&过表达靶点 Encode &roadmap找组织特异性的表观遗传学标记.TF.DNA甲基化的动态变化等信息. 生物大数据的标准化与整合- ...

  3. 开发AI+诊疗生发系统,「先锋汇美」借力人工智能辅助诊疗实现头皮医学检测...

    困扰年轻人的脱发问题萌生了新兴的产业链.36氪先前曾剖析过近来火热的植发市场,更多人则选择"防范于未然","头皮检测"服务备受关注.此前,人们对"头皮 ...

  4. 旁听<基因编辑与精准医疗>(北京大学)

    昨天去北大生命科学院听了一场魏文胜教授关于基因方面的讲座.会场人不算太多,比起上次听城市规划,场面略显冷清.也能从一个侧面反映,关注基础科学领域的人虽然有,但是不是很多. 开场魏教授用了宣传海报作为导 ...

  5. julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域

    编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...

  6. 【天池大数据赛题解析】资金流入流出预测(附Top4答辩ppt)

    http://mp.weixin.qq.com/s?__biz=MzA3MDg0MjgxNQ==&mid=208451006&idx=1&sn=532e41cf020a0673 ...

  7. NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)

    NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)       七月,酷暑难耐,认识的几位同学参加知乎看山杯,均取得不错的排名.当时天池AI医疗大赛初赛结束,官方正在为复赛进行平台调 ...

  8. AI案例

    https://www.bilibili.com/read/cv830627     到底什么是人工智能?人工智能能做什么?这是大家最关心的问题,但说到真正能够理解的话,还是只小部分专业人士.这篇文章 ...

  9. PB 级数据处理挑战,Kubernetes如何助力基因分析?

    摘要: 一家大型基因测序功能公司每日会产生 10TB 到 100TB 的下机数据,大数据生信分析平台需要达到 PB 级别的数据处理能力.这背后是生物科技和计算机科技的双向支撑:测序应用从科研逐步走向临 ...

随机推荐

  1. 深度学习(五)正则化之L1和L2

    监督机器学习问题无非就是“minimizeyour error while regularizing your parameters”,也就是在规则化参数的同时最小化误差.最小化误差是为了让我们的模型 ...

  2. vue面试题总汇

    active-class是哪个组件的属性? vue-router模块的router-link组件. 嵌套路由怎么定义? 在实际项目中我们会碰到多层嵌套的组件组合而成,但是我们如何实现嵌套路由呢?因此我 ...

  3. Transfer-Encoding:chunked 返回数据过长导致中文乱码

    最近在写一个项目的后台时,前端请求指定资源后,返回JSON格式的数据,突然发现在返回的字节数过大时,最后的message中文数据乱码了,对于同一个接口的请求:当数据小时不会乱码,当数据量大了中文就乱码 ...

  4. async和await理解代码

    <1>:Async和Await的理解1 using System; using System.Collections.Generic; using System.Linq; using S ...

  5. 配置/etc/profile错误导致很多系统命令无法使用

    在配置hadoop的环境变量的过程中,由于字符输入错误导致/etc/profile文件出错,并导致系统的基本命令不能使用,如:vi,ls等. 这种情况,首先修改/etc/profile的错误文件内容, ...

  6. 撩课-Java每天10道面试题第5天

    41.Iterator.ListIterator 和 Enumeration的区别? 迭代器是一种设计模式, 它是一个对象, 它可以遍历并选择序列中的对象, 而开发人员不需要了解 该序列的底层结构. ...

  7. 鸟哥linux私房菜学习笔记 第二章知识点

    2.1 linux一切皆文件 2.2 磁盘分区 磁盘即文件 2.2.1 磁盘连接的方式与设备文件名的关系 模糊 1.正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下 ...

  8. jenkins 参数化构建过程

    构建项目时我们可能需要切换到另一个分支编译,或者说每次编译版本都要加1,这时候我们可以改配置或者改脚本文件,这显然不是一个好的方式,那么如何能在编译前让用户输入参数呢?jenkins早就为我们考虑好 ...

  9. BZOJ1014 [JSOI2008]火星人

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam, 我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 ...

  10. react与vue

    vue的选择居于react与angular之间,框架自身的语法比react多一点,但是又比angular少一点. 也正是由于选择的不同,所呈现出来的写法与思考方式就一定会有所差异,不论优劣,但肯定会导 ...