Как стать автором
Обновить
859.77
OTUS
Цифровые навыки от ведущих экспертов
Сначала показывать

Синтетическое генерирование данных (SMOTE)

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1K

Привет, Хабр!

В далеком 2002 году, когда многие из нас еще тусовались на IRC и мечтали о широкополосном интернете, Нитеш Чавла и его команда представили миру SMOTE. Этот алгоритн решал реальную и больную проблему — несбалансированность классов в обучающих данных.

Почему несбалансированные данные — это большая проблема? К примеру у нас есть набор данных, где один класс значительно преобладает над другим. В такой ситуации наша ml моделька может просто "забить" на малочилсенный класс, сосредоточившись на многочисленном. Это приводит к ситуации, когда модель хорошо работает на общем уровне, но плохо распознаёт важные исключения или редкие случаи.

SMOTE не просто дублирует минорные классы, как это делает простой oversampling, он создает новые, синтетические примеры, которые помогают модели лучше понять и обобщить характеристики минорных классов.

Читать далее
Всего голосов 8: ↑7 и ↓1+6
Комментарии1

Тестирование баз данных

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров4.3K

Тестирование баз данных включает в себя тестирование методом «чёрного ящика», «белого ящика» и набор требований ACID — атомарность, согласованность, изоляция и устойчивость. В этом руководстве я объясню все необходимые определения, расскажу, как оно проводится, и приведу примеры.

Читать далее
Всего голосов 19: ↑13 и ↓6+7
Комментарии3

В общих чертах про функциональное программирование в Rust

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров6.6K

Привет, Хабр!

Функциональное программирование предлагает такие концепции, как иммутабельность данных, чистые функции (т.е, результат работы которых зависит только от входных данных и не производят побочных эффектов), а также функции высшего порядка, которые позволяют работать с функциями так же, как с данными. Эти идеи вносят определенную строгость и предсказуемость.

Хоть Rust не является чистым функциональным языком программирования, однако он имеет множество инструментов, позволяющих применять функциональные принципы.

Rust поддерживает рекурсию, хотя и без оптимизации хвостовых вызовов, что является отступлением от некоторых традиционных функциональных языков, таких как Haskell. Тем не менее, язык предоставляет мощные абстракции и паттерны, такие как владение и заимствование.

Rust также поощряет иммутабельность данных по умолчанию, что является в целом базой ФП. Переменные в Rust иммутабельны по умолчанию, и язык требует явного указания mut, если хочется изменить значение.

Кроме того, Rust имеет поддержку функций высшего порядка и замыканий.

Читать далее
Всего голосов 18: ↑14 и ↓4+10
Комментарии6

Хранение загружаемых пользователями файлов

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров3.4K

В самом начале своей карьеры я имел честь в одно лицо разрабатывать проект, предназначенный для массового пользователя. Надо сказать, что почти все основополагающие принципы того, как провалить проект, были соблюдены, однако, он до сих пор жив. Проект был предназначен для принудительного использования определенной категорией работников бюджетной сферы. Технического задания, аналитики, дизайн-документов, макетов в Фигме, лавандового смузи, и прочих этих ваших модных слов, без которых N лет назад строили БАМ и Траннсиб не было от слова совсем. Зато, были процессы “в бумаге”, которые требовалось оцифровать. Поэтому то, что можно было принять за ТЗ, выглядело как “Эти (работники) заполняют вот это (бумаги) потом несут тем (проверяющим) а дальше все это хранится, сделай чтобы они с компьютера могли загрузить и отправить, у нас тут целый этаж бумагами занят, пожар начнется - всему хана”. Используя весь свой багаж знаний и опыта в построении высоконагруженных систем (на этом месте я отошел от написания статьи сначала проржаться а потом поплакать), я приступил к реализации.

Читать далее
Всего голосов 17: ↑14 и ↓3+11
Комментарии2

Кратко про алгоритм обучения Q-learning и как он реализуется в Python для новичков

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.9K

Привет, Хабр!

Q-learning — это алгоритм обучения с подкреплением, который позволяет агенту оптимизировать свою стратегию действий в динамичной среде, стремясь максимизировать сумму будущих наград. Агент исследует среду, принимая решения, основанные на предыдущем опыте, а не на предварительной модели мира.

