如果数据非正态,可以使用log1p进行正态化,方便后继的数据处理。
可以看出,使用log1p后,数据明显正态化。
查看log1p的文档,发现该函数并不是直接对目标数据取对数,而是加1后取对数。
log1p(x) == log(x+1)
这样的操作,主要是因为当x很小时,log(x)会出错。
log(0)
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘log’ is not defined
此处注意一点:由于该样本为明显右偏,我们采用了取对数的方法使数据正态化。而取对数只是对右偏数据正态化其中一种方法而已,常见的针对右偏数据正态化的方法还有取平方根获取立方根等。
如果样本是左偏,数据正态化一般是指数函数。
显然对数据进行正态化的时候,还要先判断一下是否是右偏还是左偏,然后根据情况选择合适的函数(如log函数)进行正态化,过程显得有点啰嗦。
cox-box粉墨登场。你只需要把数据喂进去,它自动帮你判断数据是右偏还是左偏并选择合适的正态化函数。(具体python API为:scipy.special.boxcox1p)
关于数据的正态化详细细节可以参考:
http://www.360doc.com/content/16/0422/07/3448857_552751124.shtml
cox-box的详细细节可以参考:
http://www.360doc.com/content/16/0424/09/26166517_553312491.shtml
强烈建议通读以上两个链接的文章。
不过,这里有一个悬而未决的问题:数据为什么要正态化?我会在另外一篇博文里阐述下(感性的解释)