Краткий обзор. Мы использовали данные, которые предоставили атрибуты, определяющие качество вина. Наша команда использовала надежные методы кластеризации, классические и новые методы классификации и смогла предсказать, является ли определенная бутылка красного вина «хорошей», «нормальной» или «плохой» с точностью 87,45% с помощью нашей модели случайного леса. И последнее, но не менее важное: мы завершили проект, используя инструменты прогнозирующего машинного обучения, чтобы точно определить, какие факторы способствуют более высокому качеству вин, и предсказать точный рейтинг качества. Этими факторами оказались «алкоголь», «сульфаты» и «летучая кислотность».

Соавторы:Хамза Мирза (LinkedIn, Портфолио аналитики), Дженни Нгуен (LinkedIn, Портфолио аналитики), Мин Фам (LinkedIn, Портфолио аналитики)

Полный код этого проекта можно найти по этой ссылке: https://rpubs.com/htn14/856056

Инструменты

Язык: R

Библиотеки R: ggplot2, моменты, карет, tidyverse, cluster, factoextra, corrplot, gridExtra, mclust, dbscan, dplyr, nnet, rpart, rpart.plot, randomForest, pROC, ISLR, reshape2, plyr, класс, e1071, xgboost, lightgbm, adabag, glmnet, gbm

EDA: повторяющиеся строки, пропущенные значения, ящичковая диаграмма, гистограмма, матрица корреляции, рекурсивное исключение признаков, точечная диаграмма, тепловая карта.

Разработка функций: мультиколлинеарность, балансировка набора данных (передискретизация), разделение набора данных (тестирование и обучение).

Кластеризация: K-средних, иерархическая, на основе плотности, максимизация ожиданий

Классификация: логистическая регрессия, дерево решений, случайный лес, K-ближайший сосед, метод опорных векторов, XGBoost, LightGBM, AdaBoost

Прогноз: линейная регрессия, случайный лес, регуляризация (Ridge & Lasso), XGBoost, LightGBM, повышение градиента.

Оглавление

1. Введение и бизнес

2. Исследовательский анализ данных

3. Разработка функций

4. Классификационное моделирование

5. Прогнозное моделирование

6. Заключение и бизнес-приложения

Раздел 1: Введение и бизнес-понимание

Итак, все, кому исполнился 21 год, налейте себе по бокалу вина, и приступим к делу. Если тебе не 21, то, думаю, просто… используй свое воображение. Теперь давайте обратимся к слону в комнате — что делает ваше вино таким вкусным? В этом, что мы любим называть, мега-аналитический проект, мы покончим с этим животрепещущим вопросом. Три основных вопроса, на которые я и моя замечательная команда хотели ответить:

  1. Какие свойства вина делают его таким хорошим (или плохим) на вкус?
  2. Какие химические свойства определяют, будет ли бутылка вина вкусной, нормальной или плохой с точки зрения качества?
  3. Можем ли мы точно предсказать числовое значение качества бутылки вина?

Наша главная цель в этом проекте состояла в том, чтобы продемонстрировать наши аналитические способности, используя многие методы машинного обучения, которые мы изучили в нашей программе бизнес-аналитики в Fuqua, и методы, которые в настоящее время используются в сфере профессиональной аналитики. Следующая часть может разбудить ненавистников, но мы решили сосредоточить этот проект в первую очередь на красном вине. Почему? Потому что мы трое лично являемся любителями красного вина (один из нас определенно фанат поддельного красного вина… но, наверное, притворяется, пока не получится?), и это сделало этот проект еще более захватывающим. Теперь пристегнитесь, и мы проведем вас через четыре этапа нашего проекта: исследование данных, разработка функций, моделирование и развертывание. Глоток глоток!

Оглавление

Раздел 2: Исследовательский анализ данных

2.1. Общий набор данных

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

dim(Xred) # This dataset has 1599 rows and 12 columns
## [1] 1599 12

Есть 1599 вин, с 12 колонками.

head(Xred) # Show the first five rows

Дублированные строки:

