pandas 使用数据增广时如何避免数据泄露?

kgqe7b3p  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(109)

我正在开发一个使用数据增强的分类问题。为此,我已经通过添加噪声和其他特征从副本中提取了特征。但是,我希望避免数据泄漏,例如,当副本位于训练集中而原始数据位于测试集中时,可能会发生数据泄漏。
我开始测试一些解决方案,并得到了下面的代码。但是,我不知道当前的解决方案是否可以防止这个问题。
基本上,我有原始数据库(df)和具有副本特征的数据库(df2),当我在训练和测试中拆分df时,我在df2中查找副本,以便它们在训练和测试中与原始数据在一起。
有人能帮帮我吗?
下面是代码:

df = pd.read_excel("/content/drive/MyDrive/data/audio.xlsx")
df2 = pd.read_excel("/content/drive/MyDrive/data/audioAUG.xlsx")
X = df.drop('emotion', axis = 1)
y = df['emotion']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state= 42, stratify=y)
X_train_AUG = df2[df2['id'].isin(X_train.id.to_list())]
X_test_AUG = df2[df2['id'].isin(X_test.id.to_list())]
X_train = X_train.append(X_train_AUG.loc[:, ~X_train_AUG.columns.isin(['emotion'])])
X_test =  X_test.append(X_test_AUG.loc[:, ~X_test_AUG.columns.isin(['emotion'])])
y_train_AUG = X_train_AUG.loc[:, X_train_AUG.columns.isin(['emotion'])]
y_test_AUG =  X_test_AUG.loc[:, X_test_AUG.columns.isin(['emotion'])]
y_train_AUG = y_train_AUG.squeeze()
y_test_AUG  = y_test_AUG.squeeze()
y_train = y_train.append(y_train_AUG)
y_test =  y_test.append(y_test_AUG)
nimxete2

nimxete21#

简短的回答,你的分裂程序是罚款,但我个人会分裂df 1和df 2的75-25%的长度都(如果两者有相同的大小)因为我不知道你的df 2作为一个扩充的df 1数据生成。我认为如果那些['id']是在秩序,它的罚款。(例如,如果所有的数据都排序,并在两个 Dataframe 升序)e.x

train_len = int(0.75*len(df1))
train_data = df[:train_len] #something like this
data_AUG = df2[:train_len]

并应用同样的事情,你已经提到的任何是在dfa 2为您的数据扩增。这将保证防止任何数据泄漏。(就我而言,这些是一个接一个的数据)
或者可能是一个更好的方法,从一开始就从分割数据中生成增强数据。(从模型中使用的75%的数据中生成增强数据)

相关问题