数据取对数运算的意义

转载 2015年07月08日 00:43:05

平时在一些数据处理中,经常会把原始数据取对数后进一步处理。

之所以这样做是基于对数函数在其定义域内是单调增函数,取对数后不会改变数据的相对关系,取对数作用主要有:

1. 缩小数据的绝对数值,方便计算。

例如,每个数据项的值都很大,许多这样的值进行计算可能对超过常用数据类型的取值范围,这时取对数,就把数值缩小了,例如TF-IDF计算时,由于在大规模语料库中,很多词的频率是非常大的数字。

 

2. 取对数后,可以将乘法计算转换称加法计算。

 

3. 某些情况下,在数据的整个值域中的在不同区间的差异带来的影响不同。例如,中文分词的mmseg算法,计算语素自由度时候就取了对数,这是因为,如果某两个字的频率分别都是500,频率和为1000,另外两个字的频率分别为200和800,如果单纯比较频率和都是相等的,但是取对数后,log500=2.69897, log200=2.30103, log800=2.90308 这时候前者为2log500=5.39794, 后者为log200+log800=5.20411,这时前者的和更大,取前者。因为前面两个词频率都是500,可见都比较常见。后面有个词频是200,说明不太常见,所以选择前者。

从log函数的图像可以看到,自变量x的值越小,函数值y的变化越快,还是前面的例子,同样是相差了300,但log500-log200>log800-log500,因为前面一对的比后面一对更小。

也就是说,对数值小的部分差异的敏感程度比数值大的部分的差异敏感程度更高。这也是符合生活常识的,例如对于价格,买个家电,如果价格相差几百元能够很大程度影响你决策,但是你买汽车时相差几百元你会忽略不计了。

 

4. 取对数之后不会改变数据的性质和相关关系,但压缩了变量的尺度,例如800/200=4, 但log800/log200=1.2616,数据更加平稳,也消弱了模型的共线性、异方差性等。

5. 且所得到的数据易消除异方差问题。

6. 在经济学中,常取自然对数再做回归,这时回归方程为 lnY=a lnX+b ,两边同时对X求导,1/Y*(DY/DX)=a*1/X, b=(DY/DX)*(X/Y)=(DY*X)/(DX*Y)=(DY/Y)/(DX/X) 这正好是弹性的定义。

 

当然,如果数据集中有负数当然就不能取对数了。实践中,取对数的一般是水平量,而不是比例数据,例如变化率等。

对数似然比相似度

最近在看mahout的相似性度量时,对其中的对数似然比相似度颇为好奇,由于书本上完全没有涉及到对数似然比相似度的计算原理,只是提供了一个函数接口,因此决定深入了解一下这个对数似然比相似度。下面maho...
  • u014374284
  • u014374284
  • 2015年11月13日 22:50
  • 4445

Python中用于计算对数的log()方法

本文转载至:http://www.jb51.net/article/66130.htm 这篇文章主要介绍了Python中用于计算对数的log()方法,是Python入门基础中的必会的方法,需...
  • robertsong2004
  • robertsong2004
  • 2015年06月26日 16:35
  • 20466

告诉你为什么数据要取对数

平时在一些数据处理中,经常会把原始数据取对数后进一步处理。之所以这样做是基于对数函数在其定义域内是单调增函数,取对数后不会改变数据的相对关系,取对数作用主要有: 1. 缩小数据的绝对数值,方便计算。...
  • xiaolang85
  • xiaolang85
  • 2016年06月07日 16:04
  • 3863

为什么数据要取对数

对这个问题,我转载了三篇文章: 作者:姚岑卓 链接:https://www.zhihu.com/question/22012482/answer/21315349 来源:知乎 著作权归作者所有,...
  • fallenink
  • fallenink
  • 2017年03月01日 10:41
  • 894

倒谱

1.       什么是倒谱? 倒谱(cepstrum):一种信号的傅里叶变换谱经过对数运算后再进行傅里叶反变换。由于一般傅里叶谱是复数谱,因而又称复倒谱。 2.       倒频谱的数学描述 ...
  • zm1_1zm
  • zm1_1zm
  • 2016年09月24日 23:50
  • 1972

倒谱的意义

一直在用倒谱,却忘了倒谱的作用意义了。 语音的产生用源、滤波器模型来表示,即把声带振动看作激励源e(n),把声道看成一个滤波器h(n),两者在时域进行卷积,得到语音信号s(n)。为了更好地处理语...
  • goodchoes
  • goodchoes
  • 2015年07月30日 16:37
  • 3610

C++编程技巧—对数运算实现

可以调用C、C++中现成的算法库实现整数对数运算,比较高效的64位整数对数运算实现方法如下: int Log2(uint64_t n) { int result; ...
  • stupid_haiou
  • stupid_haiou
  • 2015年05月24日 16:42
  • 1504

JAVA对数计算

java对数计算      Java对数函数的计算方法非常有问题,然而在API中却有惊人的误差。但是假如运用了以下的方法,用Java处理数字所碰到的小麻烦就可以轻而易举的解决了。 ...
  • sinat_35667067
  • sinat_35667067
  • 2017年05月02日 22:54
  • 902

解密ln( )函数

感谢理解完指数函数(指数函数和自然对数),下一个目标就是对数函数。数学中对自然对数的定义是的逆运算,但有一个更形象的理解:自然对数刻画了复合利率的增长时间 假设你的投资有100%的回报率...
  • FnqTyr45
  • FnqTyr45
  • 2017年11月16日 00:00
  • 167

延长天文学家寿命的发现——纳皮尔发现对数

自古以来,人们的日常生活和所从事的许多领域,都离不开数值计算,并且随着人类社会的进步,对计算的速度和精确程度的需要愈来愈高,这就促进了计算技术的不断发展。印度阿拉伯记数法、十进小数和对数是文艺复兴时期...
  • FnqTyr45
  • FnqTyr45
  • 2017年10月08日 00:00
  • 128
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据取对数运算的意义
举报原因:
原因补充:

(最多只允许输入30个字)