Как выполнить условную сортировку в PolarsPython

Программы на Python
Ответить
Anonymous
 Как выполнить условную сортировку в Polars

Сообщение Anonymous »

Я выполняю бинарную классификацию и хочу вручную просмотреть случаи, когда модель либо сделала неверное предположение, либо оно было правильным, но с низкой достоверностью. Я хочу, чтобы сначала появлялись наиболее уверенные неправильные прогнозы, затем менее уверенные прогнозы, а затем правильные прогнозы, отсортированные от наименее к наиболее достоверным. Я хочу вручную проверить эти примеры, чтобы увидеть, есть ли закономерность в типах примеров, в которых модель нуждается в помощи. Мой реальный проект включает в себя изображения, созданные с помощью Stable Diffusion, поэтому я могу создавать более целевые обучающие примеры, если вижу закономерности.
Вот упрощенный пример моих данных.

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

import polars as pl

df = pl.from_repr("""
┌──────────┬───────┬────────────┬────────────┬────────────────────┐
│ name     ┆ truth ┆ prediction ┆ confidence ┆ correct_prediction │
│ ---      ┆ ---   ┆ ---        ┆ ---        ┆ ---                │
│ str      ┆ i64   ┆ i64        ┆ f64        ┆ i32                │
╞══════════╪═══════╪════════════╪════════════╪════════════════════╡
│ Alice    ┆ 1     ┆ 1          ┆ 0.343474   ┆ 1                  │
│ Bob      ┆ 0     ┆ 1          ┆ 0.298461   ┆ 0                  │
│ Caroline ┆ 1     ┆ 1          ┆ 0.420634   ┆ 1                  │
│ Dutch    ┆ 0     ┆ 0          ┆ 0.125515   ┆ 1                  │
│ Emily    ┆ 1     ┆ 0          ┆ 0.772971   ┆ 0                  │
│ Frank    ┆ 0     ┆ 1          ┆ 0.646964   ┆ 0                  │
│ Gerald   ┆ 0     ┆ 0          ┆ 0.833705   ┆ 1                  │
│ Henry    ┆ 1     ┆ 1          ┆ 0.837181   ┆ 1                  │
│ Isabelle ┆ 1     ┆ 1          ┆ 0.790773   ┆ 1                  │
│ Jack     ┆ 0     ┆ 0          ┆ 0.144983   ┆ 1                  │
└──────────┴───────┴────────────┴────────────┴────────────────────┘
""")
Эмили должна появиться первой, потому что она относится к неправильной классификации с наибольшей достоверностью. После других неправильных предсказаний Датч должен появиться следующим, поскольку его правильное предположение имеет наименьшую достоверность.

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

expected = pl.from_repr("""
┌──────────┬───────┬────────────┬────────────┬────────────────────┐
│ name     ┆ truth ┆ prediction ┆ confidence ┆ correct_prediction │
│ ---      ┆ ---   ┆ ---        ┆ ---        ┆ ---                │
│ str      ┆ i64   ┆ i64        ┆ f64        ┆ i64                │
╞══════════╪═══════╪════════════╪════════════╪════════════════════╡
│ Emily    ┆ 1     ┆ 0          ┆ 0.772971   ┆ 0                  │
│ Frank    ┆ 0     ┆ 1          ┆ 0.646964   ┆ 0                  │
│ Bob      ┆ 0     ┆ 1          ┆ 0.298461   ┆ 0                  │
│ Dutch    ┆ 0     ┆ 0          ┆ 0.125515   ┆ 1                  │
│ Jack     ┆ 0     ┆ 0          ┆ 0.144983   ┆ 1                  │
│ Alice    ┆ 1     ┆ 1          ┆ 0.343474   ┆ 1                  │
│ Caroline ┆ 1     ┆ 1          ┆ 0.420634   ┆ 1                  │
│ Isabelle ┆ 1     ┆ 1          ┆ 0.790773   ┆ 1                  │
│ Gerald   ┆ 0     ┆ 0          ┆ 0.833705   ┆ 1                  │
│ Henry    ┆ 1     ┆ 1          ┆ 0.837181   ┆ 1                  │
└──────────┴───────┴────────────┴────────────┴────────────────────┘
""")
Я перехожу с Pandas на Polars и не могу понять, как выполнить эту сортировку. Согласно документации, вы можете использовать выражение с помощью sort(), но неясно, как включить в выражение оператор if. Я также был бы готов вычислить новый столбец сортировки, а затем выполнить для него простую функцию sort(), если есть какая-то формула, которая будет делать то, что я хочу.
Я знаю, что могу разделить DataFrame на корректные_предсказания и некорректные_предсказания, использовать для каждого из них разную логику сортировки, а затем снова объединить их вместе concat(). Я ищу что-то более элегантное и менее беспорядочное.

Подробнее здесь: https://stackoverflow.com/questions/777 ... -in-polars
Ответить

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

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

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

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

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