В наши дни у всех есть iPhone (кроме меня, я все еще любитель Android), и вы когда-нибудь задумывались, как ваш телефон может разблокироваться сам по себе, когда вы кладете его перед лицом? Или вы видели те фильмы, где детектив просматривает фотографию антагониста по базам данных и сопоставляет профиль? Что ж, если вы это сделаете, то вы попали в нужное место, потому что я на самом деле собираюсь объяснить вам, как это делается. Реализовать это проще, чем вы могли представить. Все, что вам нужно, это тонны данных для анализа и обучения модели машинного обучения. В этой статье мы попытаемся объяснить вам эти похожие концепции как можно проще. По мере того, как вы читаете, фактически, сегодня вы будете строить одну такую ​​модель. Теперь все, что вам нужно сделать, это набраться терпения и пообещать мне, что вы прочтете эту статью до конца.

В моей последней статье я обсуждал, как линейная регрессия используется при создании модели машинного обучения для предсказания и прогнозирования чисел (ссылка здесь). Оказывается, линейная регрессия хороша только для предсказания чисел. Когда дело доходит до объектов, лучше всего подходит классификация. Мы, люди, постоянно используем методы классификации. Как и на изображении выше, мы разделили животных на разные категории в зависимости от их физических характеристик. Аналогичным образом в машинном обучении классификация используется для классификации схожих функций, обнаруженных в наборах данных, вместе. Алгоритм в модели пытается найти определенный шаблон в данных, и когда он его находит, он классифицирует объект по соответствующему классу. Существует два основных упрощенных способа реализации машинного обучения для классификации. А именно контролируемое и неконтролируемое машинное обучение. Как следует из названия, в схеме контролируемого обучения мы передаем данные с меткой выбранному алгоритму. Затем модель обучается, чтобы она изучила закономерность на основе существующих данных. После обучения модели мы вводим данные, которые хотим протестировать или исследовать в модели. Затем модель может предсказать метку или класс на основе того, что она узнала ранее. Другой тип классификации может быть получен путем обучения без учителя. Этот вид классификации используется, когда данные не имеют метки. Поэтому иногда бывает сложно интерпретировать результаты, полученные с помощью этой техники. Однако это определенно полезный метод, когда дело доходит до классификации немаркированных данных. В этом типе классификации данные без метки вводятся в алгоритм. Затем алгоритм находит закономерность в данных. Эти точки данных с похожими характеристиками объединяются в одну группу, а точки данных с разными характеристиками объединяются в другую группу.

Теперь, когда у нас есть некоторые основы классификации, а также модели машинного обучения с учителем и без него. Пришло время создать модель машинного обучения с учителем. Этот эксперимент попытается классифицировать типы цветов (вместо человеческого лица для простоты этого эксперимента). В этом эксперименте мы собираемся использовать универсальный алгоритм «Случайный лес». Я буду использовать R-Studio в качестве инструмента для демонстрации, однако концепция аналогична, если вы также предпочитаете использовать python. Мы будем выполнять следующие задачи:

  1. Загрузка необходимых данных
  2. Разделение данных на наборы данных для обучения и тестирования
  3. Построение модели машинного обучения
  4. Тестирование модели машинного обучения

Если бы у нас были данные, содержащие черты человеческих лиц, мы могли бы использовать эти данные и для этого эксперимента. Однако для простоты мы будем использовать набор данных радужной оболочки глаза.

Эти данные содержат характеристики трех разных видов ирисов. И мы будем строить модель, которая сможет классифицировать тип цветка на основе данных, которые мы вводим в модель.

1. Загрузить необходимые данные

Сначала нам нужно загрузить данные. Как вы можете видеть на изображении ниже, эти данные содержат характеристики трех видов ирисов. Теперь наша цель - сделать модель. Что при кормлении с такими характеристиками, как длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка, можно было бы предсказать, к какому виду ириса он принадлежит.

#Loading iris datasets into df
df <- iris
df[sample(nrow(df), 5), ]

2. Разделение данных на наборы данных для обучения и тестирования

Наша цель - обучить модель машинного обучения так, чтобы она могла определять правильный тип видов ирисов (Setosa, Versicolor или Virgnica). Теперь нам нужно загрузить некоторые библиотеки в R-среду. Если у вас еще не установлены эти библиотеки, сейчас самое время установить и загрузить их.

library(data.table)
library(ggplot2)
library(dplyr)
library(caret)
library(curl)
library(randomForest)

Теперь, когда вы загрузили все необходимые библиотеки. Следующим шагом будет разделение данных. В этом процессе мы разделим данные на две части. 80% данных будет использоваться для обучения модели, тогда как остальные 20% будут использованы для тестирования и проверки созданной модели машинного обучения. Но прежде чем перейти к механизму разделения, очень важно изменить тип данных функции, которую мы хотим классифицировать как фактор. В нашем эксперименте это было бы для «Видов».

# Changing the data type of species to factor
df$Species <- as.factor(df$Species)
# Splitting data 
split_data <- createDataPartition(df$Species, p=0.80, list=FALSE)
# Data that will be use to train the model
training <- df[split_data,]
# Data that will be use to test the model
test <- df[-split_data,]

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

# Using cross validation approach
control <- trainControl(method="cv", number=10)
metric <- "Accuracy"

Для этого эксперимента мы будем использовать 10-кратную перекрестную проверку. Короче говоря, мы разделим обучающие данные на 10 частей меньшего размера. Мы будем использовать 1 кратность из 10 на итерацию для целей проверки. Этот подход обычно дает надежную модель.

3. Постройте модель машинного обучения.

Теперь, когда мы создали все необходимые метрики. Пришло время обучить модель машинного обучения. Мы будем использовать наборы обучающих данных, которые мы создали ранее, чтобы кормить модель.

# Creating the machine learning model
model <- train(Species ~. , data=training, method="rf" metric=metric, trControl=control)

В приведенном выше коде мы строим модель машинного обучения. Поскольку мы хотели, чтобы наша модель использовала все данные из исходных наборов данных, мы использовали ~. после видов. Если бы мы только хотели использовать, скажем, Длину чашелистика и Ширину чашелистника, мы могли бы использовать Виды ~ Длина чашелистика + Ширина чашелистника

4. Проверка точности построенной модели.

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

# Checking the validity of the overall model
print(model)

Глядя на изображение, мы видим, что модель использовала разные метрики mtry, которые в основном представляют собой деревья решений по числам. Эта модель дает оптимальный результат, когда значение mtry было равно 2. Как мы видим, при mtry = 2 точность модели составляет ~ 95%. Таким образом, только что созданная модель будет иметь точность 95%.

Также можно проверить важные особенности, которые сыграли роль в создании модели. Для этого необходимо выполнить следующие коды.

# Checking the important features of the model
plot(varImp(model, scale =F))

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

5. Тестирование модели машинного обучения

Теперь, когда мы построили модель, пришло время сделать некоторые прогнозы. Мы будем использовать тестовый набор данных из более раннего разделения.

# Prediction using test data
predictions <- predict(model, test)

Чтобы сделать прогноз с использованием модели, мы просто используем функцию прогнозирования и вызываем модель. После этого нам просто нужно передать тестовые данные в модель. Пришло время проверить, насколько хорошо наша модель предсказывала. Для этого мы создадим новый фрейм данных под названием «verify», и мы объединим прогноз с тестовыми данными. Этот дополнительный необязательный шаг поможет нам провести параллельный анализ.

verify <- cbind(test,predictions )
verify[sample(nrow(verify), 5), ]

В поле без галочки видно, что исходные данные и прогноз, сделанный моделью, находятся справа. Мы видим, что наша модель довольно хорошо справляется с предсказанием типов видов.

Теперь следующий шаг - проверить матрицу неточностей для модели. Эта матрица в основном показывает, были ли допущены ошибки в модели во время прогнозирования. Эта матрица показывает, были ли получены ложноположительные результаты. Недиагональные элементы - это «ложные срабатывания» или, в общем, это ошибка, сделанная моделью во время прогнозирования. Давайте теперь проверим матрицу путаницы.

# Confusion matrix
confusionMatrix(predictions, test$Species)

Теперь, как мы знаем, мы вводим в модель 10 значений из наборов тестовых данных для каждого вида. Итак, глядя на матрицу путаницы, мы видим, что из 10 данных о видах сетоса, предоставленных модели, она смогла правильно предсказать их всех. Точно так же из 10 данных видов Versicolor, представленных в модели, 9 из них были предсказаны правильно, а 1 Versicoloar ошибочно предсказано как Virginica. В случае Вирджинии из 10 данных Вирджинии, предоставленных модели, 9 из них были предсказаны правильно, однако 1 был ошибочно предсказан как Versicolor.

Заключение

В ходе этого эксперимента мы создали классификационную модель машинного обучения. Эта модель смогла предсказать тип вида ириса на основе характеристик, вводимых в модель. Теперь вы можете спросить, подождите секунду: «Как это связано с разблокировкой моего телефона? Ответ на этот вопрос прост, похож на то, как мы обучили нашу модель распознавать видовой тип ириса. Сначала собираются атрибуты данных, определяющие структуру лица человека, возможно, тонны.

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