Алгоритм спящей сортировки (Sleep Sort) – один из самых необычных и забавных методов сортировки, придуманных одним из пользователей 4Chan в 2011 году. Идея алгоритма заключается в создании отдельного потока (или процесса) для каждого элемента входного массива. Каждый поток «засыпает» на время, пропорциональное значению соответствующего элемента массива. После «пробуждения» поток выводит свой элемент, тем самым формируя отсортированный массив. На первый взгляд, этот алгоритм представляет собой скорее курьез, нежели практичное решение для сортировки данных: он требует создания отдельного потока для каждого элемента – этот подход может быть ресурсоемким и неэффективным для больших массивов данных. Кроме того, он полагается на точность таймеров операционной системы, что может привести к неправильной сортировке в некоторых случаях. |
Так работает асинхронная спящая сортировка |
Но один весомый плюс в спящей сортировке точно есть: этот алгоритм является простой и понятной иллюстрацией концепций параллелизма и асинхронного программирования. Автор этого поста реализовал алгоритм с помощью asyncio, а так спящую сортировку можно сделать с использованием потоков Thread из модуля threading. |
🗃️ Как предотвратить утечку данных при работе с pandas и scikit-learn
|
Утечка данных – одна из главных проблем машинного обучения. Утечки происходят по разным причинам, – чаще всего они связаны с этими манипуляциями в pandas: - Импутация пропущенных значений – возникает при замещении пропущенных значений на основе всего набора данных, включая тестовую выборку. Значения для импутации должны основываться только на обучающих данных!
- Масштабирование признаков – при выполнении масштабирования признаков (нормализации, стандартизации и т. д.) на всем наборе данных в pandas, то информация о масштабе из тестовых данных «протекает» в процесс обучения модели. Необходимо масштабировать только на основе обучающей выборки.
- Кодирование категориальных признаков в one-hot вектор также может привести к утечке, если использовать все уникальные категории из набора, включая категории из тестовых данных. Этот метод не приводит к утечке только в одном случае – если известен фиксированный набор возможных категорий.
- Любые преобразования, использующие информацию из других строк, приводят к утечке данных, потому что данные из тестовой выборки «протекают» в процесс преобразования.
Чтобы предотвратить утечку, нужно выполнять такие преобразования не в pandas, а внутри scikit-learn – библиотека строго разделяет этапы обучения и применения преобразований, не допуская использования информации из тестовых данных при обучении: - Преобразователи scikit-learn имеют отдельные шаги обучения (fit) и применения (transform). Это позволяет выполнять преобразования данных только на обучающем наборе, а затем применять эти же преобразования как к обучающему, так и к тестовому набору данных.
- В объекте Pipeline методы fit и predict инкапсулируют вызовы fit_transform и transform таким образом, что они вызываются в нужное время и в правильной последовательности, предотвращая утечку.
- Функция cross_val_score выполняет разбиение данных на обучающую/тестовую выборки перед применением любых преобразований данных. Это гарантирует, что преобразователи обучаются только на временных обучающих наборах, создаваемых во время кросс-валидации, избегая использования тестовых данных.
Подробности – в статье How to prevent data leakage in pandas & scikit-learn. |
⚙️ Как использовать асинхронные корутины в качестве методов объектов
|
Корутины – особый вид функций, которые могут приостанавливать свое выполнение и возобновляться позже, не блокируя другие задачи. Они объявляются с помощью async def. Методы объектов также могут быть определены как корутины, что позволяет им использовать async/await синтаксис внутри своего кода. Автор статьи показывает, как превратить обычный метод класса в корутину, которая может использовать конструкцию await внутри своего кода, а также объясняет, почему нельзя вызывать такие корутины как обычные методы вне asyncio. |
WebLlama предназначена для создания мощных ИИ-агентов, способных просматривать веб-страницы, выполнять инструкции и взаимодействовать с пользователем в диалоговом режиме. Агенты могут выполнять различные действия и поручения в интернете – кликать по нужным кнопкам, вводить текст (комментарии, сообщения, посты), отправлять формы и поддерживать диалоги с реальными пользователями. |
По результатам теста WebLINX WebLlama заметно превосходит GPT-4V |
TagStudio – портативная, конфиденциальная, многофункциональная система для организации и поиска файлов. С помощью TagStudio можно легко создать мультимедийную библиотеку, где ничего не потеряется, каким бы огромным ни был объем контента – каждый элемент имеет описание, отмечен тегами по содержанию и мета-тегами. |
TagStudio отлично подходит для хранения нескольких терабайтов изображений и видео |
micro-musicgen – семейство микро-моделей для генерации странной (по словам самого автора) музыки. Модели не генерируют треки целиком, зато отлично подходят для экспериментов и создания необычных звуковых эффектов. |
TkForge позволяет создавать GUI с использованием библиотеки Tkinter путем простого перетаскивания элементов в Figma. Преимущества и основные возможности: - Простота использования – можно создать макет GUI в Figma, просто размещая на поверхности окна приложения различные элементы интерфейса – кнопки, текстовые поля, изображения и т. д. TkForge затем генерирует соответствующий код Python на Tkinter на основе этого макета.
- Полная интеграция с Figma позволяет использовать все преимущества платформы для прототипирования и дизайна интерфейсов.
- Поддержка различных элементов – распознает множество элементов Tkinter, включая текстовые надписи, кнопки, изображения, поля ввода, текстовые области, спинбоксы, фигуры (прямоугольники, окружности, овалы, линии) и т. д.
- Гибкая настройка элементов – можно задавать текст-заполнитель для полей ввода, устанавливать ориентацию и диапазон для ползунков (scale), менять цвета обводки и заливки для фигур и т. д.
- Два варианты использования – из графического приложения, где вы вводите токен Figma и ссылку на проект, а также из командной строки для более гибкой интеграции.
|
У TkForge есть удобный интерфейс |
🎸 Как предотвратить утечку состояния в Django
|
Админка Django имеет особенность, которая может привести к утечке состояния между HTTP-запросами. Речь идет об экземплярах класса ModelAdmin, которые используются для настройки интерфейса администрирования моделей в Django, а проблема заключается в том, что экземпляры ModelAdmin создаются один раз при импорте и повторно используются для всех последующих запросов. Это означает, что если разработчик хранит какие-либо данные в атрибутах экземпляра ModelAdmin, они могут влиять на последующие запросы, так как эти атрибуты сохраняются между запросами. Это может привести к утечке состояния и нежелательному поведению приложения. |
Автор этого поста предлагает два решения: - Оперативное – вместо хранения состояния в атрибутах экземпляра ModelAdmin, нужно сохранять данные в объекте request, который создается для каждого нового HTTP-запроса. Это гарантирует, что состояние не будет сохраняться между запросами.
- Постоянное – нужно создать пользовательские классы AdminSite и ModelAdmin, которые блокируют возможность добавления новых атрибутов к экземплярам ModelAdmin после их регистрации. Это решение предотвращает возможность непреднамеренного создания утечек состояния.
На этом все, до встречи через неделю!
|
|
|
Вы получили это письмо, потому что подписались на нашу рассылку. Если вы больше не хотите получать наши письма, нажмите здесь.
|
|
|
|