gpt4 book ai didi

python - 在 scikit-learn 和/或 pandas 中重新采样

转载 作者:太空狗 更新时间:2023-10-29 20:30:32 26 4
gpt4 key购买 nike

Pandas 或 Scikit-learn 中是否有根据指定策略进行重采样的内置函数?我想根据分类变量对数据重新采样。

例如,如果我的数据有 75% 的男性和 25% 的女性,但我想用 50% 的男性和 50% 的女性来训练我的模型。 (我还希望能够概括为不是 50/50 的情况)

我需要的是根据指定比例对我的数据重新采样的东西。

最佳答案

我在下面尝试了一个函数来做我想做的事。希望这对其他人有帮助。

Xy 分别假定为 Pandas DataFrame 和 Series。

def resample(X, y, sample_type=None, sample_size=None, class_weights=None, seed=None):

# Nothing to do if sample_type is 'abs' or not set. sample_size should then be int
# If sample type is 'min' or 'max' then sample_size should be float
if sample_type == 'min':
sample_size_ = np.round(sample_size * y.value_counts().min()).astype(int)
elif sample_type == 'max':
sample_size_ = np.round(sample_size * y.value_counts().max()).astype(int)
else:
sample_size_ = max(int(sample_size), 1)

if seed is not None:
np.random.seed(seed)

if class_weights is None:
class_weights = dict()

X_resampled = pd.DataFrame()

for yi in y.unique():
size = np.round(sample_size_ * class_weights.get(yi, 1.)).astype(int)

X_yi = X[y == yi]
sample_index = np.random.choice(X_yi.index, size=size)
X_resampled = X_resampled.append(X_yi.reindex(sample_index))

return X_resampled

关于python - 在 scikit-learn 和/或 pandas 中重新采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29873224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com