你好,我是你们的老朋友,zhenguo!
处理缺失值是在进行机器学习时非常重要的一个步骤。
缺失值会影响机器学习模型的准确度,因此在训练模型之前,通常需要先处理掉缺失值。
这篇文章,总结一些常见的缺失值处理方法。

常见处理方法

机器学习常见处理方法包括:
  1. 删除带有缺失值的行:这种方法适用于数据集中缺失值较少的情况。但是,如果删除的行数过多,会导致数据集的样本量过少,不利于模型的训练。
  2. 用平均值、中位数或众数来填补缺失值:这种方法适用于数值型的特征。例如,对于一个有缺失值的数值型特征,可以用这个特征的平均值来填补缺失值。
  3. 使用模型预测缺失值:对于缺失值较多的数据集,可以考虑先训练一个机器学习模型,然后用这个模型来预测缺失值。
  4. 使用热门值来填补缺失值:如果缺失值的特征有很多类别,可以考虑使用这个特征的热门值来填补缺失值。
  5. 使用近似值来填补缺失值:对于连续型的特征,可以使用与该特征最相似的其他特征的值来填补缺失值。

缺失值处理实战:处理方法1和2

下面是使用 Python 中的 Pandas 库来处理缺失值的代码示例。
首先,我们导入所需的库:
import pandas as pd

然后,我们创建一个简单的数据集,其中包含一些缺失值:
data = {
'A'
: [1, 2, 3, 4, 5],

'B'
: [6, 7, 8, None, 10],

'C'
: [11, 12, 13, 14, 15],

'D'
: [16, 17, None, 19, 20]}

df = pd.DataFrame(data)

print
(df)

输出的数据集如下:
   A     B   C     D

0  1   6.0  11  16.0

1  2   7.0  12  17.0

2  3   8.0  13   NaN

3  4   NaN  14  19.0

4  5  10.0  15  20.0

接下来,我们可以使用 Pandas 库中的 dropna() 函数来删除带有缺失值的行:
df_without_missing_values = df.dropna()

print
(df_without_missing_values)

输出的结果如下:
   A     B   C     D

0  1   6.0  11  16.0

1  2   7.0  12  17.0

4  5  10.0  15  20.0

然后,我们可以使用 Pandas 库中的 fillna() 函数来用平均值填补缺失值:
mean_value = df[
'B'
].mean()

df[
'B'
] = df[
'B'
].fillna(mean_value)


mean_value = df[
'D'
].mean()

df[
'D'
] = df[
'D'
].fillna(mean_value)


print
(df)

输出的数据集如下:
   A      B   C     D

0  1   6.00  11  16.0

1  2   7.00  12  17.0

2  3   8.00  13  18.0

3  4   7.75  14  19.0

4  5  10.00  15  20.0

另外,我们还可以使用 Pandas 库中的 interpolate() 函数来用插值法填补缺失值:
df_interpolated = df.interpolate()

print
(df_interpolated)

缺失值处理实战:处理方法3(使用模型预测缺失值)

我们还可以使用机器学习算法来预测缺失值。下面是使用 Scikit-learn 库中的线性回归模型来预测缺失值的代码示例:
from sklearn.linear_model import LinearRegression


# 选择用来预测的特征
X = df[[
'A'
'C'
]]


# 选择要预测的目标特征
y = df[
'B'
]


# 将缺失值用平均值填补
mean_value = y.mean()

y = y.fillna(mean_value)


# 创建线性回归模型
reg = LinearRegression().fit(X, y)


# 预测缺失值
predictions = reg.predict(X)


# 将预测结果填入数据集
df[
'B'
] = predictions

print
(df)

B列填充后,输出的结果如下:
   A          B   C     D

0  1   6.666667  11  16.0

1  2   7.333333  12  17.0

2  3   8.000000  13   NaN

3  4   8.666667  14  19.0

4  5  10.000000  15  20.0

还可以使用分类和回归树 (CART) 算法来预测缺失值。下面是使用 Scikit-learn 库中的决策树模型来预测缺失值的代码示例:
from sklearn.tree import DecisionTreeRegressor


# 创建决策树模型
reg = DecisionTreeRegressor().fit(X, y)


# 预测缺失值
predictions = reg.predict(X)


# 将预测结果填入数据集
df[
'B'
] = predictions

print
(df)

最后,缺失值填充要根据数据集的特点和需求,选择合适的方法来处理缺失值。
大家一起加油💪🏻!
继续阅读
阅读原文