多径效应的matlab仿真,特征工程大传对数变换
多径效应的matlab仿真,特征工程大传对数变换我们常说很多事物的自然分布近似于正态分布,但事实上还有一种更为广泛的分布,其表现为少量的个体做出大量的贡献(如下图所示),这就是长尾分布。2,重尾分布下图是对数函数在一个较大的定义域范围内所绘制出的函数图像,对数函数图像我们可以很明显地看出,当x数值较小时,y值变化较快,而随着x值不断变大,y值变化越发平缓,让我们先记下这个图像性质。
(欢迎各位关注,本专栏会对机器学习的特征工程中一些实用的处理方法进行介绍,该系列篇幅较短,力求阐述其核心并提供相应的实现方法。)
对数变换是一种常用的特征工程方法。一般对于数值大于0的重尾分布数据,我们都可以采取对数变换的方法来转换特征值,从而让特征具有更好的数值属性,进而增强模型的效果。那么如何理解对数变换?什么情况下对数变换会是一种有效的特征工程方法呢?让我们先从几个基本概念开始。
1,对数函数
既然要进行对数变换,那么就需要针对对数函数的性质有深刻的理解。
下图是对数函数在一个较大的定义域范围内所绘制出的函数图像,
对数函数图像
我们可以很明显地看出,当x数值较小时,y值变化较快,而随着x值不断变大,y值变化越发平缓,让我们先记下这个图像性质。
2,重尾分布
我们常说很多事物的自然分布近似于正态分布,但事实上还有一种更为广泛的分布,其表现为少量的个体做出大量的贡献(如下图所示),这就是长尾分布。
长尾分布
# Python 绘制长尾分布
# 长尾分布采样
a m = 3. 2. # shape and mode
s = (np.random.pareto(a 1000) 1) * m
# 绘制分布图
import matplotlib.pyplot as plt
count bins _ = plt.hist(s 100)
plt.show()
对于呈现长尾分布的特征,我们不能简单地去除长尾部分的特征值,这是因为这些长尾的尾部很长,在整个特征分布中占比其实也并不低,事实上具有很大的信息量,对模型来说很有价值。但如果直接就这么放入模型也不是合适的方法。如上图所示,尖尖的左侧加一个长长的尾巴,这意味着有大量的值在<2左右的这个极小的低值段区间内,分布明显有偏向,这会让以高斯分布为假设的模型难以学习到合理的参数,使得该特征为模型带来的效果大打折扣。
至此,问题已经明确,既然这种分布形式并不好,那么我们怎么来缓解它呢?答案就是,使用对数变换。
3,对数变换
我们根据前面发现的log函数所具有的性质,对特征值进行对数变换,使得较小值区间在转换后被扩展到一个变化较大的范围内(x数值较小时,y值变化较快),而长尾的大值区间被压缩到一个变化较小的范围内(随着x值不断变大,y值变化越发平缓),进而整体上减缓长尾分布这种极偏的分布状态,为低值端争取更多的空间,将高值端尽可能的压缩,使得整体分布更加合理。
对数转换后的长尾分布图
# log转换后的分布图
import matplotlib.pyplot as plt
count bins _ = plt.hist(np.log(s) 100)
plt.show()
4,结语
对数变换是一种十分常用的特征工程方法,当我们遇到类似分布的特征数据时,可以通过这种转换来让特征变得更加有效。此外它还具有以下优点:
- 缩小数据的绝对数值范围,让特征不再飘。
- 依据对数的运算法则,将乘法变换为加法,符合中心极限法则下收敛到正态分布的假设。
- 非线性转换为线性,让问题变得更好建模
如果你觉得我的文章有价值,请持续关注我,我会持续更新。