这是我的 2 美分。假设我们有以下不平衡数据集:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Category': np.random.choice(['A','B','C'], size=1000, replace=True, p=[0.3, 0.5, 0.2]),
'Sentiment': np.random.choice([0,1], size=1000, replace=True, p=[0.35, 0.65]),
'Gender': np.random.choice(['M','F'], size=1000, replace=True, p=[0.70, 0.30])})
print(df.head())
第一行:
Category Sentiment Gender
0 C 1 M
1 B 0 M
2 B 0 M
3 B 0 M
4 A 0 M
现在假设我们想要通过 Sentiment 获得一个平衡的数据集:
df_grouped_by = df.groupby(['Sentiment'])
df_balanced = df_grouped_by.apply(lambda x: x.sample(df_grouped_by.size().min()).reset_index(drop=True))
df_balanced = df_balanced.droplevel(['Sentiment'])
df_balanced
print(df_balanced.head())
平衡数据集的第一行:
Category Sentiment Gender
0 C 0 F
1 C 0 M
2 C 0 F
3 C 0 M
4 C 0 M
让我们验证它在以下方面是平衡的Sentiment
df_balanced.groupby(['Sentiment']).size()
我们得到:
Sentiment
0 369
1 369
dtype: int64
正如我们所见,我们最终得到了 369 个正面和 369 个负面的情绪标签。