sum(ifelse(duplicated(Xred) == TRUE,1,0)) 
## [1] 240 #240 duplicated records in red

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

Отсутствующие или нулевые значения

sum(is.na(Xred)) # No irregularities found. Great dataset!
## [1] 0

2.2. Зависимая функция

Зависимой функцией в этом наборе данных является столбец quality. Давайте изучим эту колонку подробнее.

summary(Xred$quality)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 3.000 5.000 6.000 5.636 6.000 8.000

Качество варьируется от 3 до 8.

Большинство вин оцениваются от 5 до 6 баллов. Поскольку записей у нас много, рейтинг качества должен нормально распределяться. Давайте проверим это.

hist(Xred$quality) # Visualize the distribution of quality rating

Несмотря на нормальное распределение, набор данных выглядит очень несбалансированным (т. Е. В пропорции нормального распределения намного больше 5 и 6). Таким образом, нам придется исправить этот дисбаланс, внедрив метод передискретизации. Подробнее об этом в разделе 3.8.

2.3. Независимые функции

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

1. Корреляция

2. Рекурсивное устранение признаков

# Using Correlation
correlation_matrix = cor(Xred_train, yred)
correlation_matrix = correlation_matrix[order(correlation_matrix, decreasing = TRUE),]

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

# Using Recursive Feature Elimination## The top 5 variables (out of 11):## density, chlorides, volatile.acidity, sulphates, pH

Комбинируя два метода, можно сделать вывод, что важными характеристиками являются: спирт, сульфаты, лимонная кислота, фиксированная кислотность, остаточный сахар, плотность, хлориды, летучие кислотность и рН. Мы построим некоторые из них ниже.

Алкоголь, сульфаты, плотность, летучие кислоты

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

2.4. Корреляция

Есть две причины, по которым мы хотим взглянуть на корреляции между всеми функциями в данных:

  1. Интересные идеи и практические бизнес-приложения
  2. Если мы видим функции, которые тесно связаны, мы должны удалить их, чтобы избежать мультиколлинеарности в нашей модели машинного обучения.
cor.table.r = cor(Xred)corrplot(cor.table.r)

Похоже, фиксированная кислотность сильно коррелирует с лимонной кислотой, плотностью и pH. Лимонная кислота и pH также коррелируют. Также густота и алкоголь. Давайте посмотрим на несколько интересных корреляций.

Плотность и алкоголь

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

Фиксированная.кислотность по сравнению с лимонной.кислотой/плотностью/pH

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

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

Существует отрицательная корреляция между фиксированной кислотностью и рН. Это имеет смысл, так как более высокая кислотность в вине приведет к более низкому уровню pH. По сути, все вина находятся на кислой стороне спектра pH, большинство из них находится в диапазоне от 2,5 до примерно 4,5 pH. В нашем случае мы имеем pH от 3,0 до 4,0.

Теперь, когда мы получили глубокое понимание набора данных, давайте перейдем к разработке признаков!!!! (Ура, наш любимый!)

Оглавление

Раздел 3. Разработка функций

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

3.1. Кластеризация K-средних

Основная проблема, которую нам пришлось преодолеть, заключалась в том, чтобы выяснить, каким будет оптимальное количество кластеров. Во-первых, мы визуализировали текущий набор данных, чтобы увидеть, есть ли какие-либо кластеры. На графике видно, что примерно от 2 до 4 кластеров.

Наша команда использовала три разных метода для определения оптимального количества кластеров для K-средних, включая:

  • Метод локтя (показывает оптимальное значение 2 или 3)

Диаграмма локтя

  • Метод силуэта (показывает оптимальное значение 2 кластеров)

Диаграмма силуэта

  • Gap Statistic (показывает оптимальное значение из 3 кластеров)

Диаграмма разрыва

Проанализировав три вышеуказанных метода для определения оптимального количества кластеров, мы решили приблизить оптимальное количество кластеров к 2. И это был наш окончательный результат:

3.2. Иерархическая кластеризация

