0 / 0 / 0
Регистрация: 19.12.2016
Сообщений: 15
|
|
1 | |
Классификатор определяет все объекты в один класс01.11.2020, 02:24. Показов 1135. Ответов 11
Метки нет (Все метки)
Друзья, может кто прояснить за возможные причины определения всех объектов в один класс после обучения модели?
Я дилетант в этих вопросах, но хочу разобраться)) У меня на ум приходят: 1. Преобладание части классов относительно других в обучающей выборке 2. Неверно подобранные гиперпараметры. 3. Неверно закодированные данные. И еще один вопрос: если ни одна из фичей не имеет корреляции (в районе [-0.2;0.2]) с функцией, есть ли вероятность, что модель, например нейронная сеть, найдет другие закономерности, если да, то какие еще существуют подходы проверки перспективности данных для успешного применения интеллектуальных методов?
0
|
01.11.2020, 02:24 | |
Ответы с готовыми решениями:
11
Один класс содержит объекты другого класса. Как обьединить все объекты в один? На вход игрока в один Trigger реагируют все объекты с триггером Как выгрузить все объекты типа справочник в один xml файл? |
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 можно активировать софтмакс так:
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, примеры разных классов в обучающей выборке ПЕРЕМЕШАНЫ случайным образом?
А во время обучения сетки - какая наблюдается динамика изменения точностей классификации разных классов (и всей обуч.выборки в целом)? Ну и Вы в указанных=цитированных словах - имели в виду обучающую выборку? Или уже тестовую? Если тестовую - то финальную (если динамику не сможете показать) раскладку точностей по классам обуч.выборки рядом с поклассовой раскладкой точности на тесте - в студию!
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 |
Первый метод - 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 антагонистичны, хотя раздача порядковых номеров признакам осуществлялась также случайно. Давайте конкретные алгоритмы рассматривать. Вот логистическая регрессия (которая на самом деле классификация)... Если вы возьмете ее и несколько раз повторите, то она будет классифицировать one-hot-набор нужной вам длины. Но там проблема: надо чтобы был не просто набор отдельных выходов (multilabel), а как-то объяснить алгоритму, что каждый выход противоречит остальным, т.е. заставить его принять условие нормировки вероятностей. Для этого и придуман софтмакс. P.S. Я немного не догоняю, что из академической теории вам непонятно. Представьте себе, что вам нужно сделать 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 |
В некоторых случаях не отвергает. Когда классы сводятся к целочисленной регрессии (если так угодно выражаться).
0
|
02.11.2020, 18:26 | |
02.11.2020, 18:26 | |
Помогаю со студенческими работами здесь
12
Класс Queue. За один просмотр файла напечатать сначала все символы, отличные от цифр, а затем все цифры Описать абстрактный класс породить от него еще два,один должен остаться абстрактным,другой должен быть способен пораждать объекты IntelliJ IDEA. Всё время компилируется один и тот же класс Удалить все объекты и создать объекты - потомки Добавить класс в один из элементов уже имеющий класс Область видимости. один класс не видит другой класс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |