Как выполнить повторную выборку набора данных для достижения равномерного распределенияPython

Программы на Python
Ответить
Anonymous
 Как выполнить повторную выборку набора данных для достижения равномерного распределения

Сообщение Anonymous »

У меня есть набор данных со схемой типа:

Код: Выделить всё

df = pl.DataFrame(
{
"target": [
[1.0, 1.0, 0.0],
[1.0, 1.0, 0.1],
[1.0, 1.0, 0.2],
[1.0, 1.0, 0.8],
[1.0, 1.0, 0.9],
[1.0, 1.0, 1.0],
],
"feature": ["a", "b", "c", "d", "e", "f"],
},
schema={
"target": pl.Array(pl.Float32, 3),
"feature": pl.String,
},
)
Если я создаю гистограмму значений target-z, это будет выглядеть так:
Изображение
Я хочу выполнить повторную выборку данных, чтобы они были плоскими по z.
Мне удалось сделать это хакерским многошаговым способом (тоже очень медленно). Мне было интересно, могут ли люди предложить более чистый (и более эффективный) способ?
Я делаю следующее:
  • Нахожу края интервала указанной гистограммы:

Код: Выделить всё

bins = 2 # Use e.g. 100 or larger in reality
z = df.select(z=pl.col("target").arr.get(2))
z_min = z.min()
z_max = z.max()
breaks = np.linspace(z_min, z_max, num=bins+1)
  • Определите, сколько счетчиков находится в корзине с наименьшим количеством счетчиков:

Код: Выделить всё

counts = (
df.with_columns(bin=pl.col("target").arr.get(2).cut(breaks))
.with_columns(counter=pl.int_range(pl.len()).over("bin"))
.group_by("bin")
.agg(pl.col("counter").max())
.filter(pl.col("counter") > 0)  # 

Подробнее здесь: [url]https://stackoverflow.com/questions/79549881/how-to-resample-a-dataset-to-achieve-a-uniform-distribution[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»