数据特征

数据特征

  • 前言
  • 一、离散化
    • 1. 离散化的原因
    • 2. 离散化的优势
  • 二、归一化
    • 1. 线性函数归一化
    • 2. 零均值归一化
    • 3. 归一化的优势
  • 补充

前言

  • 特征工程是通过对原始数据的处理和加工,将原始数据属性通过处理转换为数据特征的过程,属性是数据本身具有的维度,特征是数据中所呈现出来的某一种重要的特性,通常是通过属性的计算,组合或转换得到的。比如主成分分析就是将大量的数据属性转换为少数几个特征的过程。某种程度而言,好的数据以及特征往往是一个性能优秀模型的基础。

一、离散化

1. 离散化的原因

  • 数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。数据离散化的原因主要有以下几点:
    1、算法需要
    比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。
    2、离散化的特征相对于连续型特征更易理解,更接近知识层面的表达:比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。
    3、可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定

2. 离散化的优势

  • 离散特征的增加和减少都很容易,易于模型的快速迭代;

  • 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

  • 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;

  • 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;

  • 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;

  • 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;

  • 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

二、归一化

对数值类型的特征做归一化可以将所有的特征都统一到一个大致相同的数值区间内。最常用的方法主要有以下两种:

1. 线性函数归一化

线性函数归一化(Min-Max Scaling)它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。归一化公式如下:
X n o r m = X − X m i n X m a x − X m i n X_{norm}=\frac {X-X_{min}}{X_{max}-X_{min}} Xnorm=XmaxXminXXmin
其中X为原始数据,Xmax、Xmin分别为数据最大值和最小值。

2. 零均值归一化

零均值归一化(Z-Score Normalization)它会将原始数据映射到均值为0、标准差为1的分布上。具体来说,假设原始特征的均值为μ、标准差为σ,那么归一化公式定义为:
z = x − μ б z=\frac {x-μ}{б} z=бxμ

3. 归一化的优势

  • 其一是提升模型训练速度:
    比如就两个特征,一个特征取值为0~2000,而另一个特征取值为1-5,对其进行优化时,会得到一个长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代慢。相比之下,做过鬼优化的迭代就会很快。
  • 其二,提升模型的精度。
    在涉及到一些距离计算的算法时效果显著,比如算法要计算欧式距离。做归一化很有必要,可以让各个特征对结果做出的贡献相同。

补充

  • 关于Pandas中的cut和qcut的用法:
pd.qcut(factors, 5).value_counts()

[-2.578, -0.829]    6
(-0.829, -0.36]     6
(-0.36, 0.366]      6
(0.366, 0.868]      6
(0.868, 2.617]      6
pd.cut(factors, 5).value_counts()

(-2.583, -1.539]    5
(-1.539, -0.5]      5
(-0.5, 0.539]       9
(0.539, 1.578]      9
(1.578, 2.617]      2

从上面的代码可以看出cut将根据值本身来选择箱子均匀间隔,qcut是根据这些值的频率来选择箱子的均匀间隔。

你可能感兴趣的:(数据特征)