机器学习:处理缺失值方法总结
你好,我是你们的老朋友,zhenguo!
处理缺失值是在进行机器学习时非常重要的一个步骤。
缺失值会影响机器学习模型的准确度,因此在训练模型之前,通常需要先处理掉缺失值。
这篇文章,总结一些常见的缺失值处理方法。
常见处理方法
机器学习常见处理方法包括:
-
删除带有缺失值的行:这种方法适用于数据集中缺失值较少的情况。但是,如果删除的行数过多,会导致数据集的样本量过少,不利于模型的训练。
-
用平均值、中位数或众数来填补缺失值:这种方法适用于
数值型
的特征。例如,对于一个有缺失值的数值型特征,可以用这个特征的平均值来填补缺失值。 -
使用模型预测缺失值:对于缺失值较多的数据集,可以考虑先训练一个机器学习模型,然后用这个模型来预测缺失值。
-
使用热门值来填补缺失值:如果缺失值的特征有很多类别,可以考虑使用这个特征的热门值来填补缺失值。
-
使用近似值来填补缺失值:对于连续型的特征,可以使用与该特征最相似的其他特征的值来填补缺失值。
缺失值处理实战:处理方法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)
最后,缺失值填充要根据数据集的特点和需求,选择合适的方法来处理缺失值。
大家一起加油💪🏻!