使用多输出模型同时做分类问题和回归问题,数据集该怎么处理?标签应该怎么打?

大家好,请问使用多输出神经网络同时做分类问题和回归问题,数据集该怎么处理?标签应该怎么打?
比如我有一个数据库,包含波形的信号值、频率和幅值,我通过信号值给波形进行分类,同时我用频率值和幅值对数据集频率和幅值的走势进行预测,我使用一个多输出模型做这一件事,我要怎么给数据集打标签呢?
这样设置可以吗?x=([信号值1,信号值2…],频率,幅值),y1=[(0,0,1),(0,1,0),(0,0,1),…],y2=(频率1,频率2,频率3…),y3=(幅值1,幅值2,幅值3…)

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    对于该问题,可以考虑以下处理和标签打法:

    1. 处理数据集:

    由于需要将数据集拆分为信号值、频率和幅值三个部分,因此需先对原始数据进行拆分。

    可以使用Python的pandas库读取数据库中的数据,然后使用pandas中的DataFrame对象对数据进行处理,具体代码如下所示:

    import pandas as pd
    
    data = pd.read_csv("your_database_file_path")  # 读取数据库文件
    
    signal_values = data.iloc[:, 0:100]  # 获取前100列为信号值部分
    frequencies = data.iloc[:, 100]  # 获取第101列为频率部分
    amplitudes = data.iloc[:, 101]  # 获取第102列为幅值部分
    
    1. 标签打法:

    对于分类问题,可以使用one-hot编码将分类标签转换为向量形式。对于回归问题,可以使用每个数据点的实际数值作为标签。具体可如下处理:

    import numpy as np
    
    # 对分类标签进行one-hot编码
    labels_class = np.zeros((len(data), 3))
    for i in range(len(data)):
        if i % 3 == 0:
            labels_class[i][0] = 1
        elif i % 3 == 1:
            labels_class[i][1] = 1
        else:
            labels_class[i][2] = 1
    
    # 分别获取每个数据点的频率和幅值
    labels_reg1 = np.array(frequencies)
    labels_reg2 = np.array(amplitudes)
    

    将信号值、分类标签和回归标签合并为训练集即可:

    data_processed = np.concatenate((signal_values, labels_class, labels_reg1.reshape(-1, 1), labels_reg2.reshape(-1, 1)), axis=1)
    

    这样就可以使用多输出神经网络进行分类和回归任务了。在训练模型时,可以将分类问题和回归问题的损失分别计算并加权,以得到更好的综合结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^