1. 赛题说明

 天池精准医疗大赛——人工智能辅助糖尿病遗传风险预测,这是明天即将开始的天池大数据比赛。赛题名字看起来很高深,其实是根据年龄,性别,肝功,血常规等体验指标,预测血糖值。数据挺少的,特征40个左右,训练集5000多个实例,测试集1000个实例。任何机器都能很快跑完。比赛地址:
https://tianchi.aliyun.com/competition/introduction.htm?spm=5176.100066.0.0.57e6e8dfMg8Z8V&raceId=231638

2. 预处理

(1) 缺失数据

 有大量的缺失值,特征分四类,分别是乙肝、血常规、肝功能、肾功能,一般的缺失值都是缺失整个类别数据(由于患者未做某项检查)。除血常规以外,其余三项都有大量的缺失值,尤其是乙肝类检查,多一半都是空值。 如果去掉这些数据,将会损失3/4的数据量。假设:医生不要求做该项检查,说明他认为该项指标基本正常,则在指标的正常范围内取随机值填充。

(2) 其它操作

 替换去掉其中中文字符

3. 数据分析

(1) 相关性分析:

 岁数与血糖的相关性最大为0.32,甘油三酯相关性0.23,还有年龄,碱性磷酸酶,白细胞计数等6项指标在0.15左右。

(2) PCA降维:

 前15个特征约占信息量的99.8%

(3) 分析血糖值分布:

绝大多数分布在4-15之间,比赛前期可将此范围之外的认为噪声。

4. 算法

(1) 算法分析

 这是一个有监督的回归问题,此比赛基本可以定位成特征工程加调参问题。预计先使用GBDT和随机森林,后面集成多个模型。 因为数据少,主要注意过拟合问题,可能使用先分类后回归的方式。注意回归不是按正确率计算结果的,此题根据题目要求,评估指标为MSE

(2) 迭代分析

 左图是迭代与误差的关系,迭代到100次后,测试集误差不再下降,训练集还在下降,好像开始过拟合,当然这与我设置的学习率相关,右图是迭代后计算的特征权重排序。

(3) 查看预测的主要出错位置

 从训练集中切出10%作为测试,蓝线是实际值,橙线为预测值,可以看到,由于大部分值分布在5-6之间,因此所有预测都被拉到了这个区间之内。 忽然想到之前“微信互动”预测中有一种做法,就是找到一个值,将训练集中所有实例都预测成该值,再计算误差。代入此题,试了一下,设为5.6分时误差最小,为2.4,比gbdt的2.2误差略高一些,说明算法比瞎蒙还是好一点。

5. 一些想法

(1) 一般去医院看病有问题的居多,所以相对正常值有些偏差,医生也可能作出有倾向性的判断。

(2) 该题可以把已有的知识和算法融合,使用一些现成的数据,比如正常范围。

(3) 周末检查拿结果的可能是比较特殊的病人。

(4) 岁数分成几段,更具代表意义。

(5) 可将数据修改为正常值,偏高,偏低,几个层次,做分段特征。

(6) 考虑病情比较严重的情况,可能需要分开处理,作为噪点先拿出来。

(7) 预测只是想知道被测试人是否为糖尿病,而不关注是预测与实际值的微小差距,所以也可以将其处理为分类问题。

(8) 可能需要对误差函数和评价函数做微调。

6. 一些尝试

(1) 在本地测试,删除所有缺失数据的实例,预测效果好很多。

(2) 如不考虑大于10的数据,预测效果好很多。

(3) 目前在特征工程方面,只做了修改缺失值,而排序特征,离散特征,统计特征都还没做,算法方面只使用了sklearn自带的gbdt,其它算法也还没试。


posted on 2018-01-30 13:20  xieyan0811  阅读(56)  评论(0编辑  收藏  举报