关于取对数的一些想法

通常数据离散程度(或偏态分布)比较大,下意识就会想到取个对数,这样可以把值域给压缩了。

这么处理下,数据差异不那么明显了,因为取对数不改变单调性,只是做了一个缩放,所以不会改变数据的性质。

有时候做ANOVA方差分析的时候又要满足三大特性,随机独立,正态,方差齐,

一看数据不正态了,方差不齐了,赶紧取个对数先,这样真的好吗?

例如有论文写到某些情况下,比如数据不近似服从对数正态分布,使用广义估计方程(GEE)方法来处理数据,而不是取对数

http://www.doc88.com/p-7794204427017.html

所以有些时候不是取个对数就解决问题的,当然对数大法确实很有用,

比如,FASTQ文件中,RNA序列的质量衡量也采用了log变换,把类似于0.01的P值装成一个字母单值

又比如,在信息检索中,IDF(Inverse document frequency)逆文本频率指数,意思是key word关键词越少出现权重越大,经常出现说明他不重要,权重低,所谓物以稀为贵嘛

IDF值=log(D/Dw)其中D是全部文件数,这里的文件可以是网页,也可以是文章,也可以是压缩后的图像信息,原理是一样的。

D总数是个定值,Dw越小,IDF越大,比如说求相关性计算就是简单的加法了, TF1*IDF1 + TF2*IDF2 +... + TFN*IDFN。

此外,取对数可以把乘法计算转换称加法计算,举个例子,在logistic回归里,很关键的一步就是先将概率密度函数乘起来,再取对数,最后求参数

从log函数的图像可以看到,自变量x的值越小,函数值y的变化越快,也就是说,对数值小的部分差异的敏感程度比数值大的部分的差异敏感程度更高。这也是符合生活常识的,

例如对于价格,买个家电,如果价格相差几百元能够很大程度影响你决策,但是你买汽车时相差几百元你会忽略不计了。

最后,对数可以减弱异方差性,注意是减弱,不是消除。。

 

转载于:https://www.cnblogs.com/marszhw/p/10584443.html

### Python 中计算对数的方法 在 Python 中,可以使用 `math` 模块中的 `log()` 函数来计算对数值。以下是关于该函数的具体说明以及其用法: #### 导入模块 为了使用 `log()` 函数,需要先导入 `math` 模块[^1]。 ```python import math ``` #### 基本语法 `math.log(x[, base])` 是用来计算对数的主要方法。其中: - 参数 `x` 表示要取对数的正实数。 - 可选参数 `base` 表示底数,默认情况下为自然对数 \( e \)[^3]。 如果未指定底数,则默认返回的是以自然常数 \( e \) 为底的对数(即自然对数)。例如: ```python result = math.log(10) # 自然对数 ln(10),约等于 2.302585 print(result) ``` 当指定了底数时,会按照给定的底数计算对应的对数值。例如: ```python result_base_2 = math.log(8, 2) # 底数为 2 的对数 log₂(8),结果应为 3 print(result_base_2) ``` #### 特殊情况处理 需要注意一些特殊情况下的行为: - 如果输入值小于或等于零 (`x <= 0`),则会抛出 `ValueError` 错误[^4]。 - 当尝试传入非法类型的变量作为参数时,可能会引发 `TypeError`。 #### 示例代码展示 以下是一些具体的例子展示了不同场景下如何调用此功能: ```python # 不同形式的日志记录测试案例 import math try: print(math.log(-1)) # 尝试负数将失败 ValueError: math domain error except Exception as ex: print(f"Exception occurred: {ex}") positive_number = 16 natural_logarithm = math.log(positive_number) # 默认底数e binary_logarithm = math.log(positive_number, 2) # 底数为2 common_logarithm = math.log10(positive_number) # 十进制常用对数 (等效于math.log(positive_number, 10)) print(f"Natural logarithm of {positive_number} is {natural_logarithm}") print(f"Binary logarithm of {positive_number} is {binary_logarithm}") print(f"Common logarithm of {positive_number} is {common_logarithm}") ``` 上述脚本不仅涵盖了基本操作还包含了异常捕获机制以便更好地理解和应用这些概念[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值