1.项目背景
从古到今,人们都希望自己以及家人长寿。长命百岁、寿比南山这些成语也是被大家一直所期望的。随着医疗水平的进步,人的平均寿命在慢慢提升。现在全球平均预期寿命是73.2岁,而在1950年则只有47岁。
平均预期寿命是在一定的年龄别死亡率水平下,活到确切年龄X岁以后,平均还能继续生存的年数,它是衡量一个国家、民族和地区居民健康水平的一个指标。可以反映出一个社会生活质量的高低。社会经济条件、卫生医疗水平限制着人们的寿命。所以不同的社会,不同的时期,人类寿命的长短有着很大的差别;同时,由于体质、遗传因素、生活条件等个人差异,也使每个人的寿命长短相差悬殊。
这个指标与性别、年龄、种族有着紧密的联系,因此常常需要分别计算。平均预期寿命是我们最常用的预期寿命指标,它表明了新出生人口平均预期可存活的年数,是度量人口健康状况的一个重要的指标。
寿命的长短受两方面的制约。一方面,社会经济条件、卫生医疗水平限制着人们的寿命,所以不同的社会,不同的时期,寿命的长短有着很大的差别;另一方面,由于体质、遗传因素、生活条件等个人差异,也使每个人的寿命长短相差悬殊。因此,虽然难以预测具体某个人的寿命有多长,但可以通过科学的方法计算并告知在一定的死亡水平下,预期每个人出生时平均可存活的年数。这就是平均预期寿命。
因此,对于探究影响人类预期寿命的因素以及对预期寿命进行预测有着至关重要的作用。
2.项目简介
2.1项目内容
本项目是世卫组织建立了一段时间内所有国家健康状况的数据集,其中包括预期寿命,成人死亡率等方面的统计数据。使用此数据集,探索各种变量之间的关系,通过数据集建立模型对预期寿命进行预测以及找出对预期寿命的最大影响因素是什么?
本项目主要解决以下问题:
- 最初选择的各种预测因素是否真的影响预期寿命?实际影响预期寿命的预测变量有哪些?
- 预期寿命值低于(<65)的国家是否应该增加其医疗保健支出以改善其平均寿命?
- 婴儿和成人死亡率如何影响预期寿命?
- 是否接受教育对人类寿命有何影响?
- 预期寿命与饮酒是正相关还是负相关?
- 人口稠密的国家的预期寿命是否有降低的趋势?
2.2数据说明
数据集:数据/探索影响预期寿命的因素/Life Expectancy Data.csv
案例来源:https://www.kaggle.com/kumarajarshi/life-expectancy-who
在本项目中,我们考虑了193个国家2000年至2015年的数据进行进一步分析。单个数据文件已合并到一个数据集中。对数据进行初步目视检查时发现有些值缺失。由于数据集来自世界卫生组织,我们没有发现明显的错误。R软件使用Missmap命令处理缺失数据。结果表明,缺失的数据主要集中在人口、乙肝和国内生产总值。缺失的数据来自不太为人所知的国家,如瓦努阿图、汤加、多哥、佛得角等。很难找到这些国家的所有数据,因此决定将这些国家排除在最终模型数据集之外。最终合并的文件(最终数据集)由22列和2938行组成,这意味着20个预测变量。所有的预测变量被分成几个大类:免疫相关因素、死亡率因素、经济因素和社会因素。
所以最终的数据共有2938行,22列
该数据集每个指标名称及其含义说明如表 2‑1所示。
指标名称 |
指标含义 |
Hepatitis B |
B乙型肝炎 |
Measles |
麻疹 |
BMI |
体重指数 |
under-five deaths |
五岁以下死亡数 |
Polio |
小儿麻痹 |
Total expenditure |
总支出 |
Diphtheria |
白喉病 |
HIV/AIDS |
艾滋病 |
GDP |
国家GDP值 |
Population |
国家人口数 |
thinness 1-19 years |
虚弱1-19年 |
thinness 5-9 years |
虚弱5-9年 |
Income composition of resources |
资源收入构成 |
Schooling |
学校教育 |
指标名称 |
指标含义 |
Country |
国家 |
Year |
年份 |
Status |
国家发展:Developing, Developed |
Life expectancy |
预期寿命 |
Adult Mortality |
成年人死亡数 |
infant deaths |
婴幼儿死亡数 |
Percentage expenditure |
支出百分比 |
2.3技术工具
本项目以jupyter notebook为平台,以Python语言为基础,采用pandas进行数据整理和统计分析,用matplotlib、seaborn进行可视化呈现,采用线性回归、随机森林、神经网络三个模型进行预测预期寿命。
3.算法原理
3.1线性回归
一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归。当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。 设y为因变量X1,X2…Xk为自变量,并且自变量与因变量之间为线性关系时,则多元线性回归模型为:
Y=b0+b1x1+…+bkxk+e
其中,b0为常数项,b1,b2…bk为回归系数,b1为X1,X2…Xk固定时,x1每增加一个单位对y的效应,即x1对y的偏回归系数;同理b2为X1,X2…Xk固定时,x2每增加一个单位对y的效应,即,x2对y的偏回归系数,等等。如果两个自变量x1,x2同一个因变量y呈线相关时,可用二元线性回归模型描述为:
y=b0 +b1x1 +b2x2 +e
建立多元线性回归模型时,为了保证回归模型具有优良的解释能力和预测效果,应首先注意自变量的选择,其准则是:
(1)自变量对因变量必须有显著的影响,并呈密切的线性相关;
(2)自变量与因变量之间的线性相关必须是真实的,而不是形式上的;
(3)自变量之间应具有一定的互斥性,即自变量之间的相关程度不应高于自变量与因变量之间的相关程度;
(4)自变量应具有完整的统计数据,其预测值容易确定。
3.2神经网络
神经网络(Neural Networks,NN)是由大量的、简单的处理单元(称为神经元)广泛地互相连接而形成的复杂网络系统,它反映了人脑功能的许多基本特征,是一个高度复杂的非线性动力学习系统。神经网络具有大规模并行、分布式存储和处理、自组织、自适应和自学能力,特别适合处理需要同时考虑许多因素和条件的、不精确和模糊的信息处理问题。神经网络的发展与神经科学、数理科学、认知科学、计算机科学、人工智能、信息科学、控制论、机器人学、微电子学、心理学、光计算、分子生物学等有关,是一门新兴的边缘交叉学科。
神经网络的基础在于神经元。
神经元是以生物神经系统的神经细胞为基础的生物模型。在人们对生物神经系统进行研究,以探讨人工智能的机制时,把神经元数学化,从而产生了神经元数学模型。
大量的形式相同的神经元连结在—起就组成了神经网络。神经网络是一个高度非线性动力学系统。虽然,每个神经元的结构和功能都不复杂,但是神经网络的动态行为则是十分复杂的;因此,用神经网络可以表达实际物理世界的各种现象。
神经网络模型是以神经元的数学模型为基础来描述的。人工神经网络(ArtificialNuearlNewtokr)s,是对人类大脑系统的一阶特性的一种描。简单地讲,它是一个数学模型。神经网络模型由网络拓扑.节点特点和学习规则来表示。神经网络对人们的巨大吸引力主要在下列几点:
1.并行分布处理。
2.高度鲁棒性和容错能力。
3.分布存储及学习能力。
4.能充分逼近复杂的非线性关系。
3.3随机森林
随机森林是一种有监督学习算法。就像它的名字一样,它创建了一个森林,并使它拥有某种方式随机性。所构建的“森林”是决策树的集成,大部分时候都是用“bagging”方法训练的。bagging 方法,即 bootstrapaggregating,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。简而言之,随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。其一大优势在于它既可用于分类,也可用于回归问题,这两类问题恰好构成了当前的大多数机器学习系统所需要面对的。
随机森林分类器使用所有的决策树分类器以及 bagging 分类器的超参数来控制整体结构。与其先构建 bagging分类器,并将其传递给决策树分类器,我们可以直接使用随机森林分类器类,这样对于决策树而言,更加方便和优化。要注意的是,回归问题同样有一个随机森林回归器与之相对应。
随机森林算法中树的增长会给模型带来额外的随机性。与决策树不同的是,每个节点被分割成最小化误差的最佳指标,在随机森林中我们选择随机选择的指标来构建最佳分割。因此,在随机森林中,仅考虑用于分割节点的随机子集,甚至可以通过在每个指标上使用随机阈值来使树更加随机,而不是如正常的决策树一样搜索最佳阈值。这个过程产生了广泛的多样性,通常可以得到更好的模型。
4.项目实施步骤
从机器学习的分类来讲,这是一个有监督问题中的回归问题。通过训练已有的数据进行未来数据的预测。
4.1理解数据
在jupyter notebook单元格中输入下面程序,导入数据和工具包,并查看数据集的信息、大小,并初步观察头部信息。
查看数据大小
数据共有2938行,22列
查看数据基本信息
查看数值型数据描述
查看非数值型数据描述
4.2数据预处理
在真实世界中,数据通常是不完整的(缺少某些感兴趣的指标值)、不一致的(包含代码或者名称的差异)、极易受到噪声(错误或异常值)的侵扰的。因为数据库太大,而且数据集经常来自多个异种数据源,低质量的数据将导致低质量的挖掘结果。就像一个大厨现在要做美味的蒸鱼,如果不将鱼进行去鳞等处理,一定做不成我们口中美味的鱼。数据预处理就是解决上述所提到的数据问题的可靠方法,因此,在进行数据分析之前我们需要进行数据预处理。
数据预处理一般要遵循以下规则:
1)完整性:单条数据是否存在空值,统计的字段是否完善。
2)全面性:观察某一列的全部数值,通过常识来判断该列是否有问题,比如:数据定义、单位标识、数据本身。
3)合法性:数据的类型、内容、大小的合法性。比如数据中是否存在非ASCII字符,性别存在了未知,年龄超过了150等。
4)唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的。
本项目对数据进行数重复值和缺失值处理两种预处理方法,以确保其完整性、全面性与合法性。
4.2.1缺失值处理
首先,通过data.isnull().sum()统计出每个特征的缺失值,运行结果如图 4‑3所示。
我们发现数据缺失值还是挺多的,于是我们调用dropna()函数进行删除缺失值。
4.2.2重复值处理
这里我们直接调用drop_duplicates()进行删除重复值