检测和删除异常值的另一种方法是使用标准差。
factor = 2
upper_lim = data['culmen_length_mm'].mean () data['culmen_length_mm'].std () * factor
lower_lim = data['culmen_length_mm'].mean () - data['culmen_length_mm'].std () * factor
no_outliers = data[(data['culmen_length_mm'] < upper_lim) & (data['culmen_length_mm'] > lower_lim)]
no_outliers
请注意,现在此操作后我们只剩下 100 个样本。在这里,我们需要定义乘以标准偏差的因子。通常,我们为此目的使用介于 2 和 4 之间的值。
最后,我们可以使用一种方法来检测异常值,即使用百分位数。我们可以假设顶部或底部的值的一定百分比为异常值。同样,我们用作异常值边界的百分位数的值取决于数据的分布。以下是我们可以在PalmerPenguins数据集上做的事情:
upper_lim = data['culmen_length_mm'].quantile(.95)
lower_lim = data['culmen_length_mm'].quantile(.05)
no_outliers = data[(data['culmen_length_mm'] < upper_lim) & (data['culmen_length_mm'] > lower_lim)]
no_outliers
完成此操作后,数据集中有 305 个样本。使用这种方法,我们需要非常小心,因为它减小了数据集的大小,并且高度依赖于数据分布。
4. 分档分箱是一种简单的技术,可将不同的值分组到分箱中。例如,当我们想要对看起来像这样的数值特征进行分箱时:
- 0-10 – 低
- 10-50 – 中等
- 50-100 – 高
在这种特殊情况下,我们将数值特征替换为分类特征。
但是,我们也可以对分类值进行分箱。例如,我们可以按其所在的大陆对国家/地区进行分箱:
- 塞尔维亚 – 欧洲
- 德国 – 欧洲
- 日本 – 亚洲
- 中国 – 亚洲
- 美国 – 北美
- 加拿大 – 北美
分箱的问题在于它可以降低性能,但它可以防止过度拟合并提高机器学习模型的鲁棒性。以下是代码中的外观:
bin_data = data[['culmen_length_mm']]
bin_data['culmen_length_bin'] = pd.cut(data['culmen_length_mm'], bins=[0, 40, 50, 100], \
labels=["Low", "Mid", "High"])
bin_data