- 填补缺失值
- 均值/中位数/众数填补
- 数值型特征:如果特征是数值型的,可以使用均值或中位数来填补缺失值。例如,对于一个名为
feature_num
的数值特征,使用pandas
库计算均值并填补缺失值的代码如下:import pandas as pd df['feature_num'].fillna(df['feature_num'].mean(), inplace = True)
- 中位数填补的代码类似,将
mean
替换为median
即可。
- 中位数填补的代码类似,将
- 分类型特征:对于分类型特征,可以使用众数(出现频率最高的类别)来填补缺失值。假设特征
feature_cat
是分类型的,代码如下:df['feature_cat'].fillna(df['feature_cat'].mode()[0], inplace = True)
- 数值型特征:如果特征是数值型的,可以使用均值或中位数来填补缺失值。例如,对于一个名为
- 使用模型预测填补
- 构建预测模型:可以使用其他完整的特征来构建一个预测模型,用于预测缺失的特征值。例如,使用线性回归模型来预测数值型缺失特征,或者使用分类模型(如决策树、逻辑回归)来预测分类型缺失特征。
- 步骤示例(以数值型特征为例):
- 首先,将有缺失值的特征列设为目标变量
y
,其他完整的特征作为自变量X
。假设数据存储在DataFrame
df
中,特征名为missing_feature
:from sklearn.model_selection import train_test_split X = df.drop('missing_feature', axis = 1) y = df['missing_feature'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
- 然后,训练一个合适的模型(这里以线性回归为例):
from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train)
- 最后,使用模型预测缺失值并填补:
y_pred = model.predict(X) df['missing_feature'].fillna(pd.Series(y_pred), inplace = True)
- 首先,将有缺失值的特征列设为目标变量
- 均值/中位数/众数填补
- 将缺失值作为一种特殊类别或状态处理(适用于分类型特征)
- 创建新类别:对于分类型特征,可以将缺失值视为一个新的类别。例如,一个表示客户职业的特征,其中缺失值较多,将缺失值作为一个新的类别“未知职业”。在
pandas
中可以这样操作:df['customer_occupation'].fillna('未知职业', inplace = True)
- 创建新类别:对于分类型特征,可以将缺失值视为一个新的类别。例如,一个表示客户职业的特征,其中缺失值较多,将缺失值作为一个新的类别“未知职业”。在
- 利用多重填补(Multiple Imputation)方法
- 原理:多重填补是一种处理缺失数据的统计方法,它通过创建多个完整数据集来反映缺失数据的不确定性。每个完整数据集是通过对缺失数据进行合理的填补得到的。
- 使用示例(以
mice
库为例):- 安装
mice
库后,对于一个数据框df
中的缺失数据,可以这样处理:import mice imputed_data = mice.impute(data = df, method = 'pmm') df_imputed = pd.DataFrame(imputed_data)
- 这里
method = 'pmm'
表示使用预测均值匹配(Predictive Mean Matching)方法进行填补,mice
库还有其他填补方法可供选择,如cart
(分类与回归树)等。
- 这里
- 安装
- 基于特征工程的处理方法
- 特征组合或转换:如果缺失率较高的特征与其他特征存在某种关联,可以考虑将它们组合成新的特征。例如,将缺失值特征与其他相关特征相乘或相加,创建一个新的复合特征。或者对特征进行转换,如对数变换、标准化等,可能会使缺失值在新的特征空间中有更好的表现。
- 特征重要性评估与权重调整:在模型训练过程中,考虑缺失值特征的重要性。如果该特征相对不太重要,可以适当降低其在模型中的权重;如果它对模型仍然有一定的价值,可以通过特征选择方法(如递归特征消除、基于树的特征重要性评估等)来确定其合适的权重。