首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代数:如何使用对数/指数拟合重新缩放数据

代数:如何使用对数/指数拟合重新缩放数据
EN

Stack Overflow用户
提问于 2018-04-21 12:56:28
回答 1查看 331关注 0票数 0

我需要对数据进行重新排序,但我终生无法弄清楚如何做到这一点。

代码语言:javascript
复制
(Int ((1- (([TD] - min)/( max - min)))*20))+1

这将在TD中采用0-1之间的数字,并将其分解为20个整数代码(我需要能够切换20个)。代码1将是最高的5%,代码2= 5-10%范围-以此类推。

放入TD的.954,得到1,放入.923,得到2

目前它被拆分成均匀大小的存储箱,你能重新调整使存储箱沿着对数比例或其他指数曲线分解-请参见图表以查看基本分布模式。重要:如果你可以解决,它需要保持在相同的语法,以便我可以把它放到一个特定的程序。Int()函数向下舍入到最接近的整数,我找不到‘向上舍入’函数,所以我想继续使用它。谢谢大家,

EN

回答 1

Stack Overflow用户

发布于 2018-04-21 13:43:23

也许“正确”的方法是在中设置回收站,使用类似于数据概率分布的倒数。通常,除非您知道数据的统计属性,否则很难构建。

或者,如果您知道您的数据大致是按照指数递减分布分布的,那么通过取每个值的对数,您将使这些转换的值更加均匀地分布。然后,可以使用与您的公式类似的配方对这些对数转换后的值进行二进制处理。

下面的Python代码说明了这一原理:

代码语言:javascript
复制
import numpy

x = 0.1 + numpy.random.exponential(size=(100000,))

nBins = 20
logX = numpy.log(x)
eps = 1e-9
minLogX, maxLogX = numpy.min(logX), numpy.max(logX)
bins = numpy.floor((nBins - eps) * (logX - minLogX) / (maxLogX - minLogX))
binCentres = numpy.exp(minLogX + (numpy.arange(0, nBins) + 0.5)
                                    * (maxLogX - minLogX) / nBins)

如果我们使用20个柱状图对原始数据x进行直方图,那么大多数数据都在几个柱状图中:

如果我们在应用log/exp转换后计算入库数据的计数,我们会得到如下分布(同样使用20个二进制):

这显示了在x=1.5所在的区域中具有更高计数的存储箱的数量要多得多,并且显示随着x的增加,存储箱之间的间隔越来越大。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49952506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档