You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.2 KiB
2.2 KiB
3.6 数据预处理常用技巧---估算缺失值
为什么要估算缺失值
由于各种原因,真实世界中的许多数据集都包含缺失数据,这类数据经常被编码成空格、NaNs
,或者是其他的占位符。但是这样的数据集并不能被数据挖掘算法兼容,因为大多的学习算法都默认假设数组中的元素都是数值,因而所有的元素都有自己的意义。
使用不完整的数据集的一个基本策略就是舍弃掉整行或整列包含缺失值的数据。但是这样就付出了舍弃可能有价值数据(即使是不完整的 )的代价。例如我有这样一份数据:
性别 | 工资 |
---|---|
男 | |
女 | |
女 | 5000 |
男 | |
男 | 6000 |
女 |
如果我们将带有缺失值的记录全部删掉的话,那么数据中就只有一条样本可以使用了,这时你会发现,就 2 条样本我挖掘什么啊?
因此更好的处理缺失值的策略是,想办法将缺失值给补上,虽然有点亡羊补牢的意思,但是总比破罐子破摔强。
使用sklearn来处理缺失值
在sklearn
中提供了接口Imputer
来帮助我们快速的对缺失值进行填充。使用方法如下:
# 导入Imputer类
from sklearn.preprocessing import Imputer
# 定义数据,np.nan表示缺失
data = [[np.nan, 2], [6, np.nan], [7, 4],[np.nan,4]]
# 实例化Imputer对象,missing_values表示我们将什么值看成是缺失,strategy表示按照什么样的方式来填充缺失值
# strategy='mean'表示填充缺失值时,使用列的均值来填充
imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
# 填充缺失值
data = imp.fit_transform(data)
# 根据数据可知,第一列的均值是6.5,第二列的均值是3.33333,所以数据中缺失的部分就是使用的均值来进行填充的
>>>data
array([[6.5 , 2. ],
[6. , 3.33333333],
[7. , 4. ],
[6.5 , 4. ]])
当然,Imputer
的填充策略不止mean
这一种,还有两种策略如下:
median
表示使用中位数代替缺失值。most_frequent
表示使用出现频率最多的值代替缺失值。