糖尿病人的血糖值预测

通过糖尿病人的临床数据预测其血糖值

Link: https://www.kaggle.com/c/kobe-bryant-shot-selection

题目描述

糖尿病是一组以高血糖为特征的代谢性疾病。高血糖则是由于胰岛素分泌缺陷或其生物作用受损,或两者兼有引起。糖尿病时长期存在的高血糖,导致各种组织,特别是眼、肾、心脏、血管、神经的慢性损害、功能障碍。

目前,糖尿病已成为第三大严重危害人类健康的疾病。也是全世界非常关注的问题之一,同时导致糖尿病并发症有很多方面的原因,例如危害人的心、脑、肾、血管、神经、皮肤等。据有关调查发现,我国的糖尿病是最早,最多,也是最严重的。而且病程较长的在不同程度上都存有并发症。

糖尿病有一个明显的特征,那就是血糖高。血糖高是糖尿病吗?其实不然,血糖高不一定是糖尿病,但是糖尿病的前兆,经常出现血糖高的症状。所以,血糖值的监测和观察对于糖尿病的诊治十分重要。

本题提供了一批关于糖尿病人的各种临床数据指标,这些指标都有很强的医学专业性。请你通过这些数据,找寻哪些指标和血糖有关,并预测一些病人的血糖值。

小提示

  • 数据中存在缺失值,对于不同的缺失值,如何处理是一个需要谨慎思考的环节。
  • 处理完缺失值后,可以通过相关系数矩阵选择出和血糖值有关的特征指标。
  • 利用这些特征,选择不同的回归模型进行效果的比较,如使用神经网络kNN随机森林等。
  • 在选择回归模型之前,也可以利用原始特征,尝试构造出一些有利于预测的高阶特征。

先修技能

术语解释

  • Random Forest(随机森林):指的是利用多棵树对样本进行训练并预测的一种分类器。在机器学习领域,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。
  • KFold(K折交叉验证):在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。
  • 相关系数矩阵:相关矩阵也叫相关系数矩阵,其是由矩阵各列间的相关系数构成的,也就是说,相关矩阵第i行第j列的元素是原矩阵第i列和第j列的相关系数。通过相关系数矩阵,可以找出和Label有关的Feature。

输入格式

数据分为训练数据和测试数据,分别保存在train.csv和test.csv两个文件中。

其中训练数据主要包括5642条纪录,共有42列,包含了各种原始的医学指标,其中“血糖”是需要预测的信息。

测试数据主要包括1000条数据,其中不包含“血糖”,这是需要预测提交的结果。

注意,训练数据和测试数据都有缺失值存在!

输出格式

直接按test集顺序输出对应的血糖值,不需要加任何表头,详见sample_submission.csv。

4.88
5.04
2.01

etc...

评价

对于提交的文件submission.csv,我们将使用均方误差(Mean Squared Error)作为作为评价指标,公式如下:

$$ Mean\ Square\ Error = \frac{\sum_{i = 1}^{n}(y_i-\widehat{y}_i)^2}{n}

$$

其中$$y_i$$代表测试数据集中第i行的真实血糖值, $$\widehat{y}_i$$代用户提交的第i行的血糖值,$$n$$是行数。这个最终的结果越小说明预测越准确。

数据

测评配置环境

python

pip install pandas
pip install scikit-learn

测评代码

import pandas as pd
from sklearn.metrics import mean_squared_error

answer = pd.read_csv("./correct_submission.csv", header=None)
pred = pd.read_csv("./predict_submission.csv", header=None)

loss = mean_squared_error(answer, pred)
# loss越小越好,最小为0,一般不会超过100,几乎不会超10000,除非pred['血糖']超过了100,血糖值超过了100???!!!

results matching ""

    No results matching ""