5 главных алгоритмов сэмплинга |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-07-26 10:35 Работа с данными — работа с алгоритмами обработки данных. И мне приходилось работать с самыми разнообразными на ежедневной основе, так что я решил составить список наиболее востребованных в серии публикаций. Эта статья посвящена наиболее распространённым способам сэмплинга при работе с данными. Простой случайный сэмплинг Допустим, если вы хотите сделать выборку, где каждый элемент имеет равную вероятность быть выбранным. Ниже мы выбираем 100 таких элементов из датасета.
Стратифицированный сэмплинг Допустим, нам нужно оценить среднее количество голосов за каждого кандидата на выборах. Голосование проходит в трёх городах: В городе A живёт 1 миллион рабочих В городе B живёт 2 миллиона художников В городе C живёт 3 миллиона пенсионеров Если мы попытаемся взять равновероятные выборки по 60 человек среди всего населения, то они наверняка будут разбалансированы относительно разных городов, а потому предвзяты, что приведёт к серьёзной ошибке в предсказаниях. Если же мы специально сделаем выборку из 10, 20 и 30 человек из городов A, B и C соответственно, то ошибка будет минимальной. На Python это можно сделать так:
Резервуарный сэмплинг Мне нравится такая формулировка задачи: Допустим, у вас есть поток элементов большого неизвестного размера, по которым можно итерироваться только один раз. Создайте алгоритм, произвольно выбирающий элемент из потока так, как если бы любой элемент мог быть выбран с равной вероятностью. Как это сделать? Допустим, нам надо выбрать 5 объектов из бесконечного потока, так чтобы каждый элемент в потоке мог быть выбран равновероятно.
Доказать, что каждый элемент мог быть выбран равновероятно можно математически. Как? Когда дело доходит до математики, лучше попытаться начать решение с небольшого частного случая. Так что давайте рассмотрим поток, состоящий из 3-х элементов, где нам нужно выбрать только 2. Мы видим первый элемент, сохраняем его в списке, так как в резервуаре ещё есть место. Мы видим второй элемент, сохраняем его в списке, так как в резервуаре ещё есть место. Мы видим третий элемент. Здесь становится интереснее. Мы сохраним третий элемент с вероятностью 2/3. Давайте теперь посмотрим итоговую вероятность первого элемента быть сохранённым: Вероятность вытеснения первого элемента из резервуара равна вероятности третьего элемента быть выбранным, умноженной на вероятность что именно первый элемент из двух будет выбран для вытеснения. То есть: 2/3 * 1/2 = 1/3 То есть конечная вероятность первого элемента быть сохранённым: 1 — 1/3 = 2/3 Абсолютно такую же логику можно применить и для второго элемента, распространив её в дальнейшем на большее количество элементов при увеличении резервуара. То есть каждый элемент будет сохранён с вероятностью 2/3 или в общем случае k/n. Случайный андерсэмплинг и оверсэмплинг ИсточникСлишком часто в жизни встречаются несбалансированные наборы данных. Широко применяемый в таком случае способ называется ресэмплинг (в русском переводе иногда говорят «передискретизация» — прим. перев.). Его суть заключается либо в удалении элементов из слишком большого набора (андерсэмплинг) и/или добавлении большего количества элементов в недостаточно большой набор (оверсэмплинг). Давайте для начала создадим какие-нибудь несбалансированные наборы.
Теперь случайный андерсэмплинг и оверсэмплинг мы можем выполнять вот так:
Андерсэмплинг и оверсэмплинг с использованием imbalanced-learn imbalanced-learn (imblearn) — это питоновская библиотека для борьбы с проблемами несбалансированных наборов данных. Она содержит несколько различных методов для проведения ресэмплинга. a. Андерсэмплинг с использованием Tomek Links: Один из предоставляемых методов называется «Tomek Links». «Links» в данном случае — пары элементов из разных классов, находящиеся поблизости. Используя алгоритм мы в конечном итоге удалим элемент пары из большего набора, что позволит классификатору отработать лучше. Источник
b. Оверсэмплинг со SMOTE: В SMOTE (Способ Передискретизации Синтезированных Меньшинств) мы создаём элементы в непосредственной близости от уже существующих в меньшем наборе. Источник
Но в imblearn существуют и другие способы андерсэмплинга (Cluster Centroids, NearMiss, и т.д.) и оверсэмплинга (ADASYN и bSMOTE), которые тоже могут пригодиться. Заключение Алгоритмы — кровь науки о данных. Сэмплинг — одна из важнейших областей в работе с данными и выше приведён только поверхностный обзор. Хорошо выбранная стратегия сэмплинга может потянуть весь проект за собой. Выбранная плохо приведёт к ошибочным результатам. Поэтому выбор нужно делать с умом. Источник: habr.com Комментарии: |
|