权重随机数的权重随着外部变量而变动

本文探讨了如何根据外部变量调整权重随机数的抽取概率,实现输入变量小时,指定区间内大数值权重增加,反之亦然。通过算法设计,解决了权重参数随变量变化的难题。

权重随机数的权重随着外部变量而变动

一、结果

目标:输入的自变量越小,随机数在指定区间[30,181]的取值越大,而输入的自变量越大,随机数在指定区间[30,181]的取值越小

结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、目标

希望随机数的权重随着外部输入的变量的大小进行调整,如果外部输入的变量越小则随机数在自己指定的区间即【30,181】中的权重呈现递增趋势,从结果来看就是在指定的区间即【30,181】取值大的概率更大;如果外部输入的变量越大则随机数在自己指定的区间即【30,181】中的权重呈现递减趋势,从结果来看就是在指定的区间即【30,181】取值小的概率更大

三、难点

此处的难点无疑在于权重参数的变动,一般的权重随机数都是

import random
import numpy as np
random.choices(list,weights=)#其中list为需要随机抽取的列表,而weights为权重,权重一般也是一个列表
#实例

list_ = [i for i in range(3,10)
weight = np.random.randint(1,2,7)
random.choices(list,weights=)

在这里插入图片描述

由于权重都为1,即抽取概率一样,所以大体上次数是相当的

四、解决

def data_random_margin(x):
	list_math = [i for i in range(30,181)]
if x < 2/11:
    wieght = np.random.randint(1, 2, 151)
    list_math_split_1 = wieght[:75]
    list_math_copy_1 = []
    list_math_split_2 = wieght[75:]
    list_math_copy_2 = []
    for i,content in enumerate(list_math_split_1):
        content = float(content)
        list_math_copy_1.append(content)
    #print(list_math_copy_1)
    for i ,content in enumerate(list_math_split_2):
        content = content + x* i
        list_math_copy_2.append(content)

    wieght_ = list_math_copy_1+list_math_copy_2
    #print(wieght_)


    data = random.choices(list_math, weights=wieght_)
    return data[0]

elif x == 2/11:
    wieght = np.random.randint(1,2,151)
    data = random.choices(list_math,weights=wieght)
    return data[0]
elif x>2/11:
    wieght = np.random.randint(1, 2, 151)
    list_math_split_1 = wieght[:75]
    list_math_copy_1 = []
    list_math_split_2 = wieght[75:]
    list_math_copy_2 = []
    for i, content in enumerate(list_math_split_1):
        content = content + x* i
        list_math_copy_1.append(content)

    for i, content in enumerate(list_math_split_2):
        content = float(content)
        list_math_copy_2.append(content)
    list_math_copy_1 = sorted(list_math_copy_1,reverse=True)
    wieght_ = list_math_copy_1 + list_math_copy_2
    #print(wieght_)

    data = random.choices(list_math, weights=wieght_)
    return data[0]

此处需要调整的就是外部变量的影响因子的设定,我在此处用的是

 content + x* i

即通过中位数向两边扩散,离中位数越远的权重越小,当然我这里没有完全的实行,而是x < 2/11则权重列表左边不变,而右边进行递增;x > 2/11则权重列表右边不变,而左边进行递增

通过对于那边的增量控制实现权重控制,进而控制随机数的抽取概率

最后结果:
x = 1/11时:

在这里插入图片描述

x == 2/11时:
在这里插入图片描述
在这里插入图片描述

x>2/11时:x=4/11
在这里插入图片描述
在这里插入图片描述

从前后数字出现的次数以及相邻数字之间可以看出,基本实现了相应的目标,只是相应的权重的比值需要进行微调

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值