В моем предыдущем блоге Машинное обучение — идентификатор пола с NLTK менее чем в 15 строках кода мы увидели, как построить модель машинного обучения для определения пола для любого заданного имени, и закончили этот блог, упомянув, что следующие моменты должны быть рассмотрены. в следующей части:

  1. Точность модели с тестовым набором данных
  2. Концепции переобучения и недообучения
  3. Анализ ошибок для обогащения FeatureSet
  4. Как повысить точность с помощью анализа ошибок, чтобы найти закономерность

Точность модели с тестовым набором данных.Чтобы сделать любую модель эффективной и точной, нам сначала нужно понять, насколько точна наша модель. Для этого мы разделили наш набор функций на 2 набора: train_data и test_data. Мы обучили модель и предсказали некоторые случайные имена пола, и они также отлично работают. Но когда дело доходит до обобщения эффективности нашей модели, мы не можем просто полагаться на предсказание некоторых случайных имен, поскольку набор имен слишком велик, чтобы его можно было обобщить с помощью определенного количества имен. Здесь начинается роль test_data для измерения точности нашей модели. Оттуда мы попытаемся понять, как мы можем повысить точность, если это необходимо. Только следующие строки кода, которые необходимо добавить к уже написанному коду для вызова метода точности модуля классификации из nltk:

modelAccuracy = classify.accuracy(classifier, test_data)
print(f’Точность модели детектора пола равна {modelAccuracy}’)

Концепции переобучения и недообучения

Наша модель давала точность 77,4%, что хорошо, но мы можем легко повысить точность, и есть много способов сделать это. Тем не менее, я буду придерживаться очень простого, например, продолжать делать итерации с вашей интуицией или знанием предметной области. В нашем случае, что, если я включу первые и последние 2 символа в имя формы, чтобы сделать наш набор функций. Когда я попытался сделать это, я повысил точность до 80,3 %, но это привело к переоснащению (низкое смещение, но высокая дисперсия), что означает модель не обобщается, а запоминает все возможности, фиксируя тенденции почти для всех точек данных. Переоснащение также усложнило нашу модель. Предоставление очень малого количества функций и наличие очень простой модели приводит к недостаточной подгонке (низкая дисперсия, но высокая предвзятость), что означает, что модель не может уловить шаблон, который будет обобщать модель с невидимыми данными в режиме реального времени.К какой проблеме приводят эти две концепции? не удалось предсказать и во-вторых, точность может варьироваться очень значительно. Поэтому нам нужно убедиться, что мы не переоснащаем или недооснащаем нашу модель дополнительными функциями в нашем наборе функций. В нашей идентификации пола теперь вы можете попытаться выбрать первые и последние 2 символа с помощью строк кода ниже в методе gender_features . Ваш метод gender_features будет выглядеть так

def gender_features(word):
return {‘first_letter’: слово[:2], ‘last_letter’ : слово[-2:]}

Давайте запустим ваш код и измерим, насколько достигается точность. Вы можете играть с различными комбинациями в зависимости от ваших исследований в области, для которой вы пытаетесь построить модель машинного обучения. Для идентификации пола, пожалуйста, ознакомьтесь с проводимыми исследованиями, чтобы узнать, как создать свой набор функций.

Анализ ошибок для обогащения FeatureSet:

Допустим, мы хотим использовать стандартный процесс для повышения точности, не используя наши знания предметной области и интуицию, тогда разработчик может придумать самый простой способ анализа ошибки для поиска основной причины. Аналогичным образом, что мы можем сделать здесь, это проанализировать ошибочно предсказанное имя. При анализе мы попытаемся увидеть: Есть ли какой-либо общий шаблон в тех, кто неправильно предсказывает имя, который можно использовать для расширения набора функций?

Анализ неправильного прогноза известен как подход анализа ошибок для обогащения набора функций для модели обучения. Поскольку модель NLTK имеет очень простой способ отфильтровать все ошибочно предсказанные имена в одном списке и записать их в файл для анализа тенденций или шаблонов в пределах ошибочно идентифицированного имени. Нам нужно настроить наш набор данных, чтобы он имел имя, чтобы мы могли легко анализировать результат, чтобы выполнить анализ ошибок. Во-первых, нам нужно заменить следующие строки кода (пожалуйста, измените создание train_data, test_data на основе приведенных ниже строк кода):

train_names = allNames[700:]
test_names = allNames[:700]

train_data = [(gender_features(n), пол) для (n, пол) в train_names]
test_data = [(gender_features(n), пол) для (n, пол) в test_names]

Во-вторых, нам нужно сохранить все ошибочно идентифицированные имена в списке, чтобы в конце можно было добавить следующие строки кода:

erroneousNames = []
для (имя, тег) в dev_names:
предсказанный пол = classifier.classify (гендерные_признаки (имя))
если предсказанный пол != тег:
erroneousNames.append( (тег, предсказанный пол, имя))

для ошибочного имени в отсортированных (ошибочные имена):
print (ошибочное имя)

Это перечислит все ошибочно идентифицированные имена в виде кортежа, например «Правильный пол», «Предсказанный пол и имя». Единственная нерешенная задача — проверить все эти неправильные точки данных и собрать шаблон для обогащения FeatureSet…

Я надеялся закончить все пункты в этом блоге, но я думаю, что я хотел бы написать еще один блог, чтобы написать об этом с надлежащими подробностями и завершить окончательный код с повышенной точностью, которая приемлема…

В следующем блоге мы расскажем —

  1. Как повысить точность с помощью анализа ошибок, чтобы найти шаблон и реализовать его с помощью кода
  2. Завершить окончательный код, которым можно поделиться с пользователем в режиме реального времени.

До следующего блога, будьте здоровы и продолжайте учиться :-)