特征工程入门:应该保留和去掉那些特征

2020-08-31 16:28:48 浏览数 (1)

在特征/列上执行的任何能够帮助我们根据数据进行预测的操作都可以称为特征工程。这将包括以下内容:

添加新功能去掉一些讲述同样内容的特征将几个特性结合在一起将一个特性分解为多个特性

添加新特征

假设您想预测冰淇淋、手套或伞的销售。这些东西有什么共同之处?这些商品的销售取决于“天气”和“地点”。冰淇淋在夏天或更热的地方卖得更多,手套在天气更冷(冬天)或更冷的地方卖得更多,当下雨的时候我们肯定需要一把雨伞。因此,如果您拥有所有这些产品的历史销售数据,那么在每个数据级别上添加天气和销售区域将有助于您的模型更深入地了解这些模式。

去掉一些讲述同样内容的特征

为了解释,我制作了一个样本数据集,它包含了不同手机品牌的数据,如下图所示。让我们分析这些数据,并找出为什么我们应该删除/消除一些列-

现在在这个数据集中,如果我们仔细看,有一列是品牌名称,一列是型号名称,还有一列是手机(它基本上包含了品牌和型号名称)。因此,如果我们看到这种情况,我们不需要列Phone,因为这一列中的数据已经出现在其他列中,并且在这种情况下,分割数据比聚合数据更好。

还有另一列没有向“数据集-内存”规模添加任何值。所有的内存值都是以“GB”为单位的,因此没有必要保留一个不能显示数据集中任何变化的附加列,因为它不会帮助我们的模型学习不同的模式。

结合几个特性来创建新特性

这意味着我们可以使用2-3个特征或者行,然后创建一个新的特征来更好地解释数据。例如,在上面的数据集中,我们可以创建的一些特征可以是-计数的手机在每个品牌,每个手机在各自品牌的%份额,计数的手机在不同的内存大小,每单位内存的价格,等等。这将帮助模型在细粒度级别上理解数据。

将一个特性分解为多个特性

这个片段中最常见的例子是日期和地址。一个日期主要由年、月、日组成,比如以“07/28/2019”的形式。如果我们将日期列分解成2019年,7或7月28日,它会帮助我们加入各种其他表的表在一个更简单的方法,也会容易操作数据,因为现在而不是日期格式,我们必须处理数字容易得多。

为了同样方便的数据操作和数据连接,我们将地址数据(721 Main St., Apt 24, Dallas, TX-75432)分解为-街道名称(721 Main St.)、公寓号码/门牌号(Apt 24)、城市(Dallas)、州(TX/Texas)、邮政编码(75432)。

特征工程的常用方法

现在我们知道了什么是特征工程,让我们来看看我们可以通过哪些技术来进行特征工程。特性工程有各种各样的方法,但我将讨论一些最常见的技术和实践,我在我的常规问题中使用。

时滞——这意味着为以前的时间戳记录创建列(销售前一天、销售后一个月等等,基于用例)。这个功能可以帮助我们了解,例如,iPhone 1天前的销量是多少,2天前的销量是多少等等。这一点很重要,因为大多数机器学习算法都是逐行查看数据的,除非我们在同一行中没有前几天的记录,否则模型将无法有效地在当前和以前的日期记录之间创建模式。

类别的统计——这可以是任何简单的事情,比如统计每个品牌的手机数量,统计购买iPhone 11pro的人数,统计购买三星Galaxy和iPhone的不同年龄段的人数。

总和/平均值/中位数/累积总和/总和-任何数字特征,如工资,销售额,利润,年龄,体重,等等。

分类转换技术(替换值、单热编码、标签编码等)——这些技术用于将分类特性转换为各自的数字编码值,因为有些算法(如xgboost)不能识别分类特性。正确的技术取决于每列中的类别数量、分类列的数量等等。

标准化/标准化技术(最小-最大,标准缩放,等等)-可能有一些数据集,你有数字特征,但它们以不同的比例(kg, $, inch, sq.ft等)。因此,对于一些像聚类这样的机器学习方法来说,我们必须在一个尺度上拥有所有的数字(我们将在以后的博客中讨论更多关于聚类的内容,但是现在我们把它理解为基于相似性在空间中创建数据点的组)。

这些是创建新特性的一些非常普遍的方法,但是大多数特性工程很大程度上依赖于对图片中的数据集进行头脑风暴。例如,如果我们有员工的数据集,和如果我们有一般事务的数据集,特征工程将以不同的方式进行。

我们可以使用各种panda函数手动创建这些列。除此之外,还有一个名为FeatureTools的包,可以通过结合不同级别的数据集来创建新的列。

一旦我们对数据进行了预处理,我们就需要开始研究不同的ML技术来说明问题。我们将在接下来的文章中讨论这些。希望你们都发现这个文章有趣和有用!:)

作者:Kriti Srivastava

deephub翻译组

0 人点赞