听说水区大佬多~ 求个公式(已解决)

  • m
    magicsongs
    谢谢36楼大佬~谢谢chh 已经解决了


    需求是这样的~ 我大概有7万个对象,每个都有个分数。分值从-500到2000 。
    现在想要把分数全部缩放到0-1之间,但是又不想直接根据最大值最小值缩放~
    因为实际情况是中间分数段的最多,现在却想要更多的对象的值靠近0和1,且最终结果0-0.5 0.5-1区间的对象数量差不多

    为了方便理解我画了两个示意图~

    现在的样子


    希望之后的样子

    数学比较差~求大佬指点~ 越通俗越好。
  • 澳洲麋鹿
    这个帮不了,等高手
  • w
    wm258156031
    问题的每个字我都认识,标记等个大佬
  • w
    women
    需求没看懂
  • s
    sellfur
    不懂,帮顶。。。,
    话说一开始看到七万个对象,想歪了有点
  • M
    Megalodon
    “7万个对象”
    我只要一个就够了~
  • m
    magicsongs
    就是有一堆分数 其中中间段的比较多。现在想要高分和低分的变多一些。
  • y
    yanjh1
    表示实在看不懂,等大佬解释
  • S
    Selwyn_Lu
    70000个对象,受得了么,榨汁机啊
  • m
    magicsongs
    楼咋这么容易偏
  • s
    suckbunny
    你得有个标准吧,既然中间段最多,那么中间段要么倾向1要么倾向0,不然挺矛盾的。如果只是单纯的要把数据接近1,那么大于750的(2000-x)/1250,小于等于750的(500+x)/1250.
  • 酸菠萝
    看不懂,帮求大佬
  • m
    magicsongs
    是要把中间分数段的都往两头放 所以不能直接取中间值来计算 不然低于中间值的就全部靠向0了 高于中间值的都靠近1了 。最终结果还是希望靠近0-0.5 0.5-1区间的对象数量差不多
  • s
    sclkow
    感觉我理解的题干和楼主的需求不同...
  • t
    timtu
    哇,人在世界上有7W个可以对象的人。
  • r
    rulers
    学渣路过 看不懂
  • m
    magicsongs
    就是想要把一个凸的曲线变成一个凹曲线 ,本来最高点在中间偏左和偏右 现在最高点在两头 且最低点在刚好中间
  • s
    shuhanks
    需求是增大离散度,然后再缩放到0-1之间,最简单的方法是取log自然对数以后再缩放
  • 国产008
    需求看着费劲
  • c
    conzz
    7万个对象,颜值从-500到2000 。
    不好意我看歪了
  • s
    suckbunny
    那我说的不是可以么?我的就是中间段是1往两头走越接近0。
  • m
    magicsongs
    语文也比较差~ 加了两个示意图 您看看
  • m
    magicsongs
    能稍微通俗一点么~ 我不知道啥是自然对数呀
  • 我来了
    看不懂,等大佬解释。。
  • m
    mwb1028
    完了 题干都看不懂
  • s
    suckbunny
    看了你编辑过的,那就很简单啊,小于等于500的(500-x)/1000,大于500的(x-500)/1500
  • s
    shuhanks
    你准备用什么工具来处理?excel里面的话就=ln(number)就行了,另外一群歪楼的都加分,不给我加分吗
  • m
    magicsongs
    我下午试试~ 不过我咋觉得好像这么算出来凹点不会在500 ~ 我的500是分值 凹的曲线是对象数量
  • a
    a139239
    70k的数据还好,excel就能处理,先average这70k数值,然后定标这个平均值为0.5,(最终结果0-0.5 0.5-1区间的对象数量差不多)这个要求就能满足了。
    而(现在却想要更多的对象的值靠近0和1),这个我就不能理解了~
    先午饭,待会再看楼主需求,楼主要多表述啊~~
  • m
    magicsongs
    oracle~ 写个定时任务
  • m
    magicsongs
    图的曲线是对象数量 原本是分布在中间偏左~ 现在想要往两头偏。比如原来abcd b最多 现在想要a 和d最多 且尽可能对称
  • s
    shadow_LJ
    现有的维度(也就是你说的分数)做不到,因为按你现有的维度你的数据分布就是两边低中间高,所以不管你比例怎么变化(-500到2000或者0到1)分布曲线都是不变的。
    建议重新造个维度和现在的维度相反(比如之前的分数是漂亮值,现在造个叫丑恶值),这样按新维度的分布曲线就是两边高中间低了。
  • s
    suckbunny
    没理解错的话,应该是比如400分的有22000人,然后变成0.01分的时候有22000人,600分的有23000人,然后变成0.99分的有23000人对吧?是的话就小于500分的(x/2-250)^2/500000;大于500的(x/2-250)^2/1125000.之前回复的公式不对
  • s
    shuhanks
    MySQL的话一样的,ln一下就好了,如果要求回归到中线,再调一下就行了
  • a
    alredstone
    值里面有负数,如何直接取对数

    我没能理解lz的要求,“最终结果0-0.5 0.5-1区间的对象数量差不多”这个,如果原始数据分布不是标准正态分布或接近正态分布,不影响原分布趋势的前提下是没法实现的。如果原始数据符合正态分布,就非常简单了。不懂取对数也没关系,数值分布-500 — 2000,变换至0~1: 1-(x+500)/2000。
  • k
    kgzeng
    x=(a+500)/2500
    y=(2(x-0.5))^(1/3)/2+0.5


    先挪到[0,1]区间,再用幂函数解决,1/n取奇数,可大可小。
  • o
    ohyoyo
    帮顶,等答案,感觉高大上
  • m
    magicsongs
    我绘制了下图~ 没问题。。公示没问题~ 我现在在想咋让数据库算^(1/3).。。
  • n
    neil_aug
    取数量最大值max,|max-x|
  • m
    magicsongs
    大佬~ 遇到个问题
    一个负数的a 加上最小值的绝对值后再除以最大值加最小值的绝对之后 数值会在0-0.5 ~ 那么再第二步运算的时候 x-0.5 得到的就是负数了~ 我负数咋^(1/3)呀?

    比如-1 +abs(-2763) = 2762
    abs(-2763)+4687 = 7450
    2763/7450=0.37087248
    减去0.5后就是负数了~ 就算*2 之后也不能^呀~
  • 布衣
    7W个对象要多好的体力啊。。
  • s
    suckbunny
    负数可以开立方根
  • s
    suckbunny
    人家只是妈妈桑,要统计好数据发给客户挑选的嘛
  • m
    magicsongs
    这里要1/3 我试了下不行~
  • k
    kgzeng
    不太清楚编程这块的问题,我在网上找了几个函数绘制图像,负数第三象限的图是画不出来。

    但从数学上是不存在这个问题的。负数确实可以开立方根。(-0.125)^(1/3)=-0.5
  • k
    kgzeng
    见图。exe
  • m
    magicsongs
    谢谢啦~ 那我得研究下 或者所说这里的0.5的意义是什么 能换成别的值么?
  • s
    suckbunny
    那就试试我的行不行。
  • m
    magicsongs
    数据库和软件的问题~ 负数都不给开立方~ 不知道别人是咋解决的
  • k
    kgzeng
    0.5的意义是平移坐标轴,幂函数x*(1/3)是关于(0,0)对称,你这个要求是关于(0.5,0.5)对称并且函数过(0,0),(1,1)
    所以y=(2(x-0.5))^(1/3)/2+0.5的目的就是平移并且缩小x、y范围