Здесь дела становятся менее беспорядочными и более продуктивными! Давайте создадим нашу первую прогнозную модель машинного обучения.

Итак ... на этом этапе вы выполнили 70% - 80% работы и прошли большую часть жизненного цикла Data Science! (Я знаю!)

Если нет, посетите Часть 1, чтобы освежиться, прежде чем мы перейдем к сочному!

Вы не только поняли проблему - [шаг 1], но и

  • Собрал и загрузил данные в вашу среду разработки Python [шаг 2]
  • Очищены и подготовлены данные [шаг 3]
  • Визуализация и собранная статистика непосредственно из данных (EDA) [шаг 4]

[Data, Data, Data…] - я имею в виду, какой была бы наука о данных без данных…

Что вы скажете, теперь мы пойдем и исследуем магию машинного обучения? (Не совсем волшебство, но знаешь…)

Что такое машинное обучение?

Машинное обучение? Вы, наверное, слышали это один или два раза в фильмах, называя это началом конца, но я отвлекся.

Проще говоря, ML [сокращение от Machine Learning] - это подмножество искусственного интеллекта или AI (что является более широкой темой), которое занимается обработкой данных, их пониманием и выплевывая приблизительные догадки о данных.

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

Человек: А вы знаете, сколько стоит страховка?

Машина: … -…

Человек: А если я дам вам больше информации о себе?

Машина: … -…

Человек: Хорошо ... Мне 22 года, рост 1,84 метра, а вес около 120 кг.

Машина. Судя по предоставленным вами данным, она должна стоить вам около 11 000 долларов.

Типы машинного обучения

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

Итак, вы видите, что ML разделен на 4 отдельные области, а именно:

  • Контролируемое обучение - обучение на данных с пометкой
  • Неконтролируемое обучение - обучение на данных, не помеченных
  • Полу-контролируемое обучение - обучение на основе данных, некоторые из которых помечены
  • Обучение с подкреплением - состоит из агента, который либо награждается, либо наказывается в результате своих действий в данной среде (очень упрощенно)

Каждый тип дополнительно разделен, чтобы указать типы проблем, в которых они используются. Для краткости и изучения примера мы продолжим с Части 1, только Регрессия и Классификация [в рамках контролируемого обучения] будут кратко обсуждали.

Продолжая сказанное ранее, поскольку контролируемое обучение использует данные с пометкой, либо дискретно (0,1 - Да, Нет…), либо непрерывно (- infinity, + infinity), неудивительно, что возникают проблемы с регрессией и классификацией.

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

Моделирование и обучение на примере линейной регрессии

Но Камаль ...

Что ж, вот почему мы собираемся опираться на кейс из Части 1! Надеюсь, благодаря опыту вы станете просветленным.

Предполагая, что у вас есть готовые данные, мы собираемся выполнить еще пару настроек, чтобы получить необходимые компоненты, необходимые для обучения модели!

Все, что нам осталось, это:

  1. Разделите данные на набор для обучения и набор для тестирования.
  2. Обучите модель, чтобы она соответствовала обучающим данным.
  3. Оцените модель на основе данных тестирования (насколько хорошо она предсказывает)
  4. Интерпретируйте наши результаты, оценив важность функций

Разделение наших данных

Вообще говоря, коэффициент перехода, с которым следует разделить набор данных, составляет 80/20, где 80% данных - это данные обучения, а 20% - данные тестирования (или невидимые данные).

Сначала вы создаете фиктивные переменные, единственная цель которых - разделить входные переменные (Матрица функций - MOF) и выходную переменную (вектор зависимой переменной - DVV).

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

Вот как можно подойти к этому:

X = data.iloc[:,0:-1].values # Matrix of Features
Y = data.iloc[:,-1].values  # Dependent Variable Vector

где «.iloc», сокращение от index location, - это просто метод для извлечения строк и столбцов из Pandas DataFrame.

Затем для разделения данных в scikit-learn (библиотека Python ML) есть функция «train_test_split», которую мы можем использовать :

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

Вам может быть интересно, что, черт возьми, такое «random_state = 42»… Почему 42?

НУ ... это немного загадочно, но по сути гарантирует, что всякий раз, когда «random_state = some_number» вызывается ,, ваши результаты случайного разделения данных будут воспроизводимы. Следовательно, упрощается отладка кода, когда что-то идет не так.

Теперь, если вы не инициализируете аргумент «random_state», то каждый раз, когда вы запускаете функцию «train_test_split», вы получите случайный набор номеров поездов и тестовых групп с одинаковым соотношением (в данном случае 80/20).

Обучите модель

Теперь мы хотим обучить модель, используя созданные нами наборы «x_train» и «y_train». Для этого мы просто создаем экземпляр / объект класса с именем «LinearRegression», снова из «scikit-learn», и вызываем функцию в « LinearRegression », называется класс « ObjectName.fit (Input_TestData, Output_TestData) ».

Хорошо, это на самом деле выглядит проще в коде, так что приступим:

model = LinearRegression() #create a LinearRegression instance
model.fit(x_train,y_train) #call the fit function on the instance

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

Если вы хотите узнать больше о внутренней работе этих классов / функций / аргументов, вы можете изучить документацию scikit-learn.

Теперь ваша модель готова ответить на ваши будущие запросы!

Оцените модель

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

Мы проведем наши тестовые данные через модель и воспользуемся функцией «score» в «scikit-learn», чтобы оценить, насколько близки прогнозы модели к истинным меткам из наших данные (в y_test):

model.score(x_test,y_test)
#model score turns out to be = 0.781130211343097 = 78.113%

Причина, по которой мы используем «x_test» и «y_test» в качестве аргументов, заключается в том, что мы хотим проверить производительность модели на данных, которые она не просматривала / не использовала.

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

Поскольку у нас есть более чем две переменные, вместо этого можно использовать вариант вышеупомянутого метода оценки, называемый «Скорректированный коэффициент детерминации», который учитывает количество предикторов в рассматриваемой задаче.

Любая путаница будет устранена этим видео: R Square - ясно объяснено (часть 1)

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

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

Интерпретируйте наши результаты

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

Пока что у нас были следующие функции:

  • Курильщик
  • Дети
  • ИМТ
  • Секс
  • Возраст

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

intercept = model.intercept_
features_importance = model.coef_

Давая нам,

Нанесение коэффициентов на гистограмму, каждый из которых соответствует своей характеристике, может немного рассказать нам о том, какой коэффициент (следовательно, характеристика) имеет большее влияние на результат:

Неудивительно, что функция курильщика, кажется, больше влияет на стоимость страховки (выходную мощность), чем любая другая функция !! Это согласуется с нашими выводами EDA.

Урок: не курите детей.

Спасибо, что прочитали, и свяжитесь со мной, если у вас возникнут какие-либо вопросы!
Удачного обучения!

Не забудьте поддержать аплодисментами!

Вы можете присоединиться к нашим усилиям в Zaka и помочь демократизировать ИИ в вашем городе! Свяжитесь с нами и дайте нам знать.

Чтобы узнать о Заке, посетите www.zaka.ai

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

LinkedIn - Instagram - Facebook - Twitter - Средний