Python中缺失值处理策略与Imputer类实战
本文详解Python中处理缺失数据的多种策略,包括忽略、人工填写、全局常量及统计值填充,并重点介绍sklearn中Imputer类的具体应用。通过均值、中位数和众数填充示例,展示如何处理常规数据及稀疏矩阵中的缺失编码,帮助开发者高效完成数据预处理。
一、缺失值的处理方法
在现实世界的数据集中,由于各种原因常包含缺失数据,这些缺失值通常被编码为空格、NaN或其他占位符。然而,scikit-learn中的大多数学习算法无法直接兼容此类数据集,因为算法默认数组元素为数值,且每个元素都应有明确的代表意义。
处理不完整数据集的一种基本策略是删除包含缺失值的整行或整列,但这会导致大量有价值数据的浪费。以下是处理缺失值的几种常用方法:
1. 忽略元组
当缺失的是类别标签时(假设挖掘任务涉及分类),通常采用此方法。除非元组中存在多个属性缺失值,否则该方法效果不佳。当各属性缺失值的百分比变化较大时,其性能表现尤其差。
2. 人工填写缺失值
该方法通常耗时费力,当数据集规模大且缺失值众多时,往往难以实施。
3. 使用全局常量填充缺失值
将缺失的属性值替换为同一个常数(如“Unknown”或负无穷)。若所有缺失值均被替换为“unknown”,挖掘程序可能将其视为一个有趣的概念,因为它们具有相同的值。尽管该方法简单,但可靠性较低。
4. 使用与给定元组属同一类的所有样本的属性均值
例如:将顾客按credit_risk分类,则使用具有相同信用度的给定元组的顾客的平均收入替换income中的缺失值。
5. 使用最可能的值填充缺失值
可通过回归、基于贝叶斯形式化的推理工具或决策树归纳来确定。例如,利用数据集中其他顾客的属性,可以构造一棵决策树来预测income的缺失值。
注意:缺失值并不总是意味着数据的错误!!!!!!!
二、缺失值处理的代码实现
class:`Imputer`类提供了缺失数值处理的基本策略,例如使用缺失数值所在行或列的均值、中位数、众数来替代缺失值。该类也兼容不同的缺失值编码。
1、使用均值填充缺失值
import numpy as np from sklearn.preprocessing import Imputer imp = Imputer(missing_values='NaN', strategy='mean', axis=0) import numpy as np from sklearn.preprocessing import Imputer ###1.使用均值填充缺失值 imp = Imputer(missing_values='NaN', strategy='mean', axis=0) imp.fit([[1, 2], [np.nan, 3], [7, 6]]) X = [[np.nan, 2], [6, np.nan], [7, 6]] print(imp.transform(X)) [[4. 2. ] [6. 3.66666667] [7. 6. ]]
2、Imputer 类也支持稀疏矩阵:
import scipy.sparse as sp X = sp.csc_matrix([[1, 2], [0, 3], [7, 6]]) imp = Imputer(missing_values=0, strategy='mean', axis=0) imp.fit(X) X_test = sp.csc_matrix([[0, 2], [6, 0], [7, 6]]) print(imp.transform(X_test)) #注意,在这里,缺失数据被编码为0, 这种方式用在当缺失数据比观察数据更多的情况时是非常合适的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













