gpt4 book ai didi

python - 对不平衡数据集进行重新采样的数据框

转载 作者:行者123 更新时间:2023-12-01 00:13:00 25 4
gpt4 key购买 nike

Glass Identification Database是一个不平衡的数据集,我想进行一些重采样。

共有5种玻璃214行数据。每种类型都有不同的行数。下面我想执行随机欠采样,使所有类型达到最小数量(即每种类型只有 9 行。)

import pandas

dataset = pandas.read_csv("C:\\temp\\glass.csv"]), sep = ",")

dataset['Type'] = pandas.Categorical(dataset['Type']).codes

# Class count
count_class_0, count_class_1, count_class_2, count_class_3, count_class_4, count_class_5 = dataset.Type.value_counts()

# Divide by class
df_class_0 = dataset[dataset['Type'] == 0]
df_class_1 = dataset[dataset['Type'] == 1]
df_class_2 = dataset[dataset['Type'] == 2]
df_class_3 = dataset[dataset['Type'] == 3]
df_class_4 = dataset[dataset['Type'] == 4]
df_class_5 = dataset[dataset['Type'] == 5]

class_count = dataset.Type.value_counts()
print('Class 0:', class_count[0]) # 70
print('Class 1:', class_count[1]) # 76
print('Class 2:', class_count[2]) # 13
print('Class 3:', class_count[3]) # 29
print('Class 4:', class_count[4]) # 9
print('Class 5:', class_count[5]) # 17

# Random under-sampling
df_class_0_under = df_class_0.sample(count_class_4)
df_test_under = pandas.concat([df_class_0_under, df_class_4], axis=0)

print('Random under-sampling:')
print(df_test_under.Type.value_counts())

这表明它没有正确完成:

Random under-sampling:
0 13
4 9

完成这件事的正确方法是什么? (将所有类型设为最小数量,即每种类型只有 9 行。)

谢谢。

最佳答案

第一个想法是使用GroupBy.head Type 列的数量最少:

dataset1 = dataset.groupby('Type').head(dataset.Type.value_counts().min())

使用 lambda 函数进行采样:

dataset1 = dataset.groupby('Type').apply(lambda x: x.sample(dataset.Type.value_counts().min()))

关于python - 对不平衡数据集进行重新采样的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59498558/

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