机器学习:处理缺失值方法总结

Python与算法社区

共 2743字,需浏览 6分钟

 ·

2023-05-07 19:15

你好,我是你们的老朋友,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)

最后,缺失值填充要根据数据集的特点和需求,选择合适的方法来处理缺失值。

大家一起加油💪🏻!


浏览 30
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报