我非常感谢您的建议:
我有不平衡的数据集:y 只有 1 的 2%。我只想平衡训练数据集,然后在模型之前对平衡训练数据集进行特征选择。
执行分割和平衡后,我需要将 X_train 和 y_train 组合成一个 df。
在确保“y”与对应的 X 合并的同时,正确的方法是什么?
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)
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
P.S 我在定义 X 时删除了 ID('plco_id'),有什么方法可以在 X 和 y 的拆分和平衡期间保留它吗?怎么办?
X = df2.loc[:, ~df2.columns.isin(['lung_cancer', 'plco_id'])]
y = df2.iloc[:, [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]]