前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简介机器学习中的特征工程

简介机器学习中的特征工程

作者头像
deephub
发布2020-08-11 10:05:49
5050
发布2020-08-11 10:05:49
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA

要解决一个机器学习问题,我们不能仅仅通过将算法应用到提供的数据上。比如.fit() 。我们首先需要构建一个数据集。

将原始数据转换为数据集的任务称为特征工程。

例如,预测客户是否坚持订阅特定产品。这将有助于进一步提高产品或用户体验,还有助于业务增长。

原始数据将包含每个客户的详细信息,如位置、年龄、兴趣、在产品上花费的平均时间、客户续订订阅的次数。这些细节是数据集的特性。创建数据集的任务是从原始数据中了解有用的特性,并从对结果有影响的现有特性中创建新特性,或者操作这些特性,使它们可以用于建模或增强结果。整个过程被简称为特性工程。

有多种方法可以实现特征工程。根据数据和应用程序不同来分类。

在本文中,我们将了解为什么使用特征工程和特征工程的各种方法。

为什么使用特征工程?

特征工程出现在机器学习工作流程的最初阶段。特性工程是决定结果成败的最关键和决定性的因素。

特征工程在机器学习工作流程中的地位

许多Kaggle比赛都是通过基于问题创建适当的功能而获胜的。例如,在一场汽车转售比赛中,获胜者的解决方案包含一个分类特征——普通汽车的颜色,稀有汽车的颜色。这一特性增加了汽车转售的预测效果。既然我们已经理解了特性工程的重要性,现在让我们深入研究用于实现的各种标准方法。

现在让我们了解如何实现特性工程。以下是广泛使用的基本特征工程技术,

  • 编码
  • 分箱
  • 归一化
  • 标准化
  • 处理缺失值
  • 数据归责技术

编码

有些算法只处理数值特征。但是,我们可能有其他数据,比如在我们的例子中“用户观看的内容类型”。为了转换这种数据,我们使用编码。

One-Hot编码

将分类数据转换为列,并将每个惟一的类别作为列值,这是一种One-Hot编码。

下面是实现One-Hot编码的代码片段,

代码语言:javascript
复制
encoded_columns = pd.get_dummies(data['column'])
data = data.join(encoded_columns).drop('column', axis=1)

当分类特征具有不那么独特的类别时,这种方法被广泛使用。我们需要记住,当分类特征的独特类别增加时,维度也会增加。

标签编码

通过为每个类别分配一个唯一的整数值,将分类数据转换为数字,称为标签编码。

比如“喜剧”为0,“恐怖”为1,“浪漫”为2。但是,这样划分可能会使分类具有不必要的一般性。

当类别是有序的(特定的顺序)时,可以使用这种技术,比如3代表“优秀”,2代表“好”,1代表“坏”。在这种情况下,对类别进行排序是有用的。

下面是要实现标签编码器的代码片段。

代码语言:javascript
复制
from sklearn.preprocessing import ColumnTransformer
labelencoder = ColumnTransformer()
x[:, 0] = labelencoder.fit_transform(x[:, 0])

分箱

另一种相反的情况,在实践中很少出现,当我们有一个数字特征,但我们需要把它转换成分类特征。分箱(也称为bucketing)是将一个连续的特性转换成多个二进制特性的过程,通常基于数值。

将数值数据分成4、8、16个箱子

代码语言:javascript
复制
#Numerical Binning Example
Value      Bin      
0-30   ->  Low      
31-70  ->  Mid      
71-100 ->  High#Categorical Binning Example
Value      Bin      
Germany->  Europe      
Italy  ->  Europe      
India  ->  Asia
Japan  ->  Asia

分箱的主要目的是为了使模型更健壮,防止过拟合,但这对性能有一定的影响。每次我们丢弃信息,我们就会牺牲一些信息。

正则化

归一化(也称为最小最大归一化)是一种缩放技术,当应用它时,特征将被重新标定,使数据落在[0,1]的范围内。

特征的归一化形式可通过如下方法计算:

归一化的数学公式。

这里' x '是原始值而' x '是归一化值。

原始数据、归一化数据的散点图

在原始数据中,alcohol在[11,15],malic在[0,6]。归一化数据中,alcohol在[0,1]之间,malic在[0,1]之间。

标准化

标准化(也叫Z-score归一化)是一种缩放技术,当它被应用时,特征会被重新调整,使它们具有标准正态分布的特性,即均值为0,标准差为=1;其中,μ 为平均值(average),σ为与平均值的标准差。

计算样本的标准分数(也称z分数)如下:

标准化的数学公式

这将特征在[-1,1]之间进行缩放

原始数据、标准化数据的散点图

在原始数据中,alcohol在[11,15],malic在[0,6]。在标准化数据中,二者居中于0。

处理缺失值

数据集可能包含一些缺失的值。这可能是在输入数据的失误或出于保密方面的考虑。无论原因是什么,减少它对结果的影响是至关重要的。下面是处理缺失值的方法,

  • 简单地删除那些缺少值的数据点(当数据很大而缺少值的数据点较少时,这样做更可取)
  • 使用处理缺失值的算法(取决于实现该算法的库)
  • 使用数据注入技术(取决于应用程序和数据)

数据归责技术

数据填充就是简单地用一个不会影响结果的值替换缺失的值。

对于数值特征,缺失的值可以替换为:

  • 0或默认值
代码语言:javascript
复制
#Filling all missing values with 0
data = data.fillna(0)
  • 重复率最高的值
代码语言:javascript
复制
#Filling missing values with mode of the columns
data = data.fillna(data.mode())
  • 该特征的均值(受离群值影响,可以用特征的中值替换)
代码语言:javascript
复制
#Filling missing values with medians of the columns
data = data.fillna(data.median())

对于分类特征,缺失的值可以替换为:

  • 重复率最高的值
代码语言:javascript
复制
#Most repeated value function for categorical columns
data['column_name'].fillna(data['column_name'].value_counts()
.idxmax(), inplace=True)
  • “其他”或任何新命名的类别,这意味着对数据点的估算

在本文中,我们了解了广泛使用的基本特性工程技术。我们可以根据数据和应用程序创建新特性。但是,如果数据很小而且质量不好,这些方法可能就没有用了。

作者:Ramya Vidiyala

deephub翻译组:孟翔杰

DeepHub

微信号 : deephub-imba

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么使用特征工程?
  • 编码
    • One-Hot编码
      • 标签编码
      • 分箱
      • 正则化
      • 标准化
      • 处理缺失值
      • 数据归责技术
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档