博客基于Xgboost方法对糖尿病遗传预测风险进行预测,实际上是对人体血糖值的预测。论文以天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测为背景,对其提供的数据进行人体血糖值进行预测。
本质而言是使用XGBOOST进行数据的一个回归。
数据集部分:

原始数据包含了病人的一些个人信息,以及医疗测试的部分数据,最后一列“血糖”值则是我们需要进行预测的部分。

数据预处理:

利用真实世界的数据进行疾病的预测会遇到很多问题,例如:
①数据质量差:电子数据中很多字段有缺失,导致关键特征无法提取;甚至有无意或有意的输入错误,给数据分析造成了噪音;
②数据维度高:医疗的数据涉及患者的体格检查信息,就本次实验而言包含40个信息需要进行分析。

因此不能直接使用数据进行操作,在模型构建之前需要进行数据预处理,本次实验对数据进行的预处理包括如下操作:

(1)缺失值处理:正如前文所说,训练的数据集往往会带有一定程度的缺失,例如数据存储失败、机械故障、数据遗漏、隐瞒数据等都会导致这一现象。如果缺失项只是很少的一部分,可以对其进行忽略,但是当缺失项很多时就需要进行缺失值的填补来保证模型的正确构建。由于本文是对医疗数据进行处理,所以采用中数进行填补,这样可以不受数据极端值的影响;并且为了避免训练集和测试集的差异带来的影响,可以选择取该项所有数据的中数来避免较大的误差。

(2)性别二分类化:糖尿病作为一组以高血糖为特征的代谢性疾病,由于生理结构的差异与内分泌的区别,会在男女之间产生差异,因此有必要对性别进行处理。本文对性别采用0,1进行分类,男性标记为1,女性标记为0,性别数据缺失则归类为女性。

(3)日期处理:体检的日期对于慢性疾病而言并没有什么意义,而且日期的格式会对模型的构建有影响,无法合理处理数据,所以采取删除日期的处理。

(4)异常值处理:异常值分为人为错误与自然错误,包括数据输入错误,测量误差,数据处理错误,故意异常值,自然异常值等。异常值的存在增加了误差差异,并降低了统计测试的能力,有可能降低正态性,影响具有实质意义的估计,影响回归、方差分析等统计模型假设的基本假设。本文采取高斯分布的方法,人类个体差异总体应该满足高斯分布,所以将高斯分布当中距离均值较大的数据视作异常值并进行替代。

(5)特征提取:机器学习的实质就是通过样本的特征来预测样本所对应的值。如果样本的特征少了,并且如果有必要,我们会考虑使用典型算法来增加特征,比如Polynomial Regression。但是如果模型特征越多,模型的复杂度也就越高,越容易导致过拟合。过多的特征包括无关特征和多余特征,我们采取协相关系数、交互信息与极端随机森林回归来进行特征的提取,经过实验,最终选取效果最好的协相关系数法进行特征的提取。

首先读入数据

def __init__(self):self.train_file = "d_train_20180102.csv"self.test_file = "d_test_A_20180102.csv"self.model_name = "xgboost"self.feature_series = Noneself.find_best_param = 0self.fillna_with_total_data = 0self.preprocess_data = 0self.add_poly_feature = 1self.replace_outlier = 0def read_file(self):self.train_df = pd.read_csv(self.train_file,encoding="GBK")self.test_df = pd.read_csv(self.test_file, encoding="GBK")

然后进行缺失值的填补:

def work_with_na(self):self.train_y = self.train_df.pop('血糖').valuesif self.fillna_with_total_data:total_df = pd.concat([self.train_df, self.test_df])total_gender_df = total_df['性别']total_grouped = total_df.groupby('性别')f = lambda x: x.fillna(x.median())total_grouped_df = total_grouped.transform(f)self.train_df = total_grouped_df.iloc[:self.train_df.shape[0], :]self.test_df = total_grouped_df.iloc[self.train_df.shape[0]:, :]train_gender_df = total_gender_df.iloc[:self.train_df.shape[0]]test_gender_df = total_gender_df.iloc[self.train_df.shape[0]:]self.train_df = pd.concat([train_gender_df, self.train_df], axis=1)self.test_df = pd.concat([test_gender_df, self.test_df], axis=1)

进行病人ID,性别与日期的处理

def work_with_gender(self):         self.train_df.loc[:,'性别'].replace({"男":1,"女":0,"??":0},inplace=True)        self.test_df.loc[:,'性别'].replace({"男": 1, "女": 0, "??": 0}, inplace=True)     def work_with_date(self):self.train_df = self.train_df.loc[:,self.train_df.dtypes!=object]self.test_df = self.test_df.loc[:, self.test_df.dtypes != object]    def work_with_id(self):self.train_df.pop('id')self.test_df.pop('id')

进行异常值的处理

def prepare_data(self):if self.replace_outlier:self.train_part_df = self.train_df.iloc[:,2:]self.test_part_df = self.test_df.iloc[:,2:]self.train_part_df = self.train_part_df.clip(self.train_part_df.mean()-3*self.train_part_df.std(),\self.train_part_df.mean()+3*self.train_part_df.std(),\axis=1)self.test_part_df = self.test_part_df.clip(self.test_part_df.mean() - 3 * self.test_part_df.std(), \self.test_part_df.mean() + 3 * self.test_part_df.std(), \axis=1)self.train_df = pd.concat([self.train_df.iloc[:,:2],self.train_part_df],axis=1)self.test_df = pd.concat([self.test_df.iloc[:,:2],self.test_part_df],axis=1)self.train_X = self.train_df.valuesself.test_X = self.test_df.values

