Я строю рабочий процесс для создания моделей машинного обучения (в моем случае, с использованием Python pandas
и sklearn
пакетов) из данных, извлеченных из очень большой базы данных (здесь, Vertica посредством SQL и pyodbc
), и критический шаг в этом процессе включает в себя отсутствие значения предикторов. Это просто в рамках единой платформы аналитики или статистики - будь то Python, R, Stata и т. Д. - но мне интересно, где лучше всего найти этот шаг в многоплатформенном рабочем процессе.
Это достаточно просто сделать в Python, либо с sklearn.preprocessing.Imputer
классом, используя pandas.DataFrame.fillna
метод, либо вручную (в зависимости от сложности используемого метода импутации). Но поскольку я собираюсь использовать это для десятков или сотен столбцов в сотнях миллионов записей, мне интересно, есть ли более эффективный способ сделать это напрямую через SQL заблаговременно. Помимо потенциальной эффективности выполнения этого в распределенной платформе, такой как Vertica, это даст дополнительное преимущество, поскольку позволит нам создать автоматизированный конвейер для построения «полных» версий таблиц, поэтому нам не нужно будет заполнять новый набор. пропущенных значений с нуля каждый раз, когда мы хотим запустить модель.
Я не смог найти много рекомендаций по этому поводу, но я думаю, что мы могли бы:
- создать таблицу замещающих значений (например, среднее значение / медиана / режим, общее или по группам) для каждого неполного столбца
- соедините таблицу замещающих значений с исходной таблицей, чтобы назначить замещающее значение для каждой строки и неполного столбца
- используйте серию операторов case, чтобы получить исходное значение, если оно доступно, и замещающее значение в противном случае
Разумно ли это делать в Vertica / SQL, или есть веская причина не беспокоиться и просто обрабатывать это в Python? И если последнее, есть ли веские основания для этого в пандах, а не в склеарне или наоборот? Благодарность!
источник
Therriault, очень рад слышать, что вы используете Vertica! Полное раскрытие, я главный ученый данных там :). Рабочий процесс, который вы описываете, является именно тем, с чем я сталкиваюсь довольно часто, и я искренне верю в предварительную обработку этих очень больших наборов данных в базе данных перед любой работой pyODBC и pandas. Я бы предложил создать представление или таблицу с помощью файлового запроса, чтобы обеспечить воспроизводимую работу. Удачи
источник