gpt4 book ai didi

python - 寻找合适的截止值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:15 25 4
gpt4 key购买 nike

我尝试执行 Hampel tanh estimators规范化高度不对称的数据。为此,我需要执行以下计算:

给定 x - 一个排序的数字列表和 m - x 的中位数,我需要找到 a 这样 x 中大约 70% 的值落在 (m-a; m+a) 范围内。我们对 x 中值的分布一无所知。我使用 numpy 在 python 中编写,我最好的想法是编写某种随机迭代搜索(例如,如 Solis and Wets 所描述的),但我怀疑有更好的方法,或者是更好的算法或作为现成的功能。我搜索了 numpy 和 scipy 文档,但找不到任何有用的提示。

编辑

Seth suggested使用 scipy.stats.mstats.trimboth,但是在我的偏态分布测试中,这个建议没有用:

from scipy.stats.mstats import trimboth
import numpy as np

theList = np.log10(1+np.arange(.1, 100))
theMedian = np.median(theList)

trimmedList = trimboth(theList, proportiontocut=0.15)
a = (trimmedList.max() - trimmedList.min()) * 0.5

#check how many elements fall into the range
sel = (theList > (theMedian - a)) * (theList < (theMedian + a))

print np.sum(sel) / float(len(theList))

输出是 0.79(~80%,而不是 70)

最佳答案

您首先需要通过将所有小于均值的值折叠到右侧来使您的分布对称。然后你可以在这个单边分布上使用标准的 scipy.stats 函数:

from scipy.stats import scoreatpercentile
import numpy as np

theList = np.log10(1+np.arange(.1, 100))
theMedian = np.median(theList)

oneSidedList = theList[:] # copy original list
# fold over to the right all values left of the median
oneSidedList[theList < theMedian] = 2*theMedian - theList[theList < theMedian]

# find the 70th centile of the one-sided distribution
a = scoreatpercentile(oneSidedList, 70) - theMedian

#check how many elements fall into the range
sel = (theList > (theMedian - a)) * (theList < (theMedian + a))

print np.sum(sel) / float(len(theList))

这将根据需要给出 0.7 的结果。

关于python - 寻找合适的截止值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com