В этой статье мы и рассмотрим этот алгоритм.

Читать далее
Всего голосов 10: ↑8 и ↓2+6
Комментарии0

Делаем макросы в Rust

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров5K

Привет, Хабр!

Rust имеет два основных типа макросов: декларативные и процедурные. Каждый из этих типов служит различным целям и предоставляет различные возможности манипуляции с кодом.

Декларативные макросы работают, сопоставляя заданные шаблоны с фактическим кодом и заменяя его на другой код во время компиляции. Что-то типо хорошей системы поиска и замены, но для исходного кода. Декларативные макросы подходят для задач, когда нужно избежать дублирования кода или когда нужно предоставить удобный синтаксис для повторяющихся задач.

А вот процедурные макросы уже имеют больше возможностей, они позволяют манипулировать абстрактным синтаксическим деревом кода, т.е можно анализировать, модифицировать и генерировать код на лету. Процедурные макросы могут быть разделены на три категории: атрибутивные макросы, макросы производных и функциональные макросы.

В этой статье мы как раз и рассмотрим то, как их пишут на Rust.

Начнем с декларативных!

Читать далее
Всего голосов 22: ↑16 и ↓6+10
Комментарии11

Препарируем Wazuh. Часть 1: Базовая установка

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4.8K

Тема SIEM решений с открытым исходным кодом постоянно проявляется на просторах сети. Одних интересуют SIEM системы как таковые, и хочется разобраться в решениях данного класса, но при этом не хочется связываться с тяжелыми и запредельно дорогими коммерческими SIEM. Другие не уверены, что им вообще нужен SIEM. Третьи хотят уйти с иностранных, не поддерживаемых официально в России решений. И наконец, множество организаций не располагают достаточным бюджетом для того, чтобы закупить коммерческий SIEM (не забываем, что помимо лицензий на SIEM нам потребуется еще потратиться на лицензии на поддержку и существенно вложиться в железо).   

О системе с открытым кодом Wazuh в русскоязычном интернете написано не так много статей и в большинстве своем они носят общий, описательный характер и не погружаются в технические особенности развертывания и эксплуатации данного решения.

Этой статьей мы начинаем цикл посвященный работе с Wazuh. Сегодня мы рассмотрим различные варианты развертывания Wazuh, а в последующих статьях поговорим о подключении источников под управлением Linux и Windows, о работе с правилами корреляции и другими основными моментами, связанными с использованием данного решения в качестве SIEM.

Читать далее
Всего голосов 12: ↑10 и ↓2+8
Комментарии0

Кратко про экосистему RAPIDS для работы с данными на GPU

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров808

Привет, Хабр!

RAPIDS — это open source библиотека экосистема, состоящая из нескольких библиотек, разработанная NVIDIA, которая предоставляет набор инструментов для выполнения всего цикла обработки данных и аналитики на GPU. RAPIDS была создана с целью того, чтобы ускорить анализ данных и работу в ML, используя всю мощь GPU, и делает это, предоставляя в целом привычный интерфейс, похожий на тот, к которому привыкли в Pandas, Scikit-learn и т.д.

RAPIDS основан на CUDA, архитектуре параллельных вычислений от NVIDIA. Операции, которые когда-то занимали минуты или часы на CPU, теперь могут быть выполнены за секунды на GPU, благодаря параллелизму и высокой пропускной способности памяти GPU.

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Комментарии0

Дескрипторы в Python

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров8.5K

Привет, Хабр!

Дескриптор — это объектовый атрибут с поведением, определяемым методами в его классе. Если просто — это способ, с помощью которого объект может контролировать доступ к его атрибутам, используя специально определенные методы __get__, __set__, и __delete__. Если говорить еще проще — дескрипторы позволяют задавать точки доступа к атрибутам объекта, добавляя дополнительную логику, когда атрибут читается, записывается или удаляется.

В этой статье поговорим подробней про дескрпиторы.

Читать далее
Всего голосов 12: ↑11 и ↓1+10
Комментарии3

Это мы юзаем: библиотека Optuna в Python для оптимизации гиперпараметров

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.3K

Привет, Хабр!

Гиперпараметры — это параметры, которые не учатся в процессе обучения модели. Они задаются заранее. От выбора гиперпараметров напрямую зависит качество и эффективность модели, а их оптимизация может улучшить результаты предсказаний.

Традиционный подход к оптимизации гиперпараметров включает в себя grid search и random search, иногда они могут быть неэффективными и времязатратными, особенно когда пространство гиперпараметров велико.

Когда я впервые столкнулся с необходимостью настроить сотни параметров в своей нейросети, задача показалась мне Сизифовым трудом. Каждый параметр мог значительно изменить результат, и пространство поиска казалось бесконечным. И немного просидев на стековерфлой я нашел либу Optuna, которая позоволила оптимизировать этот процесс.

Optuna решает проблему оптимизации гиперпараметров, предоставляя легковесный фреймворк для автоматизации поиска оптимальных гиперпараметров. Она использует алгоритмы, такие как TPE, CMA-ES, и даже поддерживает пользовательские алгоритмы.

Optuna полностью написана на Python и имеет мало зависимостей. В этой статье рассмотрим её основной функционал.

Читать далее
Всего голосов 21: ↑20 и ↓1+19
Комментарии2

Системное мышление: как упростить его развитие?

Время на прочтение9 мин
Количество просмотров14K


Научиться эффективно применять системное мышление довольно непросто. Многие умные люди слишком долго борются с парадигмой системного мышления, процессом мышления и методологией.

За последние 15 лет моей работы с профессионалами в сфере бизнеса и образования я пришёл к выводу, что эта дисциплина требует овладения целым набором навыков мышления.

Подобно опытному баскетболисту, который на автомате применяет множество отдельных навыков, необходимых для выполнения броска в игре — таких как ведение мяча на бегу и не смотря на мяч, выбор времени и точное координирование броска, продвижение мяча к корзине одной рукой, избегая при этом блокировки со стороны защитников, — «ветераны» системного мышления не осознают, что на самом деле применяют целый набор мыслительных навыков. Выделив эти отдельные компетенции, можно практиковать каждый навык в отдельности. Такой подход поможет овладеть всеми необходимыми навыками до того, как вы попытаетесь соединить их воедино в реальной ситуации.
Читать далее
Всего голосов 24: ↑21 и ↓3+18
Комментарии14

ChatGPT и отзывы на приложение: Анализ тональности для улучшения пользовательского опыта

Время на прочтение10 мин
Количество просмотров1.3K

Привет, дорогие читатели Хабра!

Сегодня я хочу поделиться с вами своими знаниями и опытом в области анализа данных и машинного обучения, освещая увлекательную и актуальную тему – анализ отзывов на приложения с использованием модели ChatGPT. Этот подход открывает новые горизонты для понимания тональности отзывов, что является ключевым аспектом в изучении общественного мнения.

В этой статье я расскажу о том, как можно использовать возможности Natural Language Processing (NLP) для анализа отзывов, собранных из приложения AppStore. Я исследую, как каждый отзыв, содержащий дату, заголовок, текст и оценку пользователя, может быть преобразован в ценные данные для обучения модели анализа тональности. Эта модель будет способна классифицировать отзывы как положительные, негативные или нейтральные, предоставляя нам глубокое понимание эмоциональной окраски пользовательских мнений.

Читать далее
Всего голосов 10: ↑7 и ↓3+4
Комментарии1

Основы Event Loop в JavaScript

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров6.5K

В JS Event Loop позволяет непрерывно проверять, есть ли в очереди задачи, и, когда стек вызовов пуст, передавать эти задачи на выполнение. Таким образом, долгие операции не мешают продолжению выполнения кода. Именно благодаря Event Loop приложение может оставаться отзывчивым, позволяя юзерам продолжать взаимодействие с интерфейсом, пока в фоне выполняются тяжелые задачи.

Возможно, у кого‑то возникнет иллюзия параллелизма, хотя на самом деле в любой момент времени выполняется только одна задача.

В этой статье мы рассмотрим, как реализовать Event Loop в JavaScript.

Читать далее
Всего голосов 21: ↑16 и ↓5+11
Комментарии10

Знакомьтесь, SafeTest — новый подход к тестированию фронтенда

Время на прочтение8 мин
Количество просмотров3.8K


В этой статье мы поговорим о SafeTest — революционной библиотеке, которая предлагает свежий взгляд на сквозные (E2E) тесты для веб-приложений с пользовательским интерфейсом.
Читать далее
Всего голосов 19: ↑18 и ↓1+17
Комментарии2

Компиляция на этапе выполнения в C++: constexpr, consteval и constinit

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров7K

Сегодня мы поговорим о том, как constexpr, consteval, и constinit позволяют реализовывать компиляцию на этапе выполнения. Компиляция на этапе выполнения позволяет ускорить выполнение кода за счет выполнения расчетов на этапе компиляции, а не в рантайме.

constexpr делает возможным вычисление значений переменных во время компиляции. Функции и переменные, объявленные с этим ключевым словом, могут быть вычислены на этапе компиляции consteval усиливает концепцию constexpr, требуя обязательного вычисления выражений во время компиляции. constinit используется для инициализации статических и глобальных переменных.

А теперь подробней.

Читать далее
Всего голосов 27: ↑16 и ↓11+5
Комментарии31

Мигрируем с SQL Server на PostgreSQL двумя способами

Время на прочтение6 мин
Количество просмотров7.4K

Будучи одной из самых популярных баз данных, SQL Server славится простотой установки и настройки, функциями безопасности, среди которых есть шифрование, великолепными возможностями восстановления данных и множеством удобных инструментов.

Однако из-за ряда ограничений SQL Server постепенно теряет своих пользователей. SQL Server имеет достаточно сковывающую лицензию и стоимость обслуживания, растущую по мере увеличения размера базы данных или числа клиентов. Ее максимальный размер составляет 10 ГБ, а буферный кэш — 1 МБ. Она работает только под Windows.

Переманить же пользователей SQL Server может PostgreSQL — полностью бесплатная база данных с открытым исходным кодом. Эта база данных может похвастаться поддержкой международного сообщества и доступна под Windows, Mac, Linux, FreeBSD и Solaris. Кроме того, для нее существуют множество опенсорсных дополнений.

Я начну эту статью со знакомства с двумя бесплатными инструментами для миграции с SQL Server на PostgreSQL, затем поэтапно продемонстрирую, как выполнить миграцию между этими двумя базами данных, а в конце расскажу о полноценном решении для резервного копирования с защитой для управления сразу несколькими базами данных.

Читать далее
Всего голосов 20: ↑11 и ↓9+2
Комментарии10

Укрощаем DNS в Wireshark. Часть 2

Время на прочтение4 мин
Количество просмотров2.4K

В предыдущей статье мы начали рассматривать использование анализатора пакетов Wireshark для работы с DNS. В этой мы продолжим рассмотрение данной темы и поговорим о рекурсии DNS. Здесь принцип обмена пакетами будет немного сложнее, потому что помимо обмена DNS пакетами между клиентом и сервером будет также обмен с авторитетным DNS сервером.

Система разрешения доменных имен имеет иерархическую структуру и все DNS-cepвepы должны быть в состоянии связываться друг с другом, чтобы получать ответы на запросы, отправляемые клиентами. И совершенно очевидно, что локальный DNS сервер не может знать информацию об узлах во всех доменных зонах. Тогда в дело вступает рекурсивный DNS сервер.

Читать далее
Всего голосов 17: ↑11 и ↓6+5
Комментарии2

Синглтоны в Java

Время на прочтение4 мин
Количество просмотров5K

В этом кратком руководстве мы рассмотрим два наиболее популярных способа реализации синглтонов в Java.

Читать далее
Всего голосов 23: ↑16 и ↓7+9
Комментарии25

Монады как строительные блоки функционального Java

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров4.9K

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

Читать далее
Всего голосов 17: ↑11 и ↓6+5
Комментарии13

Как построить хороший Vision продукта, используя Lean Canvas?

Время на прочтение5 мин
Количество просмотров1.6K

Многие продакт-менеджеры тонут в сотне документах, которые приходится постоянно обновлять. Картинка, создающая целостное понимание по продукту, теряется или тратится много времени на то, чтобы её собрать. Целевая аудитория, исследования — в одном месте, метрики — в другом и так далее.

Есть отличный и наверняка многим известный инструмент, который позволяет создать и постоянно держать перед глазами картинку по своему продукту — это Lean Canvas. Давайте разберёмся: из каких частей состоит Lean Canvas и как с ним работать?

Читать далее
Всего голосов 15: ↑10 и ↓5+5
Комментарии0

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS