糖尿病数据挖掘

  • 一理:机器学习量化分析糖尿病致病因子
    • 下载:临床数据
    • 线性回归预测糖尿病
    • LightGBM 预测糖尿病
    • 糖尿病因子分析
    • 变量相关性分析
  • 一文:当前科学理解慢病之王的解决方案
    • 是什么
    • 怎么治疗
    • 怎么预防

一理:机器学习量化分析糖尿病致病因子


下载:临床数据

这是一所大学统计系提供的数据:https://statistics.sciences.ncsu.edu/

数据集在审核中,也可以在官网下载。

数据下载:https://www4.stat.ncsu.edu/~boos/var.select/diabetes.html


点击 the original data set 获取原数据:


全选,把这些数据复制下来,保存到本地 .txt 文件。

再从 .txt 文件中全选,复制到 .excel 文件。


线性回归预测糖尿病

最小回归预测糖尿病论文:https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score,mean_absolute_error, median_absolute_error
from sklearn.model_selection import train_test_splitreadFileName="original_data.xlsx"         # 原始数据
# readFileName="processed_data.xlsx"      # 处理过的数据(提供数据的机构修剪了原始数据,方差不会太大)
# 读取excel
data=pd.read_excel(readFileName)
X=data.loc[:,"AGE":"S6"]
y=data["y"]# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建线性回归对象
regr = linear_model.LinearRegression()
# 使用训练集训练模型
regr.fit(X_train,y_train)# 使用测试集进行预测
y_pred = regr.predict(X_test)# 平均绝对误差:真实值 - 预测值的绝对值,累加,除以样本量
MAE = mean_absolute_error(y_test,y_pred)# 中值绝对误差:俩队数相减得到差值,求中位数
MedianAE = median_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
dict1 = {"y_predict": y_pred, "y_test": y_test}
df1 = pd.DataFrame(dict1)
df1.to_excel("MAE.xlsx")
print("MAE", MAE)
print("median_absolute_error", MedianAE)# 解释方差得分:1 是完美预测
print('r2: %.4f' % r2)

输出:

original_data
MAE 41.54836328325207
r2: 0.4

LightGBM 预测糖尿病

import lightgbm as lgb
import pandas as pd
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error,median_absolute_errorreadFileName = "original_data.xlsx"           # 原始数据
# readFileName = "processed_data.xlsx"        # 处理过的数据(提供数据的机构修剪了原始数据,方差不会太大)# 读取excel
data = pd.read_excel(readFileName)
X = data.loc[:, "AGE": "S6"]
y = data["y"]# 划分训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.3, random_state=42)# lightgbm
model = lgb.LGBMRegressor()
model.fit(X, y)
y_pred = model.predict(X_test)MAE = mean_absolute_error(y_test, y_pred)
# 中值绝对误差
MedianAE = median_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

输出:

original_data
MAE 14.273899805021866
r2: 0.9

模型提升了 2 倍。


糖尿病因子分析

糖尿病因子分析,如性别。根据统计,男性患病率 9.6%,女性患病率 9.0%,性别差异不大。

反倒是年龄,年龄越大,患病概率越高:

所以,年龄越大,饮食越要控制,减少糖分摄入。

import lightgbm as lgb
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.ensemble import RandomForestRegressor# readFileName="original_data.xlsx"
readFileName="processed_data.xlsx"
# 读取excel
data=pd.read_excel(readFileName)
X=data.loc[:,"AGE":"S6"]
y=data["y"]# 划分训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.3, random_state=42)# lightgbm
model=lgb.LGBMRegressor(max_depth=13)
# model=lgb.LGBMRegressor()
model.fit(X, y)y_pred = model.predict(X_test)
# rms = (np.mean((y - y_pred)**2))**0.5
MAE=sum(abs(y_test - y_pred))/len(y_test)
score=1/(1+MAE)
# print ("RF RMS", rms)
print("MAE",MAE)
print("score:",score)# Explained variance score: 1 is perfect prediction
print('r2: %.4f' % r2_score(y_test,y_pred))feature_importances=model.feature_importances_
names=X.columns
list_feature_importances=list(zip(feature_importances,names))
df_feature_importances=pd.DataFrame(list_feature_importances)
# df_feature_importances.to_excel("catboost_110变量重要性.xlsx")
df_feature_importances.to_excel("lightgbm变量重要性.xlsx")n_features=X.shape[1]
plt.barh(range(n_features),model.feature_importances_,align='center')
plt.yticks(np.arange(n_features),X.columns)
plt.title("lightgbm feature importance")
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.show()
# plt.savefig("featureImportance_original_data.png")
plt.savefig("featureImportance_processed_data.png")

输出:

MAE 13.823899600226756
score: 0.06745863281377751
r2: 0.9388


Age(年龄)、性别(Sex)、Body mass index(体质指数)、Average Blood Pressure(平均血压)、S1~S6一年后疾病级数指标。

影响糖尿病的致病因素,主要是 BMI、S5(血压)、AGE(年龄),BMI 指数高(肥胖)是导致糖尿病最重要的风险因素。


变量相关性分析

# 变量相关性
def Relation(df1,method,fileName):# 共线性分析cor=df1.corr(method)cor.to_excel("correlation_table.xlsx")cor.loc[:,:]=np.tril(cor,k=-1)cor=cor.stack()# 仅仅列出高相关系数,数据呈现结构化high_cor=cor[(cor>0.6)|(cor<-0.6)]# 转换为dataframe结构df_high_cor=pd.DataFrame(high_cor)# 保存到Exceldf_high_cor.to_excel(fileName)Relation(data,'pearson',"high_correlation_pearson.xlsx")   # 数据正态分布
Relation(data,'spearman',"high_correlation_spearman.xlsx") # 数据不是正态分布

完整代码:

import lightgbm as lgb
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
from sklearn.ensemble import RandomForestRegressor# readFileName="original_data.xlsx"
readFileName="processed_data.xlsx"
# 读取excel
data=pd.read_excel(readFileName)
X=data.loc[:,"AGE":"S6"]
y=data["y"]# 划分训练集和测试集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.3, random_state=42)# lightgbm
model=lgb.LGBMRegressor(max_depth=13)
# model=lgb.LGBMRegressor()
model.fit(X, y)y_pred = model.predict(X_test)
# rms = (np.mean((y - y_pred)**2))**0.5
MAE=sum(abs(y_test - y_pred))/len(y_test)
score=1/(1+MAE)
# print ("RF RMS", rms)
print("MAE",MAE)
print("score:",score)# Explained variance score: 1 is perfect prediction
print('r2: %.4f' % r2_score(y_test,y_pred))feature_importances=model.feature_importances_
names=X.columns
list_feature_importances=list(zip(feature_importances,names))
df_feature_importances=pd.DataFrame(list_feature_importances)
# df_feature_importances.to_excel("catboost_110变量重要性.xlsx")
df_feature_importances.to_excel("lightgbm变量重要性.xlsx")n_features=X.shape[1]
plt.barh(range(n_features),model.feature_importances_,align='center')
plt.yticks(np.arange(n_features),X.columns)
plt.title("lightgbm feature importance")
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.show()
# plt.savefig("featureImportance_original_data.png")
plt.savefig("featureImportance_processed_data.png")def Relation(df1,method,fileName):cor=df1.corr(method)cor.to_excel("correlation_table.xlsx")cor.loc[:,:]=np.tril(cor,k=-1)cor=cor.stack()# 仅仅列出高相关系数,数据呈现结构化high_cor=cor[(cor>0.6)|(cor<-0.6)]df_high_cor=pd.DataFrame(high_cor)df_high_cor.to_excel(fileName)Relation(data,'pearson',"high_correlation_pearson.xlsx")
Relation(data,'spearman',"high_correlation_spearman.xlsx")

相关性最高的是 S1、S2。


