【好文翻译】【机器学习】机器学习中的特征工程(未完待续)

昨天看到的一篇好文章,翻译以作收藏。(人工翻译,非机翻,如有误请留言指出)

原文链接:https://towardsdatascience.com/feature-engineering-for-machine-learning-3a5e293a5114

原文作者:Emre Rençberoğlu

翻译:van_fantasy

0. 引言

什么是特征?为什么我们需要用工程化方法处理特征?基本上来说,所有机器学习算法都使用一些输入数据来得到输出,特征通常以列的形式存在于这些输入数据中,而算法需要特定的特征才能达到预期效果。所以,我们需要特征工程,我认为特征工程主要有两个目标:

  • 准备出符合机器学习算法需要的输入数据集。
  • 提升机器学习模型的性能。

特征的选取相较于其他步骤更能影响算法的结果。据我所知,没有哪一个单独的算法能填补特征选取的空白。 —— Luca Massaron

根据福布斯的调查,数据科学家将80%的时间花在了数据准备上:(图源

该调查结果足以显现特征工程在数据科学中的地位,所以我决定写下这篇文章。我的文章讲述了主要特征工程技术以及它们的简述。我也为每种技术准备了基本的python脚本,运行这些脚本需要pandas和numpy库:

import pandas as pd
import numpy as np

有些技术仅在某些算法或数据集上表现较好,而有些对所有的算法与数据集表现都不错。本文不会在这方面深挖,我会尽量简短翔实地介绍一些方法与技术。我认为提升特征工程能力的最好方法就是在不同的数据集上尝试不同的技术,并观察它们对模型性能的影响。

 

1. 数据填充

数据缺失是在准备机器学习数据集过程中遇到的最为普遍的问题之一,其原因可能是人工错误、数据流中断和隐私保护等。无论何种原因,缺失值会对机器学习模型性能产生影响。

一些机器学习平台会在训练模型的过程中自动删除含有缺失值的行,但这么做的同时也缩小了数据集,使得模型性能受到影响。同时,大部分算法并不会接受含有缺失值的数据集并对此报错。

处理缺失数据最简单的方法就是当某行或列的缺失值达到一定比例时删除改行或列。对于这个比例并没有最优阈值,但可以尝试设定为70%:

threshold = 0.7
#删除列
data = data[data.columns[data.isnull().mean() < threshold]]

#删除行
data = data.loc[data.isnull().mean(axis=1) < threshold]

1.1 数值填充

相较于删除数据,填充是一个更优的选择,因为它能维持数据集的大小,但填充何种数据是一个重要问题。我建议先考虑填入默认值。比如,某列中只含有和空缺值,那么空缺值可以设为;再比如某列的含义是“上个月访客人数”,那么缺失值可填充为

对于拼接不同大小的表格产生的缺失值,填充为会更为合理。

对于没有默认值的情况,我认为最好的办法是填充为该列的中位数。平均值会收到异常值的影响,而中位数不会。

#填充为0
data = data.fillna(0)
#填充为中位数
data = data.fillna(data.median())

1.2 类别填充

对于类别数据,可将缺失值填充为在该列出现次数最多的类别;如果该列中类别均匀分布,可将缺失值填充为“其他”,因为在这种情况下,填充的值会收敛于随机选择。

#填充为出现次数最多的类别
data['column_name'].fillna(data['column_name'].value_counts()
.idxmax(), inplace=True)

 

2. 异常值处理

在讲解异常值处理前,我想说明发现异常值的最好方法是数据可视化,任何其他统计学方法都会有错误,而数据可视化可以帮助精准地发现异常值。在本文中,还是使用统计学方法来进行异常值处理。

前面说过统计学方法准确率会低一些,但也同时具有速度上的大优势。在这里我会列举两种异常值处理方法指标,即标准差与百分位数。

2.1 基于标准差的异常值检测

如果一组数据中某个值与平均值的差超过了倍的标准差,那么该值可悲认为是异常值,那么是什么?

没有具体解,在实践中常常在之间取值。

factor = 3
upper_lim = data['column'].mean () + data['column'].std () * factor
lower_lim = data['column'].mean () - data['column'].std () * factor

data = data[(data['column'] < upper_lim) & (data['column'] > lower_lim)]

除了上述方法,Z分数(标准分数)也可以对异常进行表述。Z分数使用标准差将某值与平均值的距离标准化。

2.2 基于百分位数的异常值检测

百分位数法是另一个检测异常值的数学方法

评论

  1. 一念
    Windows Chrome 69.0.3947.100
    1月前
    2021-3-09 10:10:40

    博主你真的太宝藏了吧!何其有幸,江湖相逢!

  2. jyc
    Windows Chrome 91.0.4469.4
    1天前
    2021-4-18 17:03:29

    博主是一个可爱妹子吗,哈哈哈哈哈

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
隐藏
变装