如何在 Pyhton 中将 X_train 和 y_train 组合成一个平衡的数据帧?

问题描述 投票:0回答:1

我非常感谢您的建议:

我有不平衡的数据集:y 只有 1 的 2%。我只想平衡训练数据集,然后在模型之前对平衡训练数据集进行特征选择。

执行分割和平衡后,我需要将 X_train 和 y_train 组合成一个 df。

在确保“y”与对应的 X 合并的同时,正确的方法是什么?

  1. 我执行了 test_train_dev 分割并在每个数据集中保持 2% 的 y 分层,如下所示:
X_temp, X_test, y_temp, y_test = train_test_split(X, y, shuffle=True,test_size=0.2, random_state=5,stratify=y)

X_train, X_dev, y_train, y_dev = train_test_split(X_temp, y_temp, shuffle=True,test_size=0.10, random_state=8,stratify=y_temp)
  1. 然后我只平衡了训练数据集,如下所示:
smt = SMOTEENN(random_state=122)
X_train, y_train = smt.fit_resample(X_train, y_train)

#Check the balancing
y_train["lung_cancer"].value_counts()

1    99697
0    88464

  1. 现在我想将 X_train 和 y_train 合并到一个数据框中以执行特征选择。 我如何确保每个 y 确实会合并到 X 的正确行?

P.S 我在定义 X 时删除了 ID('plco_id'),有什么方法可以在 X 和 y 的拆分和平衡期间保留它吗?怎么办?

X = df2.loc[:, ~df2.columns.isin(['lung_cancer', 'plco_id'])]
y = df2.iloc[:, [1]]

非常感谢您的帮助!

python resampling train-test-split imbalanced-data imblearn
1个回答
1
投票

如何确保每个 y 确实会合并到 X 的正确行?

顺序没有改变,所以你可以像这样连接它们:

train_df = pd.concat([X_train, y_train], axis=1)
。试想一下:如果顺序不保持不变,分类器如何知道 X 中的哪一行属于 y 中的哪个元素?

有什么方法可以在 X 和 y 的分割和平衡过程中保持它吗?怎么办?

您可以将其设置为索引,如下所示:

df2.set_index("plco_id", inplace=True)
X = df2.loc[:, ~df2.columns.isin(['lung_cancer'])]
y = df2.iloc[:, [0]]
© www.soinside.com 2019 - 2024. All rights reserved.