采用相关系数进行特征的筛选

 def select_feature_by_corrcoef(self):corr_values = []for i in range(self.train_X.shape[1]):corr_values.append(abs(np.corrcoef(self.train_X[:,i], self.train_y)[0, 1]))corr_series = pd.Series(corr_values, index=self.train_df.columns)self.feature_series = corr_series

回归部分见(2)

基于XGBOOST的糖尿病遗传风险预测(1)相关推荐

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

    在18年1月参加了天池精准医疗大赛-人工智能辅助糖尿病遗传风险预测.我国有1.1亿人患有糖尿病,是世界上糖尿病患者最多的国家,每年用于糖尿病的医疗费用超过3000亿,与我们赛题相关的妊娠糖尿病是其中一 ...

  2. 【参赛记录】糖尿病遗传风险预测

    [参赛记录]糖尿病遗传风险预测 一.选题背景 二.题目任务 2.1 数据集字段说明 2.2 训练集说明 2.3 测试集说明 三.评估指标 四.数据分析和处理 4.1 缺失值和异常值分析 缺失值 异常值 ...

  3. 阿里天池大赛[人工智能辅助糖尿病遗传风险预测]赛后总结

    题目以及数据介绍 人工智能辅助糖尿病遗传风险预测 Github 代码以及数据 Github 初始思想 1.从头开始,先看一下初始数据以及数据的简单分析吧 训练数据,最后一列是血糖: A榜测试数据 第九 ...

  4. 《天池精准医疗大赛-人工智能辅助糖尿病遗传风险预测》模型复现和数据挖掘-论文_企业

    大赛概况 进入21世纪,生命科学特别是基因科技已经广泛而且深刻影响到每个人的健康生活,于此同时,科学家们借助基因科技史无前例的用一种全新的视角解读生命和探究疾病本质.人工智能(AI)能够处理分析海量医 ...

  5. 讯飞:糖尿病遗传风险预测Coggle挑战赛公开

    导入数据------------------------- train_df = pd.read_csv('./糖尿病遗传风险预测挑战赛公开数据/比赛训练集.csv', encoding='gbk') ...

  6. 《天池精准医疗大赛-人工智能辅助糖尿病遗传风险预测》模型复现和数据挖掘-企业科研_论文作业

    大赛概况 进入21世纪,生命科学特别是基因科技已经广泛而且深刻影响到每个人的健康生活,于此同时,科学家们借助基因科技史无前例的用一种全新的视角解读生命和探究疾病本质.人工智能(AI)能够处理分析海量医 ...

  7. 关于【天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测】的思考

    在18年初与来自几所牛校的学生组队参加了第一次天池大赛,最终由于乌龙没能在初赛获得前一百的成绩,止步复赛.前几天观看了决赛现场的答辩,感触良多,记录如下. 首先上一波图,这是我们参加比赛是的程序和数据 ...

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

    github源代码 赛题地址 数据地址 1 问题描述 这个比赛的任务是预测妊娠期妇女是否患有妊娠期糖尿病,label只有一列,0表示未患病,1表示患病.一共有1000条训练样本,85维特征.线上测试样 ...

  9. 打榜前10名:天池AI医疗人工智能辅助糖尿病遗传风险预测

    向AI转型的程序员都关注了这个号

最新文章

  1. PCA(2):PCA算法实现的两种方式
  2. C++ STL标准模板库(queue)
  3. 浅析android应用增量升级
  4. Powershell: powershell 获取本机IP地址
  5. uni-app中的样式
  6. C++指针与数组的对比
  7. PostMan 之 Mock 接口测试
  8. 关于监听套接字的形象解释
  9. 17.Mac Ctags 使用
  10. 通过哈希MD5实现加密(python3.X)
  11. Win32屏幕保护程序
  12. android官方开发文档中学英文-uniformly distributed int(均匀分布的整数)
  13. 操作系统与网络协议晦涩难懂,华为18级工程师神级文档助你过关
  14. mysql 3306无法访问_Mysql 3306端口无法被远程机器访问
  15. mac如何用移动随E行连接有线网络(中国计量大学)
  16. ubuntu 20.04.3 安装教程(本人一步一步安装记录...)
  17. 乐视max70老款_这货是电视?超大尺寸乐视TV Max70试玩
  18. python统计字母a的个数_32个经典Python小例子测测你的基础知识(11-20)
  19. C# 文件相关---新建文件、文件另存为、读写文件
  20. 拼多多秋招提前批笔试题

热门文章

  1. java极光推送如何设置别名_Android 极光推送设置别名
  2. 全国各大城市的地铁数据、json格式
  3. 电商平台促销管理功能解析,数商云S2B2C商城系统开启日化行业数字零售新模式
  4. 怎么查找和自己专业有关的英文文献?
  5. Error in v-on handler: “TypeError: this.$refs.popup.isShow is not a function“
  6. idea提交本地项目到oschina
  7. IDL图像可视化(八)
  8. 企业非法集资风险预测
  9. js实现图片放大预览(jq+css)
  10. [nonebot2]QQ机器人签到插件