Почувствуйте острые ощущения и создайте свой первый ИИ. модель с использованием Python, даже если у вас нет опыта программирования… пока!

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

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

Среда кодирования

Как и в любом путешествии, вам понадобится подходящий автомобиль, чтобы добраться до вашей первой модели.

Я бы посоветовал начать с онлайн-среды Python, такой как Google Colab.

Это избавит вас от установки Python на ваш компьютер или управления библиотеками (решение о переходе на Pandas 1.0 или последнюю версию Scikit-Learn, вероятно, не является вашей главной заботой в настоящее время!).

После подключения к Google Colab просто создайте новую записную книжку Python:

Примечание. Каждая созданная вами записная книжка будет храниться в специальной папке на вашем Google Диске: Colab Notebooks.

Давайте переименуем вашу первую записную книжку, нажав на ее название:

Традиции: давайте начнем с печати "Hello World!"

Вы должны ввести приведенный ниже код в первую ячейку и выполнить его с помощью кнопки «воспроизведение» слева (в качестве альтернативы вы можете нажать клавиши «Shift + Enter»).

Примечание: первое выполнение может занять некоторое время, поскольку Google Colab подключится к выделенному облачному ресурсу и создаст вашу среду.

Загрузка набора данных

Я подготовил простой набор данных из 5000 строк, доступный здесь, объединяющий 15 параметров процесса, измеряемых каждый час, и соответствующее качество продукта: Premium, Approved или Rejected.

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

Чтобы загрузить этот CSV-файл в среду кодирования, вам необходимо открыть интерфейс «Файлы» (просто щелкнуть значок папки на левой панели) и перетащить файл «classification_5000.csv» файл под уже сохраненными образцами файлов.

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

Если вам нужно постоянно хранить файлы, вы можете подключить свой ноутбук к своей учетной записи на Google Диске (третий значок на панели «Файлы»).

Чтение файла с помощью Pandas

Теперь, когда файл классификации_5000.csv является частью вашей среды, давайте прочитаем его с помощью специальной библиотеки Python: Pandas.

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

В этом случае мы могли бы выполнить «import pandas» (будьте осторожны: инструкции Python чувствительны к регистру!), Но «import pandas as pd» позволит нам вызывать Pandas по его псевдоним «pd» (короче и быстрее 😀).

Мы вызываем функцию, которая читает файлы CSV, используя «pandas.read_csv» или «pd.read_csv». Это соответствует схеме «library.function», в которой функция извлекается из библиотеки.

Функция read_csv возвращает «DataFrame» (т. Е. Табличные данные), которые мы сохраняем в переменной «df» (см. Код ниже).

Исследование данных с помощью Pandas

Библиотека Pandas предоставляет множество функций; давайте рассмотрим самые полезные для начинающих.

Как упоминалось ранее, Python - объектно-ориентированный язык, и мы можем вызывать определенные методы или свойства, соответствующие типу объекта, которым мы манипулируем. Например:

  • Добавление «.shape» после имени DataFrame возвращает его размеры (количество строк и столбцов). Это собственная информация о DataFrame, поэтому она называется «свойство».
  • Добавление «.mean ()» после DataFrame запускает вычисление средних значений каждого числового признака. Это динамическая информация, возвращаемая этой конкретной функцией, которая называется «методом».

В этом первом примере функция read_csv вернула объект DataFrame, который использует множество унаследованных и выделенных свойств или методов: .shape, .info (), .describe (), .mean () и т. Д.

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

df.describe () предоставит некоторую элементарную статистику относительно числовых характеристик (вы можете заметить, что столбцы «DateTime» и «Качество» не отображаются): количество записей, среднее значение, стандартное отклонение, мин. max и квартили:

df.corr () отобразит корреляционную матрицу всех числовых характеристик:

Доступно гораздо больше функций: head (), sample (), tail (), merge (), concat () и т. Д., И вы должны изучить некоторые из них в своем блокноте.

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



Подготовка данных с помощью Pandas и SciKit-Learn

Одним из основных требований для правильного построения модели машинного обучения является обучение алгоритма на большой части набора данных (от 70 до 90%), а затем выполнение тестов на его надежность на оставшихся невидимых процентах.

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

Чтобы случайным образом создать это разбиение, мы вызываем специальную функцию train_test_split из библиотеки SciKit-Learn:

Но перед использованием этой новой функции нам нужно разделить функции (X) и цель (Y). Мы также удалим столбец «DateTime», бесполезный для этого конкретного примера.

Используя свойство «.shape» для каждого созданного набора данных, мы видим, что количество строк правильное: «X_train» имеет 4000 строк (80% от 5000 начальных строк), и то же самое касается «y_train».

Вы могли заметить отсутствие измерения столбца в «y_train» и «y_test» (вы могли ожидать, что отобразится «(4000, 1)» или «(1000,1)»).

Это потому, что «X_train» и «X_test» - это DataFrames Pandas, тогда как «y_train» и «y_test» - это Series Pandas.

Чтобы сделать это (относительно) простым: «Серии» - это структура данных с одним столбцом, а «DataFrame» - это коллекция Серий. Таким образом, в серии нет измерения столбцов, поскольку может быть только один.

Создание, обучение и оценка модели

Данные теперь правильно структурированы в наборы для обучения и тестирования; мы можем импортировать алгоритм случайного леса.

Поскольку наша цель является категориальной (Премиум, Утверждено или Отклонено), мы выбираем «Классификатор». В случае, если мы будем работать с числовой целью (т.е. прогнозировать значение), мы выберем «Регрессор», но синтаксис будет аналогичным.

Сначала мы создаем объект «RandomForestClassifier ()» и используем соответствующий метод «.fit» для обучения алгоритма на обучающих данных:

Некоторые параметры, используемые для построения модели, отображаются после обучения: количество оценок (также называемых «деревьями» = 100), максимальная глубина (здесь «Нет»), критерий разделения (здесь «Индекс Джини») и т. Д. strong> Это так называемые «гиперпараметры».

Метод «.score» позволяет нам оценить точность модели. Он сравнивает прогнозы модели (y ’) на основе предоставленных характеристик (Xs) с истинными целевыми значениями (y):

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

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

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

Давайте посмотрим на различия между предсказаниями и фактическими значениями (я выбрал «random_state», который выбирает строки с многочисленными ошибками; изменение его значения уменьшит их количество):

Оценка важности функций

Даже если она несовершенна, наша модель по-прежнему обеспечивает приемлемую точность с 80% успешностью.

Возникает вопрос: какие особенности среди различных параметров процесса помогают модели прогнозировать качество продукта?

Свойство модели «.feature_importances_» предоставляет эту информацию, но массив не так просто (эвфемизм) интерпретировать:

Давайте преобразуем этот массив в DataFrame, чтобы отобразить его в более удобном виде (код немного сложен, вы должны мне поверить в этом):

Параметры процесса ранжируются по их важности, и мы можем считать, что «Наружная температура», «Внутреннее давление» и «Плотность цвета» играют активную роль в прогнозах.

Если вы дошли до этого предложения, вы создали и оценили свою первую модель машинного обучения 🙌

Вот краткое изложение того, чего вы достигли сегодня:

  • Использование Google Colab с библиотеками Pandas + SciKit Learn
  • Загрузка данных в вашу среду
  • Изучение набора данных с помощью функций Pandas
  • Подготовка / разделение данных с помощью Pandas и SciKit-Learn
  • Обучение и оценка вашей модели с помощью SciKit-Learn