特征增强是对数据的进一步修改,我们开始清洗和增强数据。主要涉及的操作有
- 识别数据中的缺失值
- 删除有害数据
- 输入缺失值
- 对数据进行归一化/标准化
1. 识别数据中的缺失值
特征增强的第一种方法是识别数据的缺失值,可以让我们更好的明白如何使用真是世界中的数据。通常,数据因为一些原因,导致数据缺失,不完整。我们需要做的就是识别出数据中的缺失值。并对缺失值进行处理。本文使用皮马印第安人糖尿病预测数据集。这个数据集包含768行数据点,9列特征。预测21岁以上的女性皮马印第安人5年内是否会患糖尿病。数据每列的含义如下:
(1)怀孕次数
(2)口服葡萄糖耐量实验中的2小时血浆葡萄糖浓度
(3)舒张压
(4)三头肌皮褶厚度
(5)2小时血清胰岛素浓度
(6)体重指数
(7)糖尿病家族函数
(8)年龄
(9)类变量(0或1,代表有无糖尿病)
首先我们先来了解一下数据
从上面的分析中,我们首先可以得到患者和常人的血糖浓度是有很大的差异的。并且血糖浓度与患者是否患病的相关性很大。下面我们来分析一下数据是否存在缺失值。
从上面的结果我们可以看到并没有缺失值,我们在看一下关于数据的基本描述性统计。
我们可以看到BMI指标的最小值是0.这是有悖于医学常识的。这有可能是缺失或不存在的点都用0填充了。从数据中可以看到,有好几列都是0.但是onset——diabetes中的0代表没有糖尿病,人也可以怀孕0次。所以这两列没有问题,其他的列的缺失值用0填充了。
- plasma_glucose_concentration
- diastolic_blood_pressure
- triceps_thickness
- serum_insulin
- bmi
2. 处理数据中的缺失值
首先,对存在缺失值的列,使用None代替0。然后在查看是否存在缺失值。
(1)删除有害的行
我们首先删除有害的行,然后对删除前后的数据做一个分析,最后应用机器学习算法评估一下当前数据的性能。
删除存在缺失值的数据:
retained 49% of rows
数据分析:
0 0.651042
1 0.348958
Name: onset_diabetes, dtype: float64
0 0.668367
1 0.331633
Name: onset_diabetes, dtype: float64
从空准确率来看,前后的True和False并无太大的变化。接下来比较一下删除前后的个属性均值。
我们可以看到,怀孕次数的均值在删除缺失值后下降了14%,糖尿病血系功能也上升了11%。都变化的比较大。删除行会严重影响数据的形状,所以我们应该保留尽可能多的数据。在我们进行其他操作前,我们使用一个机器学习算法验证一下当前数据情况的模型性能。
评估性能:
结果:0.7448979591836735 {‘n_neighbors’: 7}
(2)填充缺失值
首先,我们检查一下缺失值的情况。然后使用sklearn模块的方法填充缺失值,最后在检查缺失值情况,用机器学期方法验证一下模型的性能。
检查缺失值:
填充缺失值:
检查缺失值情况并评估性能:
结果:0.7330729166666666 {‘n_neighbors’: 6}
3. 标准化和归一化
我们现在要做的是进一步增强机器学习流水线,进行一下探索性数据分析。
从这分析中可以发现,某些特征数据的尺度不同。有一些机器学习模型受数据尺度的影响很大。因此,我们可以使用某种归一化/标准化操作。
**归一化:**将行和列对齐并转化为一致的规则。将所有定量列转化为同一个静态范围中的值。
**标准化:**通过确保所有行和列在机器学习中得到平等对待,让数据的处理保持一致。
(1)z分数标准化
z分数标准化利用了统计学最简单的z分数思想。将特征重新缩放,均值为0、标准差为1。通过缩放特征、统一化均值和方差,可以让机器学习模型达到最优化。公式为
其中为均值,
为标准差。
结果:0.7421875 {‘classify__n_neighbors’: 7, ‘imputer__strategy’: ‘median’}
(2)min-max标准化
其中,为该列最小值,
为该列最大值。
标准化
评估性能
结果:0.74609375 {‘classify__n_neighbors’: 4, ‘imputer__strategy’: ‘mean’}
(3)行归一化
行归一化是针对行进行操作的,保证每行有单位范数,也就是每行的向量长度相同。
归一化
结果:1.0
评估性能
结果:0.6822916666666666 {‘classify__n_neighbors’: 6, ‘imputer__strategy’: ‘mean’}
从本章的学习中,我们处理了数据中的缺失值,并使用标准化/归一化的方法继续处理数据。然后我们评估了性能。得到的结果是使用均值填充数据,然后用min-max标准化处理出具。得到0.7461的准确率。注意,虽然这个数据比删除存在缺失值的数据准确率没有高很多。但是这是使用全部数据训练的结果。更具有一般化。泛化性能将更好。
注:本文的内容与图片来源于《特征工程入门与实践》。如有您也想学习相关知识,建议买一本来看。