介绍
机器学习中的缺失数据是一种包含“None”或“NaN”类型值的数据。在处理机器学习算法和训练时,应该注意丢失的数据。
可以使用基本的 python 编程、pandas 库和一个名为 SimpleImputer 的 sci-kit 学习库来填充缺失的数据。使用 sci-kit 学习库 SimpleImputer 处理缺失值是所有其他缺失数据处理方法中最简单、最方便的方法。
简单来说,SimpleImputer 是一个用于填充数据集中缺失值的 sci-kit 库。顾名思义,该类对数据集执行简单的插补,并根据给定的策略将缺失的数据替换为另一个值。
SimpleImputer 初始化的基本语法或结构是:
SimpleImputer(*, missing_values=nan, strategy='mean', fill_value=None, verbose=0, copy=True, add_indicator=False)
SimpleImputer 的参数
missing_values:表示数据集中的缺失值。默认情况下,np.nan 设置在 missing_values 中,这意味着所有包含 np.nan 的值都将被视为缺失值。
strategy:这是我们要用来填充缺失值的方法。策略的值可以是“mean”、“median”、“most_frequent”或“constant”。
fill_value:该参数仅在策略设置为常量时使用。当策略不变时,Nan 值将替换为 fill_value 中传递的值。
verbose:它是用于控制 SimpleImputer 详细程度的参数。默认情况下,verbose 的值设置为 0。
copy:如果此参数设置为 True,则将创建数据集的副本,否则将在不复制的情况下进行插补。
add_indicator:如果此参数设置为 True,则 MissingIndicator 转换将叠加到 imputer 转换的输出上。
使用 SimpleImputer 处理丢失的数
要开始使用 SimpleImputer 库,首先,我们必须安装并从 sci-kit learn 中导入该库。
要从 sci-kit learn 安装库,请使用以下代码:
pip install scikit-learn
将库安装到机器中后,应将其导入你正在使用的 Python IDE。使用以下代码导入库:
# importing sklearn
import sklearn
# importing simpleimputer
from sklearn.impute import SimpleImputer
执行“Mean”插补
使用 SimpleImputer 中的“Mean”策略允许我们通过特定数据集的均值来估算缺失值。此策略只能用于数值数据集。
假设我们的数据集中有一个名为“Age”的数字列,其中缺少一些值。
然后使用平均策略将允许我们用所有年龄值的平均值填充列中的缺失值。
代码:
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(df['age'])
df['age']= imputer.fit_transform(df['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”插补
使用 SimpleImputer 中的“Median”策略允许我们通过特定数据集的中值来估算缺失值。此策略只能用于数值数据集。
假设我们的数据集中有一个列年龄,其中有一个缺失值。使用策略中位数将允许我们用列年龄的值的中位数填充缺失值。
代码:
imputer = SimpleImputer(missing_values=np.nan, strategy='median')
imputer.fit(df['age'])
df['age']= imputer.fit_transform(df['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”插补
最常见的插补是一种用于处理分类缺失数据的技术。当我们在分类列中有缺失值时使用此技术。
在特定的分类列上使用 Most_frequent 插补技术将允许我们填充缺失值,使用来自数据集中出现的列中最频繁的值进行插补。
代码:
imputer = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
imputer.fit(df['category'])
df['category']= imputer.fit_transform(df['category'])
例子:
imp_mf = SimpleImputer(missing_values=np.nan, strategy='median')
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”插补
Constant 插补是简单插补中的一种技术,我们可以使用我们想要的任何所需值来填充缺失值。这可以用于字符串和数字数据集。
将所需的值传递给 fill_value 参数,我们可以通过 fill_value 参数中传递的值来填充数据集中存在的所有缺失值。
代码:
imputer = SimpleImputer(missing_values=np.nan, strategy='constant',fill_value=20)
imputer.fit(df['age'])
df['age']= imputer.fit_transform(df['age'])
例子:
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.]]
结论
在本文中,将详细讨论使用类SimpleImputer处理缺失数据。共有4种策略可以用来填充缺失值:mean median、most_frequent和constant,在上面的代码示例中进行了讨论。
本文的一些关键要点是:
- 在使用有意义的策略时,我们应该考虑异常值场景,因为异常值会影响估算的数据,并可能导致模型不太准确,出现意外行为(避免在异常值的情况下使用平均策略)。
- Mean 和 Median 是一种只能用在数值数据上的策略,最常用的策略只能用在分类数据上。它们是最简单和较低的计算方法之一。
- 当我们对数据集有了更好的理解,并且我们已经知道通过所需的数字或字符串来插补缺失值的影响时,可以使用常量策略。它可以用于字符串和数字数据。