在机器学习项目中,数据集经常包含“None”或“NaN”类型的缺失值。在处理机器学习算法和训练时,必须小心处理这些缺失数据。缺失值可以通过基础的Python编程、pandas库和名为SimpleImputer的scikit-learn库来填充。使用scikit-learn库中的SimpleImputer处理缺失值是最简单和最方便的方法之一。
简而言之,SimpleImputer是一个用于填充数据集中缺失值的scikit库。正如其名,该类对数据集执行简单的插补,并根据给定的策略用另一个值替换缺失数据。
SimpleImputer初始化的基本语法或结构如下:
SimpleImputer(
missing_values=np.nan,
strategy='mean',
fill_value=None,
verbose=0,
copy=True,
add_indicator=False
)
SimpleImputer参数说明:
要开始使用SimpleImputer库,首先必须安装并从scikit-learn导入该库。
# 安装scikit-learn库
pip install scikit-learn
# 导入sklearn
import sklearn
# 导入simpleimputer
from sklearn.impute import SimpleImputer
使用“Mean”插补策略,允许通过数据集的平均值来插补缺失值。这种策略只能用于数值型数据集。
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(df['age'])
df['age'] = imputer.fit_transform(df['age'])
例如,假设数据集中有一个名为“Age”的数值列,其中一些值缺失。使用均值策略将允许通过所有年龄值的平均值来填充该列中的缺失值。
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
imp_mean.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])
age = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
print(imp_mean.transform(age))
上述代码的输出将是:
[[ 7. 2. 3. ]
[ 4. 3.5 6. ]
[10. 3.5 9. ]]
在使用均值策略插补时,应考虑异常值的情况,因为均值策略计算值的平均值并用计算出的平均值填充缺失值,但在异常值的情况下,由于异常值的影响,平均值可能会偏向一侧并产生偏差,导致不准确的平均值插补。
使用“Median”插补策略,允许通过数据集的中位数来插补缺失值。这种策略只能用于数值型数据集。
imputer = SimpleImputer(missing_values=np.nan, strategy='median')
imputer.fit(df['age'])
df['age'] = imputer.fit_transform(df['age'])
例如,假设数据集中有一个名为“Age”的列,其中有一个缺失值。使用中位数策略将允许通过该列年龄的中位数来填充缺失值。
imp_median = SimpleImputer(missing_values=np.nan, strategy='median')
imp_median.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])
age = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
print(imp_median.transform(age))
上述代码的输出将是:
[[ 7. 2. 3. ]
[ 4. 3.5 6. ]
[10. 3.5 9. ]]
“Most_frequent”插补是一种用于处理分类缺失数据的技术。这种技术用于有分类列中的缺失值时。
imputer = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
imputer.fit(df['category'])
df['category'] = imputer.fit_transform(df['category'])
例如,假设有一个分类列“Category”,其中包含缺失值。使用最常见的插补技术将允许通过数据集中该列最常见的值来填充缺失值。
imp_mf = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
imp_mf.fit([['one', 'two', 'three'], ['four', np.nan, 'six'], ['two', 'five', 'two']])
category = [[np.nan, 'two', 'two'], ['four', np.nan, 'six'], ['ten', np.nan, 'nine']]
print(imp_mf.transform(category))
上述代码的输出将是:
[['two' 'two' 'two']
['four' 'two' 'six']
['ten' 'two' 'nine']]
“Constant”插补是一种在SimpleImputer中使用的技术,通过它可以将缺失值填充为想要的任何值。这可以用于字符串和数值数据集。
imputer = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=20)
imputer.fit(df['age'])
df['age'] = imputer.fit_transform(df['age'])
例如,假设想要将所有缺失值填充为20。通过将期望的值传递给fill_value参数,可以用fill_value参数中传递的值填充数据集中的所有缺失值。
imp_constant = SimpleImputer(missing_values=np.nan, strategy='constant', fill_value=20)
imp_constant.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])
age = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
print(imp_constant.transform(age))
上述代码的输出将是:
[[20. 2. 3. ]
[ 4. 20. 6. ]
[10. 20. 9. ]]