数据预处理

本文深入探讨了数据预处理的关键步骤,包括无量纲化、缺失值处理和特征工程,旨在提升模型性能。介绍了sklearn模块中的preprocessing和Impute,详解了数据归一化、标准化、缺失值填充及特征编码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用于模型的记录的过程 可能面对的问题有:数据类型不同,比如有的是文字,有的是数字,有的含时间序列,有的连续,有的间断。也可能,数据的质量不行,有噪声,有异常,有缺失,数据出错,量纲不一,有重复,数据是偏态,数据量太 大或太小 数据预处理的目的:让数据适应模型,匹配模型的需。

sklearn模块:preprocessing(几乎包含预处理所有内容 )Impute(填补缺失值用)

一、无量纲化

  • 目的:使不同规格的数据转换到同一规格;不同分布的数据转换到某个特定分布
  • 应用:
    (1)梯度和矩阵为核心的算法(逻辑回归,支持向量机,神经网络):加快求解速度
    (2)距离类模型(K近邻,K-Means聚类):提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。
    (3)特例:决策树和树的集成算法:决策树可以把任意数据都处理得很好

1、中心化(Zero-centered或Mean subtraction)

  • 线性,减法操作,平移操作

2、缩放处理(Scale)

  • 非线性,除法操作,缩放操作,如正态标准、对数等

3、既包括中心化,又包括缩放处理的算法

  • (1)数据归一化(Normalization,又称Min-Max Scaling)
    中心化:最小值
    缩放:最大值-最小值
    最终分布:[0,1]之间的正态分布
    在这里插入图片描述
  • (2)做数据标准化(Standardization,又称Z-score normalization)
    中心化:均值(μ)
    缩放:标准差(σ)
    最终分布:标准正态分布(均值为0,方差为1)
    在这里插入图片描述

二、缺失值

1、sklearn中impute.SimpleImputer模块

在这里插入图片描述

#使用众数填补Embarked 
from sklearn.impute import SimpleImpute
data = pd.read_csv(r"E:\my_data.csv",index_col=0) 
Embarked = data.loc[:,"Embarked"].values.reshape(-1,1)  #特征矩阵必须是二维 
imp_mode=SimpleImputer(strategy="most_frequent")
data.loc[:,"Embarked"] =
imp_mode.fit_transform(Embarked)

2、Pandas和Numpy进行填补和删除

import pandas as pd 
data =pd.read_csv(r"E:\my_data.csv",index_col=0) 
data.loc[:,"Age"]=data.loc[:,"Age"].fillna(data.loc[:,"Age"].median()) 
data.dropna(axis=0,inplace=True) #删除所有有缺失值的行,原数据集修改

3、随机森林

  • 思路:无缺失列和原始标签列(一定非空)作为新的特征,缺失特征列作为label,无缺失的行为train数据,有缺失行为test数据,返回的predict值即为缺失值的预测值。

    当有多个特征列有缺失值时,怎么办? 答:当有多个特征列有缺失值时,先从缺失值最少的列开始填补(因为填补缺失少的特征所需要的准确信息少)。填补一个特征时,先将其他特征的缺失值用0代替,每完成一次回归预测,就将预测值放到原本的特征矩阵中,再继续填补下一个特征。

三、特征处理

1、离散(编码,哑变量)

  • 目的:文字→数值

  • (1)label专用
    目标:标签
    模块:LabelEncoder 中的LabelEncoder
    说明:要输入的是标签,不是特征矩阵,所以允许一维

  • (2)feature专用(有序变量)
    模块:sklearn.preprocessing中的OrdinalEncoder
    目标:有序的特征。可以是有序的,也可以是有距的。

  • (3)feature专用(名义变量)——哑变量
    模块:sklearn.preprocessing中的OneHotEncoder
    目标:名义变量,无序独立的变量

    说明:对于学历(小学,初中,高中,大学,研究生),成绩等级(优,良,中,差,不及格)这些特征,用(0,1,2,3,4,5)进行特征分类时可以的,因为他们本身有序或者具有距离,可以认为编号5的研究生学历比编号为0的小学学历高,有先后顺序。但是,对颜色这种特征,比如下图(红,绿,蓝),如果用(0,1,2)进行编号,则默认是有序或者有距的,事实上,他们之间是独立的关系,所以,就会用到第二张图的方式进行编码(用二进制进行编码),有多少类就取几位二进制数。
    在这里插入图片描述

2、连续(二值,分段)

  • (1)二值化
    模块:sklearn.preprocessing中的Binarizer
    思路:数据值大于阈值的值映射为1,而小于或等于阈值的值映射为0。
    注意:类为特征专用,所以不能使用一维数组

  • (2)分段
    模块:preprocessing中的KbinsDiscretizer
    思路:对数据进行分段
    注意:所有的特征一起操作,即所有的特征都被分为K份。

参考:

学堂在线:数据挖掘:理论与算法,清华大学,袁博老师

菜菜的scikit-learn课堂 ——sklearn中的数据预处理和特征工程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值