Форум программистов, компьютерный форум, киберфорум
Искусственный интеллект
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 19.12.2016
Сообщений: 15
1

Классификатор определяет все объекты в один класс

01.11.2020, 02:24. Показов 1135. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья, может кто прояснить за возможные причины определения всех объектов в один класс после обучения модели?
Я дилетант в этих вопросах, но хочу разобраться))
У меня на ум приходят:
1. Преобладание части классов относительно других в обучающей выборке
2. Неверно подобранные гиперпараметры.
3. Неверно закодированные данные.

И еще один вопрос: если ни одна из фичей не имеет корреляции (в районе [-0.2;0.2]) с функцией, есть ли вероятность, что модель, например нейронная сеть, найдет другие закономерности, если да, то какие еще существуют подходы проверки перспективности данных для успешного применения интеллектуальных методов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2020, 02:24
Ответы с готовыми решениями:

Один класс содержит объекты другого класса.
Один класс содержит объекты другого класса. Сделал так: // нужны объекты этого класса public...

Как обьединить все объекты в один?
Ненадо вопросов, таких как "зачем?" И не говорите, что не продуктивно и не правильно и тд. ...

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

Как выгрузить все объекты типа справочник в один xml файл?
как выгрузить все объекты типа справочник в один xml файл? записатьxml() -не подходит для этого....

11
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
01.11.2020, 12:19 2
Нейронные сети (backprop), да, боятся несбалансированных датасетов, но их можно сбалансировать. В сети валяются методички 7-8-10-15 методов балансировки датасетов.

Модель найдет любые закономерности в представленных данных, даже те, которых нет в общей выборке.

Подготовка данных и гиперпараметров да, имеют значение. Нормализованы входные значения?
1
0 / 0 / 0
Регистрация: 19.12.2016
Сообщений: 15
01.11.2020, 13:16  [ТС] 3
Да, входы нормализованы от 0 до 1. Выходы закодированы через one hot [0,0,1,0] и тд. Касательно несбалансированности там 5 классов и что-то около 400, 300, 250, 150, 100 примеров. Может это вообще мало для перцептрона.

Хочу ещё уточнить, если использовать другие алгоритмы, типа svm, логистической регрессии, деревьев, нужно для многоклассовой задачи несколько раз обучать модель (по one-vs-all) или есть в sklearn или других библиотеках функционал для этого?
0
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
01.11.2020, 14:03 4
Softmax попробуйте пристроить к выходу нейронки.

sklearn.linear_model.LogisticRegression позволяет multi_class настраивать (софтмакс или OvR).
А вот на счет нейронок не уверен.

Пишут, что для MLPClassifier можно активировать софтмакс так:
Python
1
your_model.out_activation_ = 'softmax'
0
578 / 411 / 68
Регистрация: 09.01.2018
Сообщений: 1,361
01.11.2020, 14:03 5
1. Не видя данных и не понимая вашей задачи ответить на ваш вопрос в принципе невозможно. Причина может быть в чем угодно - от неверно выбранной архитектуры нейронной сетки до просто ошибки на этапе подачи данных на вход. Говорить вот так, "за глаза", столь же непрофессионально как врачу ставить диагноз заочно.
2. Если фичей много и ни одна из них не имеет существенной корреляции, то многие алгоритмы классификации, включая нейросети, все равно могут выделить классы.
3. Про несбалансированность данных - уже сказали. Но вот по количеству - для нейросети может оказаться и мало. А вот для других методов машинного обучения - вполне достаточно. Кстати, указанные пропорции(!!) данных между количеством элементов в классах я бы не назвал несбалансированными.
4. Нет, другие алгоритмы классификации не требуют несколько раз обучать модель. Если, конечно, не учитывать, необходимость проведения кросс-валидации.
5. В scikit-learn действительно реализовано очень большое количество различных методов классификации. И при ваших количествах данных и классов я бы именно с них начал. Нейросети - это вообще говоря всего-лишь один из возможных инструментов, и их применение реально целесообразно там, где другие методы не работают, а не где не попадя.
1
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,915
01.11.2020, 15:18 6
hopeless_i, примеры разных классов в обучающей выборке ПЕРЕМЕШАНЫ случайным образом?

Цитата Сообщение от hopeless_i Посмотреть сообщение
входы нормализованы от 0 до 1.


