机器学习中的数据处理技巧
一、Pandas处理丢失数据
(一)判断缺失值
isnull()函数:用于判断数据框(DataFrame)中各个单元格是否为空,可帮助我们识别出存在缺失数据的单元格位置。
(二)处理缺失值的方法
删除包含空字段的行
dropna()函数
语法格式:
DataFrame.dropna(axis = 0, how = 'any', thresh = None, subset = None, inplace = False)
。作用:通过该函数可以删除包含空字段(缺失值)的行,可根据具体需求设置参数,如
axis
指定删除行还是列(0为行,1为列),how
决定删除规则(如'any'
表示只要存在缺失值就删除该行/列,'all'
表示该行/列全部为缺失值才删除等),thresh
可设置保留行/列所需的最少非缺失值数量等。
填充空字段
fillna()函数:用指定内容来替换数据框中的空字段,可根据实际情况选择合适的填充值,如固定数值、均值、中位数等。
mean()函数:计算列的均值,常可将该均值作为填充值,用于替换对应列中的空单元格,使数据在数值上保持一定的统计特性。
median()函数:计算列的中位数,同样可作为填充空单元格的合适值,尤其适用于数据存在偏态分布等情况,能避免极端值对填充结果的影响。
二、缺失值处理(Impute.SimpleImputer()相关)
(一)使用均值填补
通过
Impute.SimpleImputer()
相关功能,可采用数据列的均值来填补缺失值,在数据整体分布相对较为均衡、无明显偏态且缺失值不是集中在某一特殊群体等情况下,使用均值填补能在一定程度上维持数据的整体统计特征,使后续分析或建模不受缺失值的过多干扰。
(二)使用中位数填补
利用
Impute.SimpleImputer()
以数据列的中位数进行缺失值填补,当数据存在一定偏态分布或者有少数极端值时,中位数相较于均值受极端值影响更小,用其填补缺失值可使填补后的数据更能代表数据的中间水平,保证数据在后续处理过程中的稳定性和可靠性。
(三)使用常数填补
借助
Impute.SimpleImputer()
,能够选择一个特定的常数来填充缺失值,这个常数可以根据业务背景、数据含义等来灵活确定,比如对于某些表示状态或分类相关的变量,若缺失值有其特定的默认状态含义,就可以用对应的常数进行填补。
(四)使用众数填补
通过
Impute.SimpleImputer()
采用数据列的众数(即出现频率最高的数值)来填补缺失值,对于一些离散型变量或者具有明显集中趋势的变量,众数能很好地反映数据的常见取值情况,用众数填补缺失值可以让数据在填补后更符合数据原本的集中特征,有助于后续分析的准确性。
三、数据标准化
(一)标准化定义及原因
标准化定义:对数据进行标准化处理,主要是为了消除不同特征之间因量纲、数量级等差异而可能对数据分析、模型训练等造成的不良影响,使各个特征处于同一尺度下,提升模型性能以及数据分析结果的可靠性。
原因:不同特征可能具有不同的单位(如身高用厘米、体重用千克)、不同的取值范围(如年龄范围是0 - 100,收入范围可能是几万到上百万)等,如果不进行标准化,这些差异可能会导致在模型训练过程中某些特征对结果的影响过大,而标准化后能让各个特征公平地参与到后续的分析和建模过程中。
(二)无量纲化相关概念
无量纲化定义:将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,称为将数据“无量纲化”,其目的是让数据在统一的标准下进行分析和处理。
无量纲化类型
线性无量纲化:包括中心化处理和缩放处理。
中心化本质:让所有记录减去一个固定值,也就是让数据样本数据平移到某个位置,通常是将数据的均值作为这个固定值,使得处理后的数据均值为0,便于后续分析和比较。
缩放本质:通过除以一个固定值,将数据固定在某个范围之中,比如常见的将数据缩放到0 - 1范围等,取对数也算是一种缩放处理,可对数据的分布形态进行调整,使其更符合后续处理要求。
(三)具体的标准化方法
preprocessing.MinMaxScaler()(最大最小值标准化)
该方法通过对数据进行线性变换,将数据缩放到指定的范围(通常是0 - 1范围),其计算方式是先找出数据列中的最小值和最大值,然后根据公式将每个数据点映射到指定区间内,使得数据在不同特征之间具有可比性,常用于需要将数据限制在特定范围的情况,比如神经网络等模型的输入数据要求。
preprocessing.StandardScaler()(Z值数据标准化)
该方法也称为Z - score标准化,它会将数据转换为均值为0、标准差为1的标准正态分布,计算时是先求出数据列的均值和标准差,然后根据公式对每个数据点进行转换,使得数据在各个特征维度上具有相同的均值和方差,这种标准化方式在很多机器学习算法中广泛应用,尤其是那些对数据的分布形态较为敏感的算法。
四、特征编码
(一)特征类型介绍
名义变量
数值之间相互独立,彼此没有联系,例如性别(男、女),这些不同的取值只是类别标识,不存在大小、顺序关系,不能进行常规的数学计算。
有序变量
数值之间有顺序,但不能进行计算,比如学历(小学、初中、高中),虽然有从低到高的顺序关系,但不同学历之间的差值等数学运算没有实际意义。
有距变量
数值之间有联系且可以计算,例如分数(100、90、60),这些数值之间不仅可以比较大小,还能进行诸如求差值、平均值等数学运算,反映了数据在数值上的实际关联和可度量性。
(二)特征编码方法
独热编码(OneHotEncoder)
主要用于处理名义变量等类型的数据,它将每个类别转换为一个独立的二进制特征(0或1),从而将类别型数据转换为适合机器学习模型处理的形式,避免了模型将类别数值误当作具有数学意义的数值进行处理,保证了模型对这类数据的正确理解和处理。
序号编码
针对有序变量,按照其顺序关系为每个类别赋予一个序号,使得数据在保留顺序信息的同时,能够以数值形式参与到后续的分析和建模中,序号的赋予要遵循其原本的顺序逻辑,以便模型能正确捕捉到这种顺序关系。
目标标签编码
通常用于将目标变量(标签)进行编码,将其转换为适合模型训练和评估的数值形式,根据目标变量的具体类型(如分类目标变量等)和模型要求,选择合适的编码方式,以便模型能够准确地对目标进行学习和预测。
数据二值化
根据数值是否大于某个阈值,将数据分为两类0或1,这种编码方式常用于将连续型数据或具有一定取值范围的数据转换为简单的二分类形式,便于在一些只关注数据是否超过特定界限等场景下进行后续分析和建模,比如判断某个指标是否达标等情况。
五、课堂总结
本次内容主要围绕机器学习中的数据处理展开,涵盖了使用Pandas处理数据缺失值(判断、删除、填充等),利用Impute.SimpleImputer()进行多种方式的缺失值填补,阐述数据标准化(包括定义、原因、无量纲化概念及具体的最大最小值标准化、Z值数据标准化等方法),介绍特征编码(不同特征类型及对应的独热编码、序号编码、目标标签编码、数据二值化等编码方法),这些数据处理技巧是机器学习流程中至关重要的前期准备工作,能为后续的模型训练、分析和预测提供高质量、可靠的数据基础,帮助提升整个机器学习项目的效果和准确性。