机器学习中的特征变换技术

大多数机器学习算法都依赖于统计数据,这意味着所有算法都间接使用统计方法来解决数据中的复杂问题。在统计学中,数据的正态分布是统计学家所希望的。数据的正态分布有助于统计学家解决数据的复杂模式,并从中获得有价值的见解。但是对于算法场景,对于每种类型的数据集,不可能每次都期望数据的正态分布,这意味着在将机器学习算法应用于数据之前,需要对非正态分布的数据进行预处理和清洗。

在本文中,我们将讨论机器学习中的特征变换技术,这些技术用于将数据从一种形式变换为另一种形式,保持数据的本质。简而言之,变换是应用于非正态分布数据的函数类型,一旦应用,就有很高的正态分布数据。

有3种类型的特征变换技术:

  • 函数变换
  • 幂变换
  • 分位数变换

函数变换

函数变换是一种特征变换技术,它使用特定的函数将数据变换为正态分布。在这里,特定函数被应用于数据观测。

对于函数变换器的选择没有任何经验法则,函数可以由任何擅长数据领域知识的人设计,但大多数情况下有5种类型的函数变换,它们几乎每次都能解决正态分布的问题。

  1. 对数变换
  2. 平方变换
  3. 平方根变换
  4. 倒数变换
  5. 自定义变换

对数变换

对数变换的基本思想是将原始特征x变换为对数形式,即y=ln(x)。通过这种变换,可以改变数据的分布,使其更接近正态分布。对数变换在处理偏态分布的数据时特别有用,因为偏态分布的特征值可能非常小或非常大,导致机器学习算法难以处理。

通过实验,证明了对数变换对右偏数据有很好的效果。它可以很好地将右偏数据变换为正态分布数据。

from sklearn.preprocessing import FunctionTransformer 
transform = FunctionTransformer(func=np.log1p) 
transformed_data = transform.fit_transform(data) 

平方变换

平方变换是一种Transformer,其中考虑数据的平方而不是正常数据。简而言之,在此变换中,数据应用平方函数,其中每个单个观测的平方将被视为最终变换数据。

import numpy as np 
tranformed_data = np.square(data)

平方根变换

在该变换中,计算数据的平方根。这种变换在左偏数据上执行得很好,并且有效地将左偏数据变换为正态分布数据。

import numpy as np 
tranformed_data = np.sqrt(data)

倒数变换

在这种变换中,考虑了每个观测值的倒数。这种变换在某些数据集中很有用,因为观测值的倒数可以很好地实现正态分布。

import numpy as np 
tranformed_data = np.reciprocal(data) 

自定义变换

在每个数据集中,不能使用对数和平方根变换,因为每个数据都可能具有不同的模式和复杂性。根据数据的领域知识,可以应用自定义变换将数据变换为正态分布。这里的自定义变换可以是任何函数或参数,如sin、cos、tan、cube等。

importy numpy as np 
sin_tranformed_data = np.sin(data) 
cos_tranformed_data = np.cos(data) 
tan_tranformed_data = np.tan(data) 

幂变换

幂变换技术是一种特征变换技术,其中幂被应用于数据观测以变换数据。

有两种类型的变换技术:

  1. Box-Cox 变换
  2. Yeo-Johnson 变换

Box-Cox 变换

Box-Cox变换是Box和Cox在1964年提出的一种广义幂变换方法,是统计建模中常用的一种数据变换,用于连续的响应变量不满足正态分布的情况。Box-Cox变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。

Box-Cox变换的主要特点是引入一个参数λ,通过数据本身估计该参数进而确定应采取的数据变换形式。Box-Cox变换可以明显地改善数据的正态性、对称性和方差相等性,对许多实际数据都是行之有效的。

Box-Cox变换的一般形式为:y=T(x)=λx**(1/λ),其中T表示变换函数,x为原始连续因变量,y为经Box-Cox变换后得到的新变量,λ为变换参数。当λ=0时,变换为对数变换;当λ=1时,变换为平方根变换;当λ=-1时,变换为倒数变换。

from sklearn.preprocessing import PowerTransformer 
boxcox = PowerTransformer(method='box-cox') 
data_transformed = boxcox.fit_transform(data) 

Yeo-Johnson 变换

Yeo-Johnson变换是一种幂变换方法,可以用于处理数据分布不满足正态分布假设的情况。与Box-Cox变换相比,Yeo-Johnson变换具有更广泛的适用范围,可以处理包含0值和负值的数据样本。

Yeo-Johnson变换基于一组单调函数构建,能够减小随机变量的异方差性并放大其正态性,使概率密度函数的形态向正态分布靠近。该变换的特点在于其可被应用于包含0值和负值的样本中,因此被认为是Box-Cox变换在实数域的推广。

Yeo-Johnson变换作为数据标准化的方法之一,被广泛应用于数据挖掘和机器学习的数据预处理阶段。当随机变量正态性较差时,对其使用Yeo-Johnson变换进行预处理,有利于对该随机变量进行基于正态假设的统计分析。

from sklearn.preprocessing import PowerTransformer 
boxcox = PowerTransformer() 
data_transformed = boxcox.fit_transform(data)

分位数变换

分位数变换是一种基于特征单调变换的方法,通过将所有特征值映射到相同的分布,保持每个特征值的秩。分位数变换可以将数据从任意分布映射到接近正态分布的位置,平滑异常分布,并且比缩放方法受异常值的影响更小。

分位数变换的基本思想是将特征值映射到相同的分布,根据期望输出值分布G的分位数函数将所有特征置于相同的期望分布中。这种方法基于以下两个事实:如果X是具有连续累积分布函数F的随机变量,那么F(X)均匀分布在[0,1];如果U是在[0,1]上的随机分布,那么G-1(U)有分布G。通过执行秩变换,分位数变换平滑了异常分布,并且比缩放方法受异常值的影响更小。然而,分位数变换确实使特征间及特征内的关联和距离失真了。

幂变换则是一组参数变换,其目的是将数据从任意分布映射到尽可能接近正态分布的位置。幂变换可以改善数据的正态性、对称性和方差相等性,对许多实际数据都是行之有效的。

from sklearn.preprocessing import QuantileTransformer 
quantile_trans = QuantileTransformer(output_distribution='normal') 
data_transformed = quantile.fit_transform(data) 

关键要点

  • 为了提高算法的性能,采用特征变换技术将数据变换为正态分布。
  • 对数变换在右偏数据上的表现非常好。而平方根变换在左偏数据上表现得很好。
  • 基于问题陈述和数据的领域知识,还可以有效地应用自定义数据变换技术。
  • Box-Cox变换只能应用于返回-5至5之间的变换值的正数据观测。
  • Yeo-Johnson 变换技术也可以应用于零和负值。

结论

在本文中,我们讨论了一些著名的和最常用的数据变换技术,用于将数据从任何其他分布变换为正态分布。这将帮助人们容易地将数据预处理和清洗技术应用于复杂数据。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值