Иерархическая кластеризация — это альтернативный подход к кластеризации k-средних для идентификации групп в наборе данных. Это не требует от нас предварительного указания количества создаваемых кластеров, как того требует подход k-средних. Кроме того, иерархическая кластеризация имеет дополнительное преимущество перед кластеризацией K-средних, поскольку она приводит к привлекательному древовидному представлению наблюдений, называемому дендрограммой.

На этом этапе мы использовали два типа иерархической кластеризации:

  • Агломеративная иерархическая кластеризация
  • Разделительная иерархическая кластеризация

Агломеративная иерархическая кластеризация

Каждый объект изначально рассматривается как одноэлементный кластер (лист). На каждом шаге алгоритма два наиболее похожих кластера объединяются в новый больший кластер (узлы). Эта процедура повторяется до тех пор, пока все точки не станут членами только одного большого кластера (корня). Дендрограмма для этого типа иерархической кластеризации показана ниже:

Разделительная иерархическая кластеризация

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

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

Просто чтобы вы могли визуализировать результат этого типа кластеризации, после применения этого оптимального количества кластеров, равного 2, мы получаем следующий график:

3.3. Кластеризация на основе плотности

Кластеризация на основе плотности (БД) предназначена для группировки объектов в кластер, если они связаны друг с другом густонаселенной областью. Мы должны иметь возможность сравнивать кластеры разных размеров. Он не чувствителен к шуму. Причина, по которой этот тип кластеризации (как показано на графике ниже) не работает с нашим набором данных, заключается, прежде всего, в том, что большинство наших показателей качества сосредоточены вокруг 5–7. Одной из особенностей DB Clustering является «eps», который позволяет нам манипулировать радиусом каждой точки, который определяет количество точек в каждом кластере. Вот график, который мы использовали для определения оптимального значения EPS:

Даже после того, как мы нашли оптимальное значение «eps», у нас все еще были минимальные изменения в найденных нами кластерах. Из-за близости всех наших точек данных неоднократно формировался один большой кластер, из-за чего мы не выбрали этот метод.

3.4. Кластеризация максимизации ожиданий

В этом методе используются модели гауссовых смесей (GMM), основанные на кластеризации на основе плотности. Из-за результатов раздела 3.3 мы не ожидали, что этот метод кластеризации будет работать для нашего набора данных. Тем не менее, мы все еще хотели попробовать это, потому что это все в профессиональном мире, и подумали, что это будет хорошая возможность для обучения. Этот метод показал нам 8 кластеров, которые были определенно неправильными. Очевидно, что этот метод был излишним для наших данных и приводил к чрезмерной кластеризации. Вот, посмотрите сами на излишества в этом не очень красивом сюжете:

3.5. Кластеризация: Заключение

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

Основываясь на четырех методах кластеризации, которые мы выполнили, кластеризация K-средних (KM) и иерархическая кластеризация (HC) имеют наибольший смысл. Мы выберем эти два метода, чтобы рассмотреть их поближе. Присмотревшись ближе к характеристикам кластеров K-средних, мы были удивлены, увидев, что между двумя кластерами нет явных различий даже в столбце качества. Было очевидно, что и алгоритмы KM, и HC не классифицируют вина по определенному признаку. Мы также обнаружили, что характеристики кластера 2 HC аналогичны кластеру 1 KM, а кластер 1 HC аналогичен кластеру 2 KM. Поскольку эти два метода существенно не отличаются друг от друга. Мы решили использовать более популярный метод: кластеризацию K-средних. Та-да!

3.6. Обработка мультиколлинеарности

Мультиколлинеарность возникает, когда существует высокая корреляция между двумя или более независимыми переменными в модели множественной регрессии. Чтобы избежать мультиколлинеарности, мы должны были проверить, имеет ли какая-либо из наших функций высокую корреляцию с другими переменными. Наши результаты показали, что «фиксированная кислотность» имеет высокую корреляцию с тремя переменными: «лимонная кислота», «плотность» и «pH». Это поможет решить проблему мультиколлинеарности. Кроме того, прежде чем двигаться дальше, мы также исключили «качество», так как оно нам не нужно для целей классификации. Вот краткий обзор того, как выглядел наш новый набор данных:

3.7. Протестируйте и обучите набор данных

# Create a test and train dataset by splitting X4red to 70:30set.seed(1234)splitindex <- createDataPartition(X4red$type, p=0.7, list=FALSE, times=1)X4red_train <- X4red[splitindex,]

Разделить набор данных на 70% поезд, 30% тест.

3.8. Балансировка набора данных

Набор данных поезда сильно несбалансирован с классом меньшинства, плохим, составляет всего 4,01% всего набора данных X4red_train. Несбалансированные наборы данных создают проблему для прогнозного моделирования, поскольку большинство алгоритмов машинного обучения, используемых для классификации, были разработаны на основе предположения о равном количестве примеров для каждого класса. Это приводит к моделям с плохой прогностической эффективностью, особенно для класса (классов) меньшинства.

Чтобы справиться с балансировкой, у нас есть три метода:

  1. Передискретизация
  2. Гладкий
  3. Стратифицированная выборка

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

# Oversampling the imbalanced datasetset.seed(234)X4red_train <- upSample(x = X4red_train[, -12],y = as.factor(X4red_train$type))

Функция upSample изменяет имя нашей целевой переменной с типа на класс. Следовательно, Class будет нашей целевой переменной. Количество образцов в каждом классе теперь сбалансировано, и каждый класс имеет 924 образца.

Оглавление

Раздел 4. Модель классификации: Плохо/Нормально/Хорошо

Примечание: мы включили сводку наших моделей в эту статью на Medium. Полный код и методы можно посмотреть в RPub.

Цель этого раздела 4 — предсказать, является ли вино плохим, нормальным или хорошим, основываясь на всех его физико-химических свойствах. Для всех наших моделей мы выполняем одни и те же основные несколько шагов:

  1. Подходящая модель для обучения набора данных
  2. Делайте прогнозы на тестовом наборе данных
  3. Рассчитайте окончательную точность и другие показатели успеха

4.1. Логистическая регрессия

Самая первая модель классификации, которую мы изучили на уроке Data Science. Чтобы получить эталон производительности, мы сначала начнем с логистической регрессии. Логистическая регрессия подгоняет линию к набору данных поезда, используя максимальную вероятность (или наименьшую сумму квадратов остатков). Затем эта строка переносится в тестовый набор данных, чтобы делать прогнозы значения тестовых данных. Довольно простая концепция! Поскольку мы имеем дело с числовыми наборами данных с несколькими переменными, мы не ожидаем, что логистическая регрессия обеспечит большую точность. Барабанная дробь……

## [1] “Final Accuracy = 58.58%”

58% — это не очень хорошо, но для нас это отличный базовый уровень. Перейдем к более сложным (и, надеюсь, точным) моделям!

4.2. Древо решений

Дерево решений — это интуитивно понятная, стабильная и простая для понимания модель машинного обучения. Это также вторая модель классификации, которую мы изучили в классе. Основными преимуществами модели дерева решений являются простота понимания и меньше усилий для подготовки данных (т. е. нет необходимости нормализовать или масштабировать данные). Основная концепция заключается в том, что мы начинаем с верхней части набора данных и спускаемся по записям, каждый раз классифицируя их по сегментам, пока не сможем двигаться дальше. Эта концепция, хотя и немного сложнее, чем логистическая регрессия, все же довольно проста, и мы ожидаем, что она подвержена ошибкам. Более того, поскольку мы занимаемся прогностическим обучением, это не является одной из сильных сторон дерева решений. Я думаю, эти деревья лучше, чем бочки для вина!

# Visualize the tree builtrpart.plot(tree)

## [1] “Final Accuracy = 59.62%”

Мы видим некоторое улучшение точности; хотя нам нужны более сложные модели, чтобы повысить точность.

4.3. Случайный лес

Случайный лес, наш любимый! Случайный лес улучшает бэггинг, потому что он декоррелирует деревья с введением разбиения на случайное подмножество признаков. Он может обрабатывать двоичные функции, категориальные функции и числовые функции. Требуется очень небольшая предварительная обработка. Данные не нужно масштабировать или преобразовывать. Кроме того, его хвалят за производительность. Случайный лес строится из деревьев решений и следует двум основным шагам. Во-первых, он создает набор данных начальной загрузки, что является причудливым словом для того, чтобы сказать, что он случайным образом выбирает набор записей. Во-вторых, он создает дерево решений, используя этот предыдущий набор данных начальной загрузки, но используя случайный набор столбцов для классификации. Затем он повторяет шаги 1 и 2 снова и снова, пока не будет найдена лучшая модель.

Барабанная дробь для окончательной точности…

## [1] “Final Accuracy = 87.45%”

Колоссальное увеличение точности на 30% по сравнению с моделью дерева решений! Это, пожалуй, лучшая производительность для моделей с бэггингом.

Отличный случайный лес имел огромный успех. Перейдем к другим моделям.

4.4. K-ближайший сосед (KNN)

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

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

Функция КНН

knn_predicted_values <- knn(X4red_train_knn, X4red_test_knn, cl = Yknn_train, k = 38)

Сначала мы выбираем здесь k = 38, потому что некоторые источники рекомендуют k = sqrt (количество экземпляров). Поскольку у нас ~1500 экземпляров, k = 38.

## [1] “Final Accuracy = 48.95%”

Не очень хорошая точность, в основном потому, что число k здесь определенно неверно. Разберемся, как выбрать оптимальное число k.

Интересно… Похоже, что любое значение K выше 5 приводит к огромным ошибкам. Давайте выясним, какой K мы должны использовать.

print(min(err_k))## [1] 0.1820084print(which(err_k == min(err_k)))## [1] 1

Похоже, 1 К — это наш ответ. Давайте проделаем процесс снова с K = 1

## [1] “Final Accuracy = 81.80%”

Отлично, 81% — это неплохо, учитывая, что модель действительно проста в исполнении и интерпретации. Давайте перейдем к машине опорных векторов.

4.5. Метод опорных векторов (SVM)

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

## [1] “Final Accuracy = 47.91%”

SVM лучше всего работает, если есть только 2,3 независимых переменных — здесь у нас 11. Поскольку здесь слишком много переменных, мы не можем визуализировать наши данные, а метод SVM работает не очень хорошо. Кроме того, линейное ядро ​​может быть не лучшим методом, но выбрать правильное ядро ​​сложно. Это один из недостатков SVM.

4.6. XGBoost

Этот раздел очень интересен для нас, так как мы всегда хотели попробовать стандартные отраслевые методы бустинга. В отличие от многих моделей машинного обучения, которые сосредоточены на высококачественном прогнозировании, сделанном одной моделью, повышающие алгоритмы стремятся улучшить мощность прогнозирования путем обучения последовательности слабых моделей, каждая из которых компенсирует недостатки своих предшественников. Самый популярный метод повышения — XGBoost.

Мы делаем 5 шагов для XGBoost.

  1. Преобразование тестовых и обучающих наборов данных в матрицы XGBoost
  2. Задайте параметры полиномиальной классификации
  3. Обучить классификатор XGBoost
  4. Прогнозируйте результаты с помощью тестовых данных
  5. Используйте предсказанную метку с наибольшей вероятностью

Весь код XGBoost можно найти в RPub. Мы включим точность здесь для справки.

## [1] “Final Accuracy = 83.47%”

83% - отличная производительность. Хотя XGBoost ниже, чем Random Forest, он более универсален в решении множества задач, с которыми он может хорошо справиться. Эта проблема, в частности, привела к успеху Random Forest.

4.7. СветGBM

LightGBM — еще одна очень популярная техника бустинга. Light GBM использует алгоритм на основе гистограмм, т. е. он объединяет непрерывные значения признаков в дискретные ячейки, которые ускоряют процедуру обучения. Таким образом, LightGBM имеет очень быструю скорость обучения и высокую эффективность. Несколько других преимуществ — меньшее использование памяти и лучшая точность.

Опять же, поскольку значительная часть кода не подходит для этой статьи на Medium, мы включим здесь метод и результаты. Шаги, которые мы выполняем, точно такие же, как с XGBoost, просто меняем содержимое:

  1. Преобразуйте два набора данных в lgb.Dataset
  2. Задайте параметры полиномиальной классификации
  3. Обучить классификатор LightGBM
  4. Прогнозируйте результаты с помощью тестовых данных
  5. Используйте предсказанную метку с наибольшей вероятностью
## [1] “Final Accuracy = 84.31%”

Немного лучшая производительность, чем у XGBoost! XGBoost и LightGBM идут рука об руку в большинстве сценариев, в нашем случае LightGBM побеждает.

4.8. АдаБуст

AdaBoost популярен, потому что это адаптивный буст, при котором модель может улучшиться сама по себе (звучит странно, Хамза, перестань давать мне красное вино…). AdaBoost является адаптивным в том смысле, что последующие слабые ученики настраиваются в пользу тех экземпляров, которые были неправильно классифицированы предыдущими классификаторами. Adaboost менее подвержен переоснащению, так как входные параметры не оптимизируются совместно. Точность слабых классификаторов можно повысить с помощью Adaboost. В Adaboost мы сначала определяем наиболее важные функции в наборе данных, чтобы определить плохое/нормальное/хорошее. Затем мы объединяем несколько «слабых классификаторов» в один «сильный классификатор», чтобы получить наилучший результат. Давайте взглянем:

Мы узнаем, что алкоголь, сульфаты и летучие кислоты являются наиболее важными характеристиками.

## [1] “Final Accuracy = 86.19%”

86% — это действительно впечатляющая производительность (лучше, чем XGBoost), учитывая, что AdaBoost больше используется при анализе текста и изображений.

4.9. Заключение модели классификации

БОЛЬШИЕ аплодисменты Random Forest за получение Оскара, я имею в виду… лучшее исполнение модели. AdaBoost на втором месте, может быть, еще один проект Ада, ты молодец!

Вот матрица путаницы для Random Forest.

##           Reference
## Prediction bad good normal
##  bad      0    0      2
##  good     0   38     13
##  normal  18   27    380

Похоже, RandomForest не предсказал, что плохое вино будет плохим, модель должна быть слишком хороша для вин…

# Error rate of Random Forestplot(model2)

По мере роста количества деревьев ошибка OOB становится постоянной, поэтому мы пытаемся настроить mtry.

Ошибка OOB высока при mtry = 1, но при использовании метода локтя она достигает минимума при mtry = 3. Это значение следует выбирать. Этот mtry соответствует методу по умолчанию.

ntree 500 и mtry 3 являются оптимальными параметрами. Поскольку они соответствуют методу по умолчанию, мы оставим модель 2 как есть.

# Histogram using trees — size of trees in terms of number of nodes

# Variable Importance

Мы можем подтвердить, что эта модель считает алкоголь, летучую кислотность, сульфаты наиболее важными характеристиками.

Оглавление

Раздел 5. Модель прогнозирования: рейтинг качества вина

В этом разделе мы более амбициозны! Вместо того, чтобы просто предсказывать, будет ли каждое вино плохим/нормальным/хорошим, мы хотели сделать еще один шаг вперед. Как насчет того, чтобы предсказать точную оценку качества, которую получает каждое вино от критиков? Давай сделаем это!

5.1. Линейная регрессия

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

## Call:
## lm(formula = quality ~ ., data = X5red_train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.61641 -0.35575 -0.05257  0.44666  2.03589 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          11.5831446 16.1108396   0.719 0.472313    
## volatile.acidity     -1.1266551  0.1485411  -7.585 7.02e-14 ***
## citric.acid          -0.1293092  0.1677458  -0.771 0.440952    
## residual.sugar        0.0171160  0.0168176   1.018 0.309024    
## chlorides            -1.7466245  0.4639141  -3.765 0.000175 ***
## free.sulfur.dioxide   0.0022740  0.0026210   0.868 0.385805    
## total.sulfur.dioxide -0.0029122  0.0008746  -3.330 0.000898 ***
## density              -7.1303565 16.0537276  -0.444 0.657017    
## pH                   -0.4336497  0.1656097  -2.619 0.008952 ** 
## sulphates             0.8533680  0.1297696   6.576 7.43e-11 ***
## alcohol               0.2751083  0.0264145  10.415  < 2e-16 ***

Проверка точности

## MSE: 0.388386 MAE: 0.4950919 RMSE: 0.6232063

На самом деле, линейная регрессия не так уж и плоха! Посмотрим, сможем ли мы сделать лучше.

5.2. Случайный лес

Наш лучший друг Рэндом Форест, обладатель Оскара в предыдущей категории. Посмотрим, как это справедливо в этом прогнозе.

## MSE: 0.3092426 MAE: 0.4182004 RMSE: 0.5560958

Это число намного меньше, чем линейная регрессия, что очень многообещающе!

5.3. Регуляризация — гребневая регрессия

Регуляризация — это первая «причудливая» модель, которую мы изучили, и я вспомнил, что был в таком замешательстве в классе. Я думал, что линейной регрессии достаточно… Регуляризация основывается на линейной регрессии, добавляя штрафы, когда эта линейная линия переобучается или переобучается. Есть два типа штрафов: гребень и лассо. Штраф за гребень равен альфа x уклон², как показано ниже:

Затем мы выбираем лучшую лямбду для прогнозирования набора данных.

## MSE: 0.3910052 MAE: 0.4981249 RMSE: 0.6253041

5.4. Регуляризация — Лассо-регрессия

Как объяснялось выше, Лассо — это форма штрафа за регуляризацию, которая принимает форму абсолютного значения наклона.

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

## MSE: 0.3940802 MAE: 0.5003707 RMSE: 0.6277581

5.5. XGBoost

Поскольку XGBoost уже объяснялся в предыдущем разделе, мы сразу перейдем к производительности.

Выглядит довольно близко!

## MSE: 0.3633217 MAE: 0.4727701 RMSE: 0.6027617

Кроме того, XGBoost также придает нам важность функций при работе модели.

Без сомнения, спирт, сульфаты и летучие кислоты являются лучшими индикаторами.

5.6. СветGBM

LightGBM также используется выше, поэтому здесь мы приведем показатели производительности:

## MSE: 0.337878 MAE: 0.4468788 RMSE: 0.5812728

5.7. Повышение градиента

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

## MSE: 0.6191481 MAE: 0.665234 RMSE: 0.7868596

5.8. Заключение модели прогнозирования

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

Похоже, у нас есть победитель: Random Forest снова побеждает! Random Forest горит (каламбур не предназначен, мы категорически против вырубки лесов).

Оглавление

Раздел 6. Бизнес-приложения/развертывание

Теперь вы, вероятно, задаетесь вопросом — хорошо, мы знаем, какие характеристики влияют на качество вина, но как это помогает нам в нашей повседневной жизни. Фантастический вопрос, и хотя мы могли бы что-то придумать, чтобы убедить вас в ценности этого проекта, правда в том, что мы не собираемся этого делать. Тем не менее, это очень важно для виноделен, которые действительно производят и продают красное вино. Такая информация о том, какие характеристики делают вино «хорошим», «плохим» или «нормальным», помогает компаниям лучше понять потребности своих потребителей. Они могут создавать или продавать свои вина нужному сегменту клиентов для повышения прибыльности. Так что, на самом деле, это влияет на вашу повседневную жизнь, потому что анализ, подобный тому, который мы провели в этом проекте, означает, что вы, надеюсь, будете пить более качественное вино!

Мы надеемся, что вам понравилось работать над этим проектом так же, как моей команде понравилось работать над ним.

Ваше здоровье!