一文:当前科学理解慢病之王的解决方案

中国是重大的慢病市场,糖尿病是慢病之王。

数据来自真实的临床机构,毕竟机器学习受数据影响,数据不够量、不够均衡就会产生偏差。

  • 国际糖尿病联合会:https://idf.org/

  • 英国糖尿病组织官网:http://www.diabetes.org.uk/

科学是一个社会行为。所谓科学知识,其实是当前这一代科学家的集体共识,仅此而已。

当前科学理解,是一线科学家穷尽人类目前所有的知识,对一个事物最好的判断。对科学家来说,它是新研究的出发点和讨论的基本线;对一般公众来说,它可能是认知的天花板。

一般人得病后都喜欢吃贵的补品,鹿茸、虎骨、熊掌、人参、阿胶、海参、鱼翅、虫草。

比如虫草,而现在整个学术界的共识就是,虫草不仅没用,而且可能有害。

如果冬虫夏草真的没用,为什么还有那么多人趋之若鹜呢?

如果用博弈论来看,现在的市场就是一个两因素市场。

要想打破这个均衡,只对少数人科普是不够的。

第一,互联网并不是一个是非不分、黑白不明的地方,事实上很多的网站会列举了冬虫夏草的种种功效,包括补肾益精、止血化痰、补虚……一直到抑癌抗癌、美容养颜等等一共12 项功能,简直就是神药;再加上价格贵,大家都信了。

冬虫夏草,你知道它没用,这只是一个因素,这还不足以让你彻底不买它。

还有一个因素是 “很多人认为它很值钱”。

所以,买冬虫夏草并不是为了自己吃,而是作为一个贵重礼品送人。人们不一定认同它的功效,但是人们认同它的价格。

除非哪天,社会习俗把 “冬虫夏草没用” 变成一个公共知识,以至于送冬虫夏草就等于是对智商的侮辱才行。

嗨,冬虫夏草和燕窝等各类补品,就是一个“中国式”大骗局。

每年的九月到第二年四月是金丝燕的繁殖期。这期间,它们用来建巢的唾液很丰富,雌燕和雄燕会一起建巢,就是用唾液和其他东西混合在一起,形成一个杯子状的窝。

古代人的判断标准就是物以稀为贵,稀有的吃了就对身体有好处。

于是,悬崖上的燕窝比屋檐下的燕窝吃了更长寿,金丝燕呕血做出来的血燕窝更是稀奇,于是它就能卖出天价。

中国是印尼燕窝出口的最大目的地,但是印尼当地采燕窝的农民说,根本没有血燕窝这种东西。

当地有从内地来的黑心商人收购来燕窝后,把燕窝用燕子的粪便再熏蒸五天,这时候,燕窝有些部分会变红,而后就被当作血燕窝来卖,价格会贵很多。

这些人就是摸准了有相当多的人对什么是健康、什么是营养这方面的认识,还停留在1000年前的水平,才敢这样下狠手的。

燕窝有什么神奇功效吗?一个也没有。

普通功效呢?多吃的话可以解饱、治饿,除此之外就没有其他特别的了。

其实这个道理也一样适用于鹿茸、虎骨、熊掌、人参、阿胶、海参、鱼翅、虫草等传统上认为的滋补品。

因为它们都不是提纯过的物质,所以物质结构和大部分生物体差异并不大。

如果要体现出特别的功效,就要把那一点点微不足道的差异放大再放大,放大到和生物体的组成成分截然不同的时候,就有可能不一样了。

比如,有的人发烧时,啃柳树皮能退烧,但必须啃春天的,啃秋天的就没用。

为什么呢?因为水杨酸在春天的柳树皮中的含量是秋天的几百倍。也就是说,功效不在柳树皮,而在水杨酸,你能不能把水杨酸从柳树皮中提纯出来才是关键。

你不提纯,怎么能期待一种微量物质有什么功效呢?

我们再来看鹿茸、虎骨、熊掌、人参、阿胶、海参、鱼翅,它们根本没有希望成为成功的商品(真的有功效、畅销全球)。

它们之所以依然常见于市场,主要就是生产者利用消费者的无知进行诈骗。

有名人故事做背景,再把功效用古代医学解释一番,燕窝自然是很受欢迎的。

中国几乎没有燕窝生产,全部依靠进口燕窝,据统计,燕窝总进口量是 80 吨左右,而中国每年燕窝产品的消费是 600 多吨,多出的 520 吨都是什么呢?

燕窝风味饮品。这个道理就像,番茄酱里没有番茄但也叫番茄酱,椰汁里没有椰子但也叫椰汁是一样的。

吃补品对身体可能不仅没有好处,还有坏处,对身体好的反而是最基础的规律作息、饮食均衡、合理运动。


是什么

即使是在医学如此发达的今天,糖尿病仍然是一种几乎无法根治、无法逆转的疾病。绝大多数时候,人们能够期待的最好结果,也无非是“控制”,尽量延缓病情恶化的程度。

最后,糖尿病本身并不致死,但是会引发各种致命的疾病。

这就是所谓的“糖尿病并发症”。一个糖尿病患者如果得不到很好的治疗,几乎一定会在10年内患上各种各样的并发症。这些并发症不仅可能发生在全身各处,眼睛、双脚、肾脏、血管、心脏、大脑都有可能;而且非常痛苦难治,甚至连患者的寿命都会受到很大影响。


怎么治疗

型糖尿病,本质上都是负责降低血糖的胰岛素系统失灵的结果。因此自然而然的,提到糖尿病,人们首先想到的就是胰岛素。

在糖尿病治疗的市场上,销售额最大的品类也确实是胰岛素。

除此之外,几乎在全世界所有医院,任何一个患者被确诊 2型糖尿病(分1型、2型,2型居多)后,医生都会立刻为他开出一张二甲双胍的处方。每天全世界有超过1亿人,使用这种药物控制血糖。

至少截至目前,二甲双胍还是一种治疗糖尿病的处方药物,它也有不少副作用需要警惕,比如说,可能会导致腹痛腹泻、恶心呕吐等胃肠道反应;再比如说,可能会导致肾功能有问题的人的肾病加重,所以不建议你随便就去吃。

针对1型糖尿病,我们有各种胰岛素药物,未来还可能拥有升级版的生物胰腺;针对2型糖尿病,我们拥有“神药”二甲双胍,也有基于病理研发出来的各类“格列汀”、“格列净”药物。


怎么预防

糖尿病的复杂症状,其实归根结底都是血糖上升导致的。

人,就是喜欢甜的;大脑对糖上瘾,抵挡不住不是自控力低,而是无法克服人性的本能。

下面几个方法,既可以不那么痛苦的自律,也不会得糖尿病。

1、一顿饭吃了,土豆、白薯、山药、莲藕等,就不要吃米饭。

2、喝饮料时选择无糖的。

3、吃完整的水果,不要喝果汁。

吃完饭,走路溜达30分钟,消化一下。正常人稍微控制下,一般不会得糖尿病。


生物信息学竞赛:糖尿病数据挖掘相关推荐

  1. 数据挖掘竞赛——糖尿病遗传风险检测挑战赛Baseline

    本次比赛是一个数据挖掘赛,需要选手通过训练集数据构建模型,然后对验证集数据进行预测,预测结果进行提交. 本题的任务是构建一种模型,该模型能够根据患者的测试数据来预测这个患者是否患有糖尿病.这种类型的任 ...

  2. 数据挖掘竞赛——糖尿病遗传风险检测挑战赛进阶

    本次比赛是一个数据挖掘赛,需要选手通过训练集数据构建模型,然后对验证集数据进行预测,预测结果进行提交. 本题的任务是构建一种模型,该模型能够根据患者的测试数据来预测这个患者是否患有糖尿病.这种类型的任 ...

  3. 数据竞赛技巧|数据挖掘(四):常用trick介绍

    本文为数据挖掘竞赛技巧篇之常用trick介绍. 1.特征选择策略 特征选择(按重要程度排序)对数据分析非常重要.好的特征能够改善模型.提升模型的性能,特征选择主要有两个功能: 减少特征数量.降维,使模 ...

  4. 南大计算机生物信息学,机器学习与数据挖掘-南京大学计算机系.PDF

    机器学习与数据挖掘-南京大学计算机系 机器学习与数据挖掘 周 志 华 南京大学计算机软件新技术国家重点实验室,南京210093 "机器学习"是人工智能的核心研究领域之一,其最初的研 ...

  5. 数据挖掘 and 生物信息学之旅

    目录 前言: 生物信息学历史 生物信息学主要应用 数据挖掘和生物信息学的关系 前言:

  6. 糖尿病数据独家震撼挖掘-基于上百万临床实验数

    大家好,我是Toby老师,曾担任国内最大医药数据中心数据挖掘负责人.10年以上数据科学经验,和中科院,重科院,重庆中药研究所,重庆儿科医院教授有长期项目合作.我们的宗旨是用人工智能,数据科学挖掘疾病致 ...

  7. 糖尿病数据独家挖掘-基于上百万临床实验数(收藏)

    大家好,我是Toby老师,曾担任国内最大医药数据中心数据挖掘负责人.10年以上数据科学经验,和中科院,重科院,重庆中药研究所,重庆儿科医院教授有长期项目合作.现在成立了重庆未来之智信息技术咨询服务有限 ...

  8. 【数据竞赛】盘点Kaggle中常见的AutoEDA工具库

    在完成竞赛和数据挖掘的过程中,数据分析一直是非常耗时的一个环节,但也是必要的一个环节. 能否使用一个工具代替人来完成数据分析的过程呢,现有的AutoEDA工具可以一定程度上完成上述过程.本文将盘点常见 ...

  9. DataCastle[职位预测竞赛]冠军——我们都爱苍老师

    对于如何提升大数据技能?大多资深专家会建议,在学习书本知识的基础上参加竞赛,从实践中发现问题提升自己.为了让更多的参赛者近距离接触数据领域的大神,DataCastle联合数据客邀请到了DC平台的热门人 ...

最新文章

  1. 【PL/SQL】--导出oracle单表数据--drp204
  2. JAVA用JNI方法调用C代码实现HelloWorld
  3. mybatis动态查询列名,#与¥
  4. C语言中,指针在一个自定义且不带返回值是如何改变外部一些变量的(指针与函数的相互作用)
  5. [转载] java之重写toString
  6. 变成小白的第一本Python入门书,第五章循环与判断课后题答案
  7. vue中检测断网处理
  8. Linux下的C++ socket编程实例
  9. mpvue构建小程序(步骤+地址)
  10. 再谈js对象数据结构底层实现原理-object array map set
  11. 听我讲完 redo log、binlog 原理,面试官老脸一红!
  12. bartend无法自动打印的问题
  13. 2022年电子商务概论(农)之形考作业二
  14. spring boot 请求转发和重定向
  15. python wmi 显卡型号_确定通过WMI运行的GPU
  16. 七脉轮位置_十分钟告诉你七个脉轮的全部,从未如此简单
  17. 大数据可视化工程师岗位要求包括哪些?
  18. 人工智能从概念到实战
  19. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...
  20. 动物细胞无血清培养基的发展和应用

热门文章

  1. 辰视机器人3D视觉案例集锦 | 制造业无序工件上下料
  2. 尚硅谷Java数据结构与java算法 全194章笔记整理
  3. wrf格式播放器下载
  4. 商业模式 - 被程序员颠覆的业务蓝图
  5. implements和extends的区别
  6. HTML5+(html5 plus)
  7. 企业邮箱账号注册格式怎么写?
  8. 本文章提供中国国界、国界十段线原始数据以及加载方法
  9. java aot_Java 9 AOT初探
  10. BootStrap与LayUI学习重点