![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 7 Регистрация: 2.07.2020 Пользователь №: 39533 ![]() |
Добрый день.
Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1) Есть огромная куча предикторов(независимых переменных), все они категориальные, и известно, что выборка содержит в себе несколько сегментов, в которых поведение предсказываемых классов будет существенно отличаться. Количество сегментов неизвестно. Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания? Сообщение отредактировал smeilz - 7.07.2020 - 16:19 |
|
![]() |
![]() |
![]() |
![]()
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 1219 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
Добрый день. Есть очень большая выборка для бинарной классификации. Нужно предсказать 2 класса(0/1) Есть огромная куча предикторов(независимых переменных), все они категориальные, и известно, что выборка содержит в себе несколько сегментов, в которых поведение предсказываемых классов будет существенно отличаться. Количество сегментов неизвестно. Как грамотно найти эти сегменты и поделить выборку для дальнейшего предсказания? Ваша задача из разряда таких, которые требуют творческого подхода, т.е. одной технологии нет. Я согласен с ogurtsov, что раз внутри выборки есть какие-то сегменты, то логично начать с их поиска, т.е. кластеризации. Поскольку на выделение кластеров влияет набор показателей, то лучше сначала сократить пространство переменных, предварительно исключив метку класса (0/1) и искать кластеры уже в нём. Для качественных признаков наиболее распространённый способ редукции данных с обобщением - анализ соответствий (Correspondence Analysis), хотя мне он не особо нравится: даёт для некоторых показателей и объектов сильные выбросы или типа того, когда на ординационной диаграмме пара-тройка показателей по краям, а все остальные кучей в центре; причём те, что по краям часто показатели с небольшой долей редких категорий. Больше нравятся результаты оптимального шкалирования - нелинейного анализа главных компонент, обрабатывающих одновременно количественные, порядковые и номинальные признаки. Результаты интерпретируются аналогично PCA; можно посмотреть что за компоненты выделяются, постараться интерпретировать их, а уже в пространстве этих компонент можно поискать кластеры. Нет никакой гарантии, что эти кластеры и обусловливают различный характер поведения главного признака, но это тем не менее будут некие естественные группировки, что уже хорошо: с них можно начать. Далее нужно отмоделировать классы в каждом кластере. Раз предикторов много, то лучше использовать Случайный лес деревьев классификации (Random forest). Далее сопоставить оптимальные наборы предикторов в кластерах, возможно какие-то кластеры окажутся в этом отношении сходными - их объединять и осмысливать, опираясь на предыдущий этап. В принципе деревья классификации можно попробовать и к исходному набору предикторов и классов: вдруг оно окажется хорошо структурированным с небольшим количеством ветвлений, тогда задача будет решена вообще сразу. Я бы действовал примерно так, хотя по ходу возможны варианты. Если задача заключается не в том, чтобы разобраться, а в том, чтобы просто точно предсказывать, то может лучше обучить этому нейронную сеть? С сегментами внутри выборки она справится сама. Поскольку я всё время разбираюсь, опыта построения и оптимизации таких сетей не имею. Сообщение отредактировал nokh - 9.07.2020 - 21:14 |
|
![]() |
![]() |
![]()
Сообщение
#3
|
|
Группа: Пользователи Сообщений: 7 Регистрация: 2.07.2020 Пользователь №: 39533 ![]() |
Ваша задача из разряда таких, которые требуют творческого подхода, т.е. одной технологии нет. Я согласен с ogurtsov, что раз внутри выборки есть какие-то сегменты, то логично начать с их поиска, т.е. кластеризации. Поскольку на выделение кластеров влияет набор показателей, то лучше сначала сократить пространство переменных, предварительно исключив метку класса (0/1) и искать кластеры уже в нём. Для качественных признаков наиболее распространённый способ редукции данных с обобщением - анализ соответствий (Correspondence Analysis), хотя мне он не особо нравится: даёт для некоторых показателей и объектов сильные выбросы или типа того, когда на ординационной диаграмме пара-тройка показателей по краям, а все остальные кучей в центре; причём те, что по краям часто показатели с небольшой долей редких категорий. Больше нравятся результаты оптимального шкалирования - нелинейного анализа главных компонент, обрабатывающих одновременно количественные, порядковые и номинальные признаки. Результаты интерпретируются аналогично PCA; можно посмотреть что за компоненты выделяются, постараться интерпретировать их, а уже в пространстве этих компонент можно поискать кластеры. Нет никакой гарантии, что эти кластеры и обусловливают различный характер поведения главного признака, но это тем не менее будут некие естественные группировки, что уже хорошо: с них можно начать. Далее нужно отмоделировать классы в каждом кластере. Раз предикторов много, то лучше использовать Случайный лес деревьев классификации (Random forest). Далее сопоставить оптимальные наборы предикторов в кластерах, возможно какие-то кластеры окажутся в этом отношении сходными - их объединять и осмысливать, опираясь на предыдущий этап. В принципе деревья классификации можно попробовать и к исходному набору предикторов и классов: вдруг оно окажется хорошо структурированным с небольшим количеством ветвлений, тогда задача будет решена вообще сразу. Я бы действовал примерно так, хотя по ходу возможны варианты. Если задача заключается не в том, чтобы разобраться, а в том, чтобы просто точно предсказывать, то может лучше обучить этому нейронную сеть? С сегментами внутри выборки она справится сама. Поскольку я всё время разбираюсь, опыта построения и оптимизации таких сетей не имею. Благодарю за подробный ответ. Для начала хочу уточнить, а есть ли анализ соответствий (Correspondence Analysis) в каком-нибудь пакете на R, пожалуй я с него бы и начал. Опыта в построении нейронных сетей не имею, так что пока это отложу. Скорее стоит задача при помощи интересной мне задачи, освоить универсальный подход к задачам машинного обучения. Как я понял умение правильно смотреть данные тоже признак профессионала. В предыдущем посте я описал своими словами то, что я сделал, так как я думаю, что код выкладывать тут пока не требуется. Сообщение отредактировал smeilz - 10.07.2020 - 15:16 |
|
![]() |
![]() |
![]() ![]() |