特征工程-数据清洗

值数据清洗

刚开始接触的数据,并不如我们想的那么完美, 数据存在缺失值以及一些脏数据。数据清洗也包括对数据进行再处理比如归一化等。

皮马印第安人糖尿病预测数据集, 通过怀孕次数,口服葡萄糖耐量实验中的2小时血浆葡萄糖浓度,舒张压,三头肌皮褶厚度,2小时血清胰岛素浓度,体重指数,糖尿病家族函数,年龄,预测5年内会不会得糖尿病,类变量(0或1,代表无或有糖尿病)

数据

数据分析

首先查看一下空准确率(当模型总是预测频率较高的类别时达到的正确率):

空准确率

既然终极目标是研究数据的规律以预测是否会患糖尿病,那么可以对糖尿病患者和健康患者进行可视化。查看俩类的差异。

差异
各分类

可以查看各属性跟onset_diabetes类别的相关性:

相关性

根据以上相关性,可以得出plasma_glucose_concentration(血浆葡萄糖浓度)和onset_diabetes(糖尿病类别)有较强的相关性。

查看缺失值:

缺失值情况

根据以上可以得出没有缺失的情况。

查看数据的基本的描述性统计:

基本数据统计分布

发现血压, bmi, 胰岛素浓度等指标都是0,不符合医学常识。也许缺失值都是以0来填充的。

处理缺失值

对缺失值的处理方式,主要分为俩种:删除缺失值的行, 填充缺失值

现对上面数据将null填充为0的数据还原。

还原
另一种替换方式

删除有害的行

先确保删除的行在可以接受的范围内:

保留的数据

从上面可知,有51%的数据被删除掉, 一半以上的数据被忽略掉,虽然数据变得非常干净,但是我们没有利用尽可能多的数据。

先比较删除前后数据的分布,是否有所改变:

删除后的空准确率

将删除前后的空准确率进行比较,发现没有很大的差别。

查看各属性删除前后值是否存在波动:

删除前后均值的变化
图标表示差异

通过上面俩种表现形式的数据,可以发现前后数据的存在较大的波形性,特别是times_pregnant,pedigree_function有超过10%的改变。

将删除数据应用到机器学习

得到准确率为74.5%, 比空准确率66.8%效果好,这只是使用了49%的数据。

填充缺失值

缺失情况

先以plasma_glucose_concentration缺失为5的开始, 以均值填充缺失值

以均值填充缺失值

sklearn提供了一种预处理类的Imputer模块。

imputer

机器学习流水线

注意:

1. 首先需要将数据划分为训练集和测试集

2. 预处理是在划分数据之后

流水线

准确率略低于目标0.745

中位数填充

标准化和归一化

归一化:因为一些机器学习模型受数据尺度的影响很大, 这意味着diastolic_blood_presure列的舒张压在24-22,但是年龄是21-81,那么算法不会达到最优化状态。可以在直方图方法中调用可选的sharex和sharey参数,在同一比例下查看每个图表:

查看各属性共享x轴
各属性共性x轴的直方图

标准化通过确保所有行和列在机器学习中得到平等对待,让数据的处理保持一致。有以下几种方法:z分数标准化,min-max标准化,行归一化。

z分数标准化

z分数标准化利用了统计学里简单的z分数(标准分数)思想。z分数标准化的输出会被重新缩放,使均值为0, 标准差为1。

                                                            z = (x - \mu ) / \sigma

x:单元格原来的值  \mu :该列的均值  \sigma:是列的标准差

z分数标准化
应用

目前得分0.7435,接近目标得分0.745

min-max标准化

min-max标准化:

                                            m = (x - x_{min}) / (x_{max} - x_{min})

m:是新的值, x是单元格原来的值, x_{min}是该列的最小值,x_{max}是该列的最大值

min_max标准化

所有属性的最小值都是0, 所有属性的最大值都是1。注意,这种缩放的副作用是标准差都非常小。这有可能不利于某些模型,因为异常值的权重降低了。

应用

0.746目前最高得分。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容