成年人死亡率指的是每一千人中15岁至60岁死亡的概率(数学期望)。这里我们给出了世界卫生组织(WHO)下属的全球卫生观察站(GHO)数据存储库跟踪的所有国家健康状况以及许多其他相关因素。要求利用训练数据建立回归模型,并预测成年人死亡率(Adult Mortality)
目录
实验要求
- 训练数据包含 2336 条记录和 22 个字段,对训练数据进行一定的可视化数据分析
- 利用训练数据,选择合适的信息作为特征建立回归模型,并预测测试数据成年人死亡率
- 测试数据(test_data.csv)总共包含 592 条记录,21 个字段,和训练数据相比,除了不包含 Adult Mortality 字段外,其他完全相同。
训练数据
训练数据(train_data.csv
)包含 2336 条记录和 22 个字段,每个字段含义说明如下:
- Country:国家
- Year:年份
- Status:发达国家或发展中国家
- Life expectancy:预期寿命
- Infant deaths:每千人口中的婴儿死亡人数
- Alcohol:人均酒精消费量(以升纯酒精为单位)
- percentage expenditure:卫生支出占人均国内生产总值的百分比
- Hepatitis B:一岁儿童乙型肝炎免疫疫苗接种率
- Measles:麻疹每1000人报告的病例数
- BMI:所有人群平均BMI指数
- under-five deaths:每千人口中五岁以下死亡人数
- Polio:1岁儿童脊髓灰质炎免疫覆盖率(%)
- Total expenditure:政府卫生支出占政府总支出的百分比
- Diphtheria:1岁儿童白喉、破伤风类毒素和百日咳免疫接种率(%)
- HIV/AIDS:每千名活产婴儿死于艾滋病毒/艾滋病(0-4岁)
- GDP:人均国内生产总值(美元)
- Population:人口
- thinness 1-19 years:10至19岁儿童和青少年的消瘦流行率
- thinness 5-9 years:5至9岁儿童中的消瘦流行率
- Income composition of resources:财力收入构成方面的人类发展指数(从0到1)
- Schooling:受教育年限
- Adult Mortality:成人死亡率(每1000人中15至60岁死亡的概率)
其中Adult Mortality字段为要预测的标签(label
)
数据预处理
可视化
# 数据读取和可视化分析
model_filename = './model.pkl'
imputer_filename = './imputer.pkl'
scaler_filename = './scaler.pkl'
train_data = pd.read_csv('./data/train_data.csv')
trian_data
可以看到训练数据中存在一些字段值的缺失NaN
,数据中的缺失值是一个非常棘手的问题,很多文献都致力于解决这个问题。那么,数据缺失究竟带来了什么问题?假设有100个样本和20个特征,这些数据都是机器收集回来的。若机器上的某个传感器损坏导致一个特征无效时该怎么办?它们是否还可用?答案是肯定的。因为有时候数据相当昂贵,扔掉和重新获取都是不可取的,所以必须采用一些方法来解决这个问题。下面给出了一些可选的做法:
- 使用可用特征的均值来填补缺失值;
- 使用特殊值来填补缺失值,如-1;
- 忽略有缺失值的样本;
- 使用相似样本的均值添补缺失值;
- 使用另外的机器学习算法预测缺失值。
本文经过测试比较最终使用该特征均值来补全缺失值。
特征间相关性
下面计算各个特征之间的皮尔森相关系数,皮尔森相关系数可以理解为特征与特征之间的线性相关程度,取值[-1,1],正数就是正相关,负数就是负相关。且绝对值越大,即越接近1,相关程度越高。
# 计算各个特征之间的皮尔森相关系数
train_data.corr()
相关性矩阵热力图
# 将相关性矩阵绘制成热力图
corr = train_data.corr()
corr.style.background_gradient(cmap='coolwarm')
根据原博文中的分析:从热力图可以看出 infant deaths
与 under-five deaths
有很强的正相关,即 每千人口中的婴儿死亡人数
与 每千人口中五岁以下死亡人数
有很强的正相关;除此之外,也可以看到 thinness 1-19 years
和 thinness 5-9 years
有很强的正相关,也是一样的道理。
在实际的预处理中,本文并没有对这种相似特征进行去除,而是利用随机森林的特性得到最优随机森林模型允许单个决策树使用特征的最大数量(max_features
)参数值。
数据间依赖关系
# 利用seaborn检查可视化数据之间的依赖关系
corr.style.background_gradient(cmap='coolwarm')
预处理
- 补全缺失值:采用均值填充缺失值,
SimpleImputer(strategy='mean', missing_values=np.nan)
- 归一化:采用最小最大归一化,
MinMaxScaler()
。通常情况下,在建模之前,都需要对数据进行标准化处理,以消除量纲的影响。如果对未标准化的数据直接进行建模,可能会导致模型对数值大的变量学习过多,而对数值小的变量训练不够充分,往往模型效果会不好。常用的数据标准化方法有最大最小归一化、均值方差标准化、小数定标法、定量特征二值化等。最大最小归一化,顾名思义,就是利用数据列中的最大值和最小值进行标准化处理,标准化后的数值处于[0,1]之间,计算方式为数据与该列的最小值作差,再除以极差。具体公式为:
def preprocess_data(data, imputer=None, scaler=None