python 如何控制对数据集进行移动的幅度

kokeuurv  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(142)

我有一个数据集X,其中的每个数据点(每行)都有特定的顺序,为了完全打乱X,我使用了如下代码:

shufX = torch.randperm(len(X))
        X=X[shufX]

假设我只想进行轻微的混洗(可能是移动一些数据点的位置)而不进行完全混洗,我希望有一个参数p,这样当p=0时,它不进行混洗,当p=1时,它进行完全混洗,就像代码about那样,这样,我就可以将混洗的程度调整为轻微或更广泛。
我尝试过这样做,但意识到这可能会导致重复的数据点,这不是我想要的。

p = 0.1 
    mask = torch.bernoulli(p*torch.ones(len(X))).bool()
    shufX = torch.randperm(len(X))
    X1=X[shufX]
    C = torch.where(mask1, X, X1)
8fsztsew

8fsztsew1#

创建一个只交换有限数量项目的随机函数。

import numpy as np
from random import randrange, seed

def shuffle( arr_in, weight = 1.0 ):
    count = len( arr_in )
    n = int( count * weight ) # Set the number of iterations
    for ix in range( n ):
        ix0 = randrange( count )
        ix1 = randrange( count )
        arr_in[ ix0 ], arr_in[ ix1 ] = arr_in[ ix1 ], arr_in[ ix0 ]
        # Swap the items from the two chosen indices

seed ( 1234 )
arr = np.arange(50)
shuffle( arr, 0.25 )
print( arr )

# [ 7 15 42  3  4 44 28  0  8 29 10 11 12 13 14 22 16 17 18 19 20 21
#   1 23 24 25 26 27 49  9 41 31 32 33 34 35 36  5 38 30 40 39  2 43
#  37 45 46 47 48  6]

即使权重为1.0,一些项目(平均)也不会移动。你可以通过函数的参数来获得你需要的行为。

相关问题