有什么方法可以生成新数据吗?

Is there any way to generate new data?

提问人:방준호 提问时间:5/9/2023 最后编辑:desertnaut방준호 更新时间:5/10/2023 访问量:58

问:

enter image description here

我有这些数据。原始数据从第 1 列到第 5 列。

有没有办法通过随机组合没有特定条件的列来创建新数据?

例如,我通过在列之间制作公式来制作新数据。我知道有一些方法可以用python自己制作公式。但我想做大约 100 多列。有没有自动方法可以做到这一点?(Numpy,熊猫或类似的东西)

pandas numpy 数据生成

评论

1赞 Corralien 5/9/2023
“通过随机组合列”是什么意思?
0赞 Salvatore Daniele Bianco 5/9/2023
你是抱怨更多的树囊还是更多的变量?最后的任务是什么?您需要这些数据进行分类、回归还是什么?
0赞 방준호 5/9/2023
我的目标是对它们进行分类。但数据有些难以分类。我用过 pca、shap 或类似的东西,但它不起作用。
0赞 방준호 5/9/2023
随机组合列意味着使数据像列 Q、R、S
0赞 Imago 5/9/2023
您必须区分数据点和特征。就您而言,您有兴趣创建某种形式的新功能。您要做的是特征工程,因此我会研究这些方法。

答:

0赞 Simone Gigante 5/10/2023 #1

您可以使用一些内置模块,例如包含一组数学函数的 and。我使用这种方法生成了一些随机列,这些列具有原始列的随机组合。请注意,用于每个操作的原始列数也是随机的,但如果您愿意,可以将其设置为特定数字。 列名仅用于可视化目的,因为在某些情况下,列的名称可能看起来太近并且难以阅读。 在此代码中,数学运算仅使用原始列,如果您还想使用新创建的列,则应删除变量并获取内部循环。还要考虑使用此代码,所有操作都从左到右发生,两个数字对,这意味着如果您看到 A + B * C,则顺序为:randomoperator[]original_columnsdf.columns

  1. A + B

  2. (A+B) * C

    NUM_OF_COLUMNS = 3
    
    data = np.random.rand(10, 5)
    df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D', 'E'])
    
    operations = [operator.add, operator.sub, operator.mul, operator.truediv]
    operations_dict = {'add':'+','sub':'-','mul':'*','truediv':'/'}
    original_columns = df.columns
    
    for _ in range(NUM_OF_COLUMNS):
    
        num_operators = random.randint(2,5)
        selected_columns = random.sample(list(original_columns), num_operators)
        selected_operations = [random.choice(operations) for _ in range(num_operators-1)]
    
        new_column = df[selected_columns[0]] 
        column_name = f"[{selected_columns[0]}"
        for i in range(1, len(selected_columns)):
            new_column = selected_operations[i-1](new_column, df[selected_columns[i]])
            column_name += f" {operations_dict[selected_operations[i-1].__name__]} {selected_columns[i]}"
        column_name += "]"
        df[column_name] = new_column
    
    print(df)
    

输出:

        A         B         C         D         E    [B / A * C]  [B / C * D + E]   [C - B]
0  0.133616  0.518619  0.681410  0.903823  0.971338     2.644830         1.659235  0.162791
1  0.968481  0.363165  0.274024  0.009211  0.821189     0.102755         0.833397 -0.089140
2  0.267062  0.197164  0.187881  0.862648  0.151512     0.138707         1.056784 -0.009283
3  0.460873  0.841071  0.150538  0.469626  0.424029     0.274725         3.047882 -0.690534
4  0.172947  0.602186  0.004098  0.937253  0.093663     0.014267       137.835107 -0.598088
5  0.015732  0.502398  0.380856  0.593829  0.725551    12.162291         1.508887 -0.121542
6  0.606476  0.854250  0.235426  0.306123  0.205574     0.331609         1.316350 -0.618825
7  0.220014  0.415449  0.418816  0.788880  0.001986     0.790843         0.784525  0.003366
8  0.479869  0.480209  0.587922  0.318358  0.116142     0.588339         0.376173  0.107713
9  0.927947  0.261066  0.225387  0.910492  0.268781     0.063410         1.323409 -0.035680