Цитата Сообщение от hopeless_i Посмотреть сообщение
прояснить за возможные причины определения всех объектов в один класс после обучения модели?
А во время обучения сетки - какая наблюдается динамика изменения точностей классификации разных классов (и всей обуч.выборки в целом)?
Ну и Вы в указанных=цитированных словах - имели в виду обучающую выборку? Или уже тестовую? Если тестовую - то финальную (если динамику не сможете показать) раскладку точностей по классам обуч.выборки рядом с поклассовой раскладкой точности на тесте - в студию!
0
0 / 0 / 0
Регистрация: 19.12.2016
Сообщений: 15
01.11.2020, 19:03  [ТС] 7
Mikhaylo, каким образом тогда я могу закодировать выходы для других методов? У меня идут оценки от 1 до 5. Для нейронки я просто через 01000 записывал двойку. Для других методов вроде так не работает.

Добавлено через 14 минут
passant,
1. Честно говоря, как раз и хотел получить общую информацию, не вдаваясь в детали задачи. А вообще задача с очередным датасетов кагла https://www.kaggle.com/mirosla... ple-survey .
В качестве фичей я выбрал столбцы, которые по логике характеризуют образ жизни человека: занятия спортом, алкоголь, частые тусовки, опрятность и т.д.
Отклик - это одна из фобий на выбор (самолёты, высота, пауки, змеи, общение с людьми).
Все они оцениваются по шкале от 1 до 5.
5. С них и начинал. Там либо сваливались в один класс, либо возвращало точность и полноту < 0.5, а MSE ~ 1.
Но там и выходы были в виде 1,2..,5. Выше задал вопрос, как это правильно кодировать.
Именно поэтому я и спросил про обучение несколько раз, так как почитал про многоклассовую классификацию и там рекомендуют походы типа one vs all, когда нужно каждый класс брать за 1 против всех - 0.

Добавлено через 10 минут
VTsaregorodtsev, под обучающей выборкой подразумевал train. Данные там да - идут в рандомном порядке. Точность для train и test я могу скинуть, но зачем, если в итоге все скидывает в 00100 - в 3 класс))
0
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
01.11.2020, 20:37 8
Цитата Сообщение от hopeless_i Посмотреть сообщение
Но там и выходы были в виде 1,2..,5. Выше задал вопрос, как это правильно кодировать.
Именно поэтому я и спросил про обучение несколько раз, так как почитал про многоклассовую классификацию и там рекомендуют походы типа one vs all, когда нужно каждый класс брать за 1 против всех - 0.
Первый метод - label-encoding, второй - one-hot encoding.
Ответ на вопрос: почему one-hot encoding лучше label-encoding надо запомнить на всю жизнь начинающим датасайентистам.
Все методы машинного обучения работают на предположении, что при небольшом изменении величины общая картина процесса практически не меняется.
Кодирование label-encoding производится фактически случайно (примерно почти как в СУБД происходит выдача ID записям). Это значит, что два сильно отличающихся состояния могут иметь близкие значения, а два близких - дальние значения. Это усложняет для методов МО анализ закономерностей.
Если у вас есть возможность закодировать состояния правильно (естественным образом), то label-encoding окажется более простым и будет экономить память по сравнению one-hot-encoding. Но очень редко, когда это возможно сделать. Поэтому метод label-encoding бросьте в мусорку, в вашем случае однозначно.
One-hot-encoding всегда естественен для методов МО, у него [0.1, 0.8, 0.0, 0.0, 0.1] будут сигнализировать, что состояния 1, 2 и 5 близки друг к другу, а состояния 4 и 5 антагонистичны, хотя раздача порядковых номеров признакам осуществлялась также случайно.

Цитата Сообщение от hopeless_i Посмотреть сообщение
каким образом тогда я могу закодировать выходы для других методов? У меня идут оценки от 1 до 5. Для нейронки я просто через 01000 записывал двойку. Для других методов вроде так не работает.
Давайте конкретные алгоритмы рассматривать. Вот логистическая регрессия (которая на самом деле классификация)... Если вы возьмете ее и несколько раз повторите, то она будет классифицировать one-hot-набор нужной вам длины. Но там проблема: надо чтобы был не просто набор отдельных выходов (multilabel), а как-то объяснить алгоритму, что каждый выход противоречит остальным, т.е. заставить его принять условие нормировки вероятностей. Для этого и придуман софтмакс.

P.S. Я немного не догоняю, что из академической теории вам непонятно.

Цитата Сообщение от Mikhaylo Посмотреть сообщение
Но очень редко, когда это возможно сделать.
Цитата Сообщение от hopeless_i Посмотреть сообщение
самолёты, высота, пауки, змеи, общение с людьми
Представьте себе, что вам нужно сделать label-encoding натуральным образом. Как правильно расположить, чтобы эти пять признаков располагались похожие рядом, а сильно отличающиеся далеко?
В принципе интуиция подсказывает, что этот порядок, в принципе, один из самых оптимальных: "самолёты" и "высота" рядом, "пауки" и "змеи" рядом, но трудно сказать, куда лучше поместить "общение с людьми" - в начало или посередине между первыми парами. Не говорю о том, какой порядок выбрать внутри тех пар по отношению к остальным признакам.
В общем задача label-encoding плохо решаема.

Другой пример: допустим служба общественного мнения провела опрос. Получили ответы: да, скорее всего да, не знаю, скорее всего нет, нет.

В этом случае label-encoding получается натуральным (естественным): 0 - да, 1 - скорее всего да, 2 - не знаю, 3 - скорее всего нет, 4 - нет. One-hot-encoding в данном случае будет избыточным.

Ну и добью окончательно практикум: кодировка навроде "0 - да, 1 - нет, 2 - скорее всего да, 3 - скорее всего нет, 4 - не знаю" будет ненатуральной и ухудшит процесс обучения. Вся экономия памяти пойдет насмарку, вместо этого поимеете проблему того, что для алгоритма потребуется больше обучающих примеров, которые по сути позволят перерасставить метки по своим натуральным местам. Оно вам надо??? Помогите алгоритму с информацией! One-hot-encoding дает больше информации. Сравните: [0.1, 0.8, 0.0, 0.0, 0.1] -что тут известно о 5-ом признаке и что тут [1.9] в случае label-encoding?
1
0 / 0 / 0
Регистрация: 19.12.2016
Сообщений: 15
01.11.2020, 22:02  [ТС] 9
Mikhaylo, благодарность за развернутый ответ!
Наверное я не совсем понятно изложил. Там в рамках одной задачи берется одна фобия, то есть Y - это либо боязнь высоты, либо самолётов и т.д. К примеру, выбрал я пауков. И эта величина характеризуется числом от 1 до 5, как вы описали. Для перцептрона логично представить ее через one-hot и иметь на выходе 5 нейронов. А для логистической регрессии (классификации) такое кодирование ведь не подойдёт? Там же строго число подаётся на выход. А мне показалось, что такое кодирование 0 - сильно боюсь, 1 - боюсь, 2 - побаиваюсь, 3 - почти не боюсь, 4 - не боюсь будет не очень правильным, т.к. иметь на выходе 1.5 - фигня какая-то Есть другие варианты?)
Я так понял, один из вариантов брать "сильно боюсь" за 1, остальные за 0, потом "боюсь" за 1, остальное за 0. И 5 раз обучать модель.
0
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
01.11.2020, 22:58 10
А что? Простой алгоритм, который округляет до ближайшего значения, не имеет право на жизнь?
0
0 / 0 / 0
Регистрация: 19.12.2016
Сообщений: 15
01.11.2020, 23:51  [ТС] 11
Mikhaylo, вот это я и хотел узнать)) например, я в свое время реализовывал SVM. И там строго классы обозначались, как 1 и -1. Там эти значения имели ключевую роль. One hot encoding тоже выглядит логично. 001 значит объект относится только к 3 классу. А вот, когда возвращается 1.5 - мой мозг отвергает это. Просто я таким образом и обучил логистическую регрессию, деревья и gbm, а в итоге точность все равно низкая. Поэтому и возникло сомнение, что так можно.
Так как шкала отклика порядковая, планирую сделать 3 класса вместо 5, 1,2 / 4,5 / 3.
0
646 / 522 / 72
Регистрация: 20.09.2014
Сообщений: 3,356
02.11.2020, 18:26 12
Цитата Сообщение от hopeless_i Посмотреть сообщение
А вот, когда возвращается 1.5 - мой мозг отвергает это.
В некоторых случаях не отвергает. Когда классы сводятся к целочисленной регрессии (если так угодно выражаться).
0
02.11.2020, 18:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2020, 18:26
Помогаю со студенческими работами здесь

Класс Queue. За один просмотр файла напечатать сначала все символы, отличные от цифр, а затем все цифры
Доброго времени суток! Прошу помочь с решением следующей задачи: Дан текстовый файл. За один...

Описать абстрактный класс породить от него еще два,один должен остаться абстрактным,другой должен быть способен пораждать объекты
Знает кто как сделать?

IntelliJ IDEA. Всё время компилируется один и тот же класс
Добрый день. Учу Java SE. Хардкора ради писал код в блокнотике. Компилировал в консоли....

Удалить все объекты и создать объекты - потомки
Как сделать клоны объекта в другом объекте? Использую метод Instantiate Есть метод public...

Добавить класс в один из элементов уже имеющий класс
Всем привет. Возникла проблема и никак с ней не справлюсь. Очень срочно нужно! Помогите...

Область видимости. один класс не видит другой класс
Добрый день! такая проблема. Есть базовый класс Q. От него наследуется 2 класса Р и G. Класс P...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru