На картинке кошка или собака? Эмоции положительные или отрицательные? Кредит или не кредит? Как использовать подходящие модели машинного обучения для решения этих проблем?
проблема
После летних каникул свои вопросы откроет еще одна партия аспирантов. За последние несколько дней я получил наброски плана исследований, которые они присылали один за другим.
Некоторые из них намерены использовать машинное обучение для классификации.
Однако, судя по их текстовым описаниям, многие методы классификации машинного обучения все ещеполупонятый.
Учитывая предыдущие статьи, посвященные машинному обучению для решения проблем классификации, они часто нацелены на конкретные случаи задач. Кажется, что общие шаги и меры предосторожности проблемы классификации подробно не обсуждались. Поэтому я решил написать эту статью, чтобы помочь им разобраться.
Как и вы, они читатели моей колонки.
Если вы интересуетесь машинным обучением и реально сталкивались с задачами классификации, то я отвечу на часть возникающих у них вопросов, которые также могут быть вам полезны.
Итак, делюсь этой статьей и с вами. Надеюсь на помощь.
контролировать
Задачи контролируемого машинного обучения распространены. Основными моделями являются классификация и регрессия.
Типичным приложением для задач классификации является бинарная классификация.
Например, помощь в принятии решений: вы используете структурированные данные, чтобы определить, следует ли кредитовать определенного клиента;
Например, при анализе настроений вам необходимо различать положительную и отрицательную полярность эмоций через фрагмент текста;
Например, при распознавании изображений вы должны определить, является ли изображение кошкой или собакой.
Сегодня мы представим сначала,бинарная классификация, самый простой и распространенный сценарий применения машинного обучения.
Обратите внимание, что для классификации вам сначала нужны правильные данные.
Каковы соответствующие данные?
Это восходит к нашей широкой классификации машинного обучения.
классификационная задача, которая относится кПод наблюдениемучиться.
Характерной чертой контролируемого обучения является наличие маркеров.
Например, дайте вам 1000 изображений кошек и 1000 изображений собак, соедините их вместе, не помечая. так тыне могу классифицироватьиз.
Хотя можно позволить машине изучить характеристики разных картинок и позволить ей различать картинки.
Но это называетсякластеризация,принадлежатьнеконтролируемое обучение.
Бог знает, по каким признакам машина разделяет картинки.
В результате вы хотите, чтобы кошки были в одной категории, а собаки в другой.
Но когда машина захватывает функцию, она может предпочесть различать ее по цвету.
В результате белые кошки и белые собаки были помещены в одну категорию, а желтые кошки и желтые собаки - в другую. Очень отличается от того, что вы хотите.
Если вы заинтересованы в обучении без учителя, вы можете обратиться кКак извлечь темы из массивного текста с помощью Python?" статья.
Следовательно, чтобы классифицировать, должна быть отметка.
Но метка не упала с неба.
В большинстве случаев это люди, которые бьют его.
отметка
Этикетирование – специализированный и сложный труд.
Вы можете сделать это самостоятельно, вы можете получить помощь или использовать силу краудсорсинга.
Например, «индейский робот» Amazon (Amazon Mechanical Turk).проект.
Не обманывайтесь названием, это не проект искусственного интеллекта, а возможность для обычных людей подзаработать в свободное время.
Вы можете получать комиссионные за выполнение заданий для других. Очень важной частью задачи является ручная классификация и маркировка.
Итак, если у вас есть необработанные данные, но нет меток, вы можете просто накидать на них данные.
Объясните свои потребности и заплатите кому-нибудь, чтобы он отметил это для вас.
Подобных сервисов в Китае много.
Для этого рекомендуется найти известную платформу, чтобы качество отметки было более надежным.
Если вы все еще студент, вам может показаться, что цена таких услуг слишком высока и недоступна для отдельных лиц.
Ничего страшного. Если ваше исследование является частью финансируемого проекта, вы можете открыто попросить своего научного руководителя подать заявку на оплату сбора данных.
Но если ваше исследование носит личный характер, вам придется найти другой способ.
Многие студенты предпочитают полагаться на поддержку команды.
Например, попросите аспирантов более низкого уровня помочь с оценкой.
Они помогли вам опубликовать диссертацию и успешно закончить учебу. Ты должен угостить всех вкусной едой, не так ли?
учиться
Когда у вас есть метки, вы можете реализовать обучение с учителем и классифицировать.
Здесь мы поговорим о том, что называется «машинным обучением».
Имя модное.
На самом деле то, что он делает, называется «статистическим представлением информации».
Сначала поговорим о репрезентации.
Вашими входными данными могут быть структурированные данные, такие как различные физиологические показатели человека, это могут быть неструктурированные данные, такие как текст, звук или даже изображения, но то, что в итоге видит модель машинного обучения, — это ряд чисел.
Эти числа расположены в той или иной форме.
Может быть нульмерным, называемым скаляром;
Может быть одномерным, называемым вектором;
Может быть двухмерным, называемым матрицей (Matrice);
Может быть многомерным, называемым тензором (Tensor).
Однако независимо от того, сколько измерений имеют входные данные, если ваша цель — выполнить бинарную классификацию, то после простой или сложной модели конечный результат должен быть скалярным числом.
Ваша модель установит порог. Например 0,5.
Все, что превышает это число, классифицируется в одном месте.
Наоборот, он отнесен к другому месту.
Миссия завершена.
Так что же именно делает модель?
Его задача состоит в том, чтобы охарактеризовать входные данные в окончательный скаляр.
Если провести неуместную аналогию, т.к.вступительный экзамен в колледж.
Каждый ученик на самом деле уникален.
У каждого своя семья, свои мечты, свои переживания, свои истории.
Однако модель вступительного экзамена в вуз не может полностью и точно отразить все вышеперечисленные детали.
Он просто принимает листы ответов кандидатов в качестве входных данных и выводит окончательный общий балл.
Затем в качестве порога (критерия суждения) рисуется так называемая линия баллов при поступлении.
Соответствовать или превышать, допуск.
В противном случае нет приема.
Эта оценка является моделью вступительных экзаменов в колледж для каждого кандидата.представление информации.
Так называемые плюсы и минусы модели классификации на самом деле зависят от того, действительно ли модель достигает ожидаемого эффекта классификации.
Что такое хороший эффект классификации?
Человек, которого хочет нанять университет, принимается (True Positive, TP);
Люди, которых колледжи не хотят принимать, не допускаются (True Negative, TN).
Что такое эффект плохой классификации?
Человек, которого хотел завербовать университет, не был принят (ложноотрицательный результат, FN);
Были допущены люди, которых университет не хотел принимать (ложноположительный результат, FP).
В хорошей модели нужно попытаться увеличить соотношение TP и TN и уменьшить соотношение FN и FP.
Критерии оценки зависят от баланса данных вашей категории.
Баланс данных, например 1000 фотографий кошек, 1000 фотографий собак, может использовать ROC AUC.
Данные несбалансированные, например, есть 1000 фотографий кошек, но только 100 фотографий собак, вы можете использовать Precision и Recall или комбинацию двух оценок F1.
Из-за таких четких критериев оценки модель бинарной классификации не может удовлетвориться «классифицированным», а должна двигаться в направлении «лучших результатов классификации».
Способ сделать это — использовать статистические результаты для постоянного улучшения представления модели.
Поэтому параметры модели необходимо постоянно повторять.
За 40 лет после возобновления вступительных экзаменов в колледж формат, предметы, баллы, план ... включая политику добавления баллов и т. Д., Менялись. Это также можно рассматривать как итерацию модели.
«Представление» + «Статистика» + «Итерация», что в основном и называется «обучением».
Структурированный
Увидев это, я надеюсь, что у вас уже есть представление о техническом пути машинного обучения для задач бинарной классификации.
Давайте поговорим о конкретных формах операций и мерах предосторожности для разных типов данных.
Начнем с простейших структурированных данных.
Например"Занимать или не брать: как использовать Python и машинное обучение, чтобы решить?«В статье мы увидели информацию о клиенте.
При работе с такими данными в первую очередь необходимо обратить внимание на масштаб данных.
Если объем данных велик, можно использовать сложные модели.
Если объем данных невелик, приходится использовать простую модель.
Зачем?
Потому что чем сложнее модель, тем больше информации представляется.
Слишком много информации не всегда хорошо.
Потому что вы улавливаете либо сигнал, либо шум.
Если имеется много репрезентативной информации, но мало данных, которые он выучил, он может сформировать память для информации, которую он не должен запоминать.
В области машинного обучения это самый ужасный результат - переобучение (overfitting).
В переводе на человеческий язык это данные, которые были просмотрены, и эффект классификации превосходен; данные, которые не были просмотрены, имеют очень низкую производительность.
Берите пример с себя.
Вскоре после того, как я пошел в детский сад, мою маму наняли в качестве родителя.
Поскольку я написал Ханью Пиньинь под диктовку, я получил 0 баллов.
Учитель сказал, что подозревает, что я не доделала домашнее задание серьезно, что я в глубине души подумала, что баланс IQ ребенка недостаточен.
На самом деле, я много работал.
Каждый день учитель просил меня идти домой и молча писать содержание.
Но когда диктую, то строго в порядке "а о е и у...".
Поскольку я пишу так каждый день, я запоминаю не символы, соответствующие каждому произношению, а порядок их появления.
В конце, в классе, учитель продекламировал "а б в д е..."
У меня никакого саспенса не последовало.
Моя трагедия возникла из-за моей собственной ментальной модели, которая на самом деле повторяла только один фрагмент данных «a o e i u...». Повторяющиеся каждый день, что приводит к переоснащению, символы появляются для того, чтобы их узнавали и запоминали.
Поэтому, когда вы видите новую комбинацию, вы ничего не можете сделать.
Видите, переоснащение отстой.
После определения сложности модели необходимо еще выбрать подходящую модель классификации по количеству признаков.
Изображение выше взято из Scikit-learn, я перехватил часть модели «классификация», вы можете обратиться к ней.
Обратите внимание, что эффект модели фактически оценивается.
Например, согласно практическим результатам многолетнего конкурса Kaggle по науке о данных, Gradient Boosting Machine лучше, чем случайный лес, а случайный лес лучше, чем дерево решений.
Такое сравнение немного недоброе, потому что появление троицы тоже хронологическое.
Пусть дед и внук мчатся вместе, справедливость под вопросом.
Поэтому вам не рекомендуется переносить разные модели классификации и запускать их отдельно в статье, а потомГоризонтальный сравнительный тест.
Во многих случаях это не имеет смысла.
Хотя кажется, что работы много.
Но если вы обнаружите, что на вашем собственном наборе данных эффект дерева решений значительно лучше, чем у Gradient Boosting Machine, вам необходимо сообщить об этом в статье.
Хотя большинство рецензентов сочтет, что это должно бытьты просчитался.
Еще одна вещь, о которой следует знать, — это разработка функций.
Что такое функциональная инженерия?
Это ручной выбор функций или преобразование функций (комбинаций).
Например"Как ориентироваться на оттока клиентов с помощью Python и глубоких нейронных сетей?«В статье мы экранировали характеристики. Среди трех столбцов данных мы напрямую исключили:
- RowNumber: номер строки, это определенно бесполезно, удалите
- CustomerID: ID пользователя, выдается последовательно, удалить
- Фамилия: Имя пользователя, не влияет на отток, удалить
Перед формальным обучением вам необходимо разделить все имеющиеся у вас данные на 3 категории:
- Обучающий набор
- набор проверки
- тестовый набор
Когда я просматривал рукописи для журналов, я обнаружил, что многие авторы, использующие модели машинного обучения, как китайские, так и зарубежные, похоже, не совсем понимают цель этих коллекций.
Учебный набор позволяет вашей модели научиться использовать текущую комбинацию гиперпараметров (например, количество слоев нейронной сети, количество нейронов в каждом слое и т. д.).
Как говорится в анекдоте:
Machine Learning in a Nutshell:
Interviewer: what's you biggest strength?
Me: I'm a quick learner.
Interviewer: What's 11*11?
Me: 65.
Interviewer: Not even close. It's 121.
Me: It's 121.
Существование проверочного набора позволяет вам сравнивать различные варианты гиперпараметров, какой набор больше подходит для текущей задачи. Он должен использовать данные, которые не использовались в обучающем наборе.
После того, как проверочный набор поможет вам выбрать подходящие гиперпараметры, его историческая задача будет выполнена.
На этом этапе вы можете комбинировать набор для обучения и набор для проверки и тренироваться с окончательной комбинацией гиперпараметров для получения оптимальной модели.
Как работает эта модель?
Конечно, вам нужны другие данные, чтобы судить. Вот почему вы должны разделить еще один тестовый набор.
изображение
Франсуа Шоле привел в своей книге пример, который меня очень вдохновил, и я поделился с вами.
Предположим, вы видите такие необработанные данные:
Как вы делаете классификацию?
Некоторые ученики увидели, что это изображение, и сразу же решили пойти наСверточная нейронная сеть!
Не заморачивайся, подумай, а тебе действительно нужно "идти сразу в кувалду"?
По крайней мере, масштаб этого круга не имеет значения для нашей модели.
Вы можете использовать проектирование признаков, чтобы выразить его в виде координатной точки следующим образом:
Видите ли, после этого у вас сразу появляются структурированные данные.
Обратите внимание, что этот процесс преобразования не нужно выполнять вручную, его можно полностью автоматизировать.
Но вы, возможно, подумали о «лучшем» решении:
Да, таким образом, данные, выражающие время на часах, изменились с первоначальных 4 цифр только на 2.
Проблема, которую изначально нужно было решить с помощью сложной модели, заключается в том, что благодаря простому преобразованию инженерных признаков сложность и сложность значительно снижаются.
На самом деле, люди использовали инженерию признаков для классификации изображений.
В то время задача классификации изображений была чрезвычайно громоздкой, дорогостоящей, а результаты не были идеальными.
Извлеченные вручную функции также часто не обладают хорошей масштабируемостью и переносимостью.
Таким образом, в игру вступили глубокие сверточные нейронные сети.
Если у вас достаточно данных изображения, вы можете использовать «сквозное» обучение.
Так называемый «конец-в-конец» означаетне делай ничегоРазработка признаков, построение модели нейронной сети нужного масштаба и добавление в нее картинок.
Однако реальность часто бывает жестокой.
Больше всего вам нужно знать, что делать, когда не хватает фотографий.
В это время легко может произойти переоснащение.
Потому что глубокая нейронная сеть — типичная сложная модель.
На этом этапе вы можете попробовать следующие различные методы:
Сначала по возможности соберитеболееАннотированные картинки. Это самый простой способ, и вы должны предпочесть его, если стоимость приемлема.
Во-вторых, используйте увеличение данных. Название звучит мощно, но на самом деле это не что иное, как зеркальное отображение, обрезка, вращение и скручивание исходных данных. Таким образом, «новое» изображение должно быть помечено так же, как и старое изображение. Однако изменения в содержании изображения могут эффективно препятствовать тому, чтобы модель запоминала слишком много шума.
В-третьих, используйте трансферное обучение.
Так называемое трансферное обучение заключается в использовании модели, обученной другими, сохранении большинства слоев, начиная с входных данных (замораживание и сохранение сетевой структуры, такой как количество слоев, количество нейронов и значение веса) и только удалите последние несколько слоев и замените их Создайте свои собственные несколько слоев нейронных сетей для обучения на небольших данных.
Изображение выше также взято из работы Франсуа Шолле.
Такой подход требует меньше времени, дешевле и более эффективен. При переобучении количество картинок небольшое, легко переобучить. Но при трансферном обучении возможность переобучения значительно снижается.
Принцип на самом деле прост для понимания.
Уровень сверточной нейронной сети, чем ближе к входной позиции, тем детальнее выражены признаки, чем дальше назад, тем больше макросов.
Чтобы идентифицировать кошек и собак, начните с края фигуры;Опознать Дораэмона и Валл-И, опять же от края формы. Таким образом, нижний слой модели может бытьпринеси этоиспользовать.
То, что вы тренируете, — это только несколько последних слоев репрезентации. Структура простая, конечно, столько данных не нужно.
В-четвертых, внедрите традиционные методы, такие как отсев, регуляризация и ранняя остановка. Обратите внимание, что эти методы применимы не только к данным изображения.
Возьмите Dropout в качестве примера. Если модель запоминает много шума из-за своей сложности, то при обучении определенный процент нейронов каждый раз случайным образом "выбрасывается" (установите вес равным 0), тогда сложность модели снижается. И из-за случайности она более применима, чем твердая модель, которая уменьшает количество слоев и нейронов.
текст
Как упоминалось ранее, машины не распознают текст, только цифры.
Итак, чтобы сделать двоичную классификацию текста, вам нужно преобразовать текст в числа.
Этот процесс называется векторизацией.
Существует несколько способов векторизации. Его можно условно разделить на две категории:
Первая категория — бессмысленная конверсия. То есть преобразованное число является просто числом и не несет в себе другой семантической информации.
По таким вопросам мыКак обучить модель классификации тональности китайского текста с помощью Python и машинного обучения?, было представлено очень подробно.
Все, что вам нужно сделать, это токенизировать (если это китайский язык), векторизовать, удалить стоп-слова, а затем бросить это в модель классификации (такую как Наивный Байес или нейронная сеть), напрямую получить результаты и оценить их.
Однако в этом процессе очевидно отбрасывается большое количество семантической и порядковой информации.
Вторая категория — осмысленная конверсия. В настоящее время число, преобразованное из каждой языковой единицы (например, слова), часто представляет собой многомерный вектор.
Этот вектор вы можете сгенерировать, потренировавшись самостоятельно.
Однако такой вид обучения требует моделирования массивного корпуса.
Процесс моделирования является дорогостоящим, занимает огромное пространство для хранения и требует огромного объема вычислений.
Поэтому чаще используются результаты других, обученных на крупномасштабных корпусах. То есть слово, встраивающее модель предварительного обучения, которую мы ввели.
Для получения подробной информации см.Как обрабатывать естественный язык с помощью Python? (Spacy и встраивание слов)"и"Как вызвать предварительно обученную модель встраивания китайского слова с помощью Python и gensim?".
Обратите внимание: если у вас есть несколько предварительно обученных моделей на выбор, попробуйте выбрать ту, которая ближе к тексту, который вы пытаетесь решить.
В конце концов, предварительно обученные модели получаются из статистических результатов. Для двух очень разных корпусов значения слов в контексте также будут существенно различаться, что приведет к неточной характеристике семантики.
Если вам нужно учитывать такую информацию, как семантика и порядок языковых единиц в процессе классификации, вы можете сделать это:
Первым шагом является использование модели предварительного обучения с встраиванием слов для преобразования входного предложения в тензор, который решает семантическую проблему слов;
Второй шаг — построить классификатор с использованием модели одномерной сверточной нейронной сети (Conv1D) или модели рекуррентной нейронной сети (такой как LSTM).
Обратите внимание, что на этом этапе могут применяться две разные архитектуры нейронной сети. Но в целом при решении задач бинарной классификации первая (сверточная нейронная сеть) работает лучше.
Потому что сверточная нейронная сеть фактически полностью учла порядок слов, а здесь используется рекуррентная нейронная сеть, какая-то «большая бомбардировка комаров». Может легко произойти переоснащение, что приведет к снижению производительности модели.
воплощать в жизнь
Если вы понимаете общий процесс проблемы бинарной классификации и хорошо выбираете модель, то фактический процесс машинного обучения очень прост.
Для большинства распространенных проблем с машинным обучением вы можете использовать Scikit-learn для вызова моделей.
Обратите внимание, что на самом деле у каждой модели есть потребность в настройке параметров. Но для многих задач начальные параметры по умолчанию могут принести очень хорошие результаты.
Хотя Scikit-learn хорош, жаль, что он не смог хорошо поддерживать задачи глубокого обучения.
Поэтому, будь то проблема с классификацией изображений или текста, вам необходимо выбрать хорошую среду глубокого обучения.
Обратите внимание, что трудно сказать, хороша или плоха текущая основная структура глубокого обучения.
Ведь в такой турбулентной и конкурентной среде в сфере глубокого обучения «плохие» фреймворки (например, малофункциональные, с низкой производительностью) можно быстро исключить из игры.
Однако с точки зрения простоты использования фреймворки существенно различаются.
Абсолютная простота использования — Turi Create от Apple.
от"Как распознавать изображения с помощью Python и глубоких нейронных сетей?"и"Как найти примерные картинки с помощью Python и глубоких нейронных сетей?«В этих двух статьях вы должны были убедиться, что Turi Create настолько прост в использовании в распознавании изображений и запросе на сходство, что вы даже не знаете, что произошло, и задача решена.
Однако если вам нужно глубоко задать структуру нейросети, то Turi Create недостаточно.
В конце концов, цель его разработки — дать возможность разработчикам мобильных устройств Apple лучше использовать технологию глубокого обучения.
Для более общих исследований и практических задач глубокого обучения я рекомендую вам использовать Keras.
У него уже есть Theano, Tensorflow и CNTK в качестве серверных частей.
Сравнивая вышеприведенную семейную фотографию фреймворка глубокого обучения, вы должны увидеть, что Keras охватывает собственные фреймворки Google и Microsoft, занимая почти половину индустрии фреймворков глубокого обучения.
Если этот импульс сохранится, возможно, удастся объединить реки и озера.
Почему Керас такой сильный?
Потому что этому легко научиться.
Он прост и легок в освоении, что значительно снижает порог глубокого обучения.
Даже Джош Гордон, главный разработчик Tensorflow, уже считает, что вам вообще не нужно изучать сложный синтаксис Tensorflow.
Изучите Keras напрямую, используйте его для выполнения задачи и закончите.
Кроме того, для использования глубокого обучения вам может потребоваться аппаратная поддержка графического процессора. Эта вещь дороже. Рекомендуется использовать метод аренды.
"Как ускорить глубокое обучение Python с помощью облачного графического процессора?«FloydHub упомянул, что аренда на час стоит около 1 доллара. Просто зарегистрируйте аккаунтотдаватьвы 2 часа;
Что касается "Как бесплатно запустить среду глубокого обучения Python в облаке?Google Colab, упомянутый в , еще более щедр - до сих пор он былбесплатнопроверять.
Лайк пожалуйста лайк. Вы также можете подписаться на мой публичный аккаунт в WeChat и закрепить его."Юшу Жилан" (nkwangshyi).
Если вы интересуетесь наукой о данных, вы можете прочитать мою серию постов с учебными указателями "Как эффективно начать работу с наукой о данных?", есть более интересные задачи и решения.