利用上一节讲述的理论,本节将使用朴素贝叶斯实现糖尿病患病预测。本节使用的数据来源于美国国家糖尿病和消化肾脏疾病研究所,原始数据可从UCI数据库获取。这是机器学习领域一个被广泛研究的标准数据集,一般认为,关于这个数据集的预测算法如果能达到70%~76%的预测准确率就是一个较好的预测算法。本教材所用数据已经根据需要进行过适当地处理,可从教材配套的资源平台下载。
首先从本教材的资源平台下载该数据文件,并以文件名pima-indians.data.csv保存为csv文件。这是一个关于皮马族糖尿病患者的医疗检测数据(表4-1)。皮马族是美国印第安原住民的一个种族,由于基因缺陷,这个种族的糖尿病患病率很高,数据集描述了768个皮马印第安糖尿病患者的医疗观测细节,所有患者都是21岁以上(含21岁)的女性,所有的特征属性取值都是数值型,且各属性取值的度量单位是不同的。
表4-1
双击打开数据文件可以看到这是一个包含9个数据项的表格。其中Pregnancies代表怀孕次数;Glucose代表口服葡萄糖耐量试验中的葡萄糖浓度;Blood Pressure代表血压;Skin Thickness代表皮脂厚度;Insulin代表血清胰岛素含量;BMI代表体重指数;Diabetes Pedigree Function代表糖尿病系统功能;Age代表年龄;Outcome代表5年内是否患有糖尿病,1表示患病,0表示未患病。因此这可以对应到一个分类问题,输入数据是前8项检测数据,输出的分类结果是0或者1,表示该人未患病或者患病。
首先导入三个需要用到的Python库。csv是一种以逗号分隔存储数据的文件格式,csv模块可以很好地对这种格式的数据进行读取、存储和处理。random模块用于随机分割数据集,产生训练数据和测试数据。math模块用于计算数据的均值、标准差等数学结果时可以直接调用相应的计算函数。