Применение модели Simple ML для прогнозирования выбросов CO2

Введение

В последние годы вокруг искусственного интеллекта (AI) было много шумихи. Вы можете найти его практически где угодно - от включения света голосом до полностью автономного беспилотного автомобиля.

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

Но как именно ИИ учится на данных?

В этом посте мы рассмотрим очень простую модель, чтобы понять, как ИИ учится. Мы сосредоточимся на количестве глобальных выбросов CO2 за последние 55 лет и попытаемся предсказать его количество в 2030 году.

Данные о выбросах CO2

Данные, которые мы будем использовать, взяты из WorldBank. К сожалению, данные не актуальны на текущую дату 2019 года (на момент написания этой статьи). Это с 1960 по 2014 год, но для этого эксперимента этого вполне достаточно.

На оси абсцисс соответствует год (при условии, что год 0 - 1960), а на оси ординат - количество выбросов CO2. Основываясь на диаграмме, мы могли бы сделать приблизительную оценку того, каким должно быть значение 2030 года.

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

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

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

Давайте введем немного математики. Синяя линия выше может быть вам знакома. Это простая прямая линия, представленная уравнением ниже.

Ага. Теперь вы вспомнили. Опять же, x - это год, а y - объем эмиссии. Чтобы получить линию, показанную на рисунке 2, m = 446 334 и b = 9 297 274. Не беспокойтесь о м и о. Я объясню их подробно позже.

Если мы хотим узнать информацию о 2030 году (70 году, если считать с 1960 года), теперь мы можем использовать приведенное выше уравнение.

Теперь, как и было обещано, давайте внимательно посмотрим, что такое m и b.

На рисунке 3, когда мы изменяем значение m, линия вращается вокруг. Следовательно, переменная m управляет направлением линии. В то время как на рисунке 4 переменная b управляет положением линии, перемещая ее вверх или вниз.

Процесс изучения

С помощью m и b мы можем контролировать линию и настраивать ее так, чтобы она наилучшим образом соответствовала нашим данным.

Теперь вопрос в том, как нам найти значение переменных m и b? Идея такая:

  1. Перемешайте значения m и b.
  2. Передайте переменные функции потерь, чтобы определить, насколько плохо линия сравнивается с данными, также известная как частота ошибок.
  3. Отрегулируйте значение m и b в зависимости от частоты ошибок.
  4. Вернитесь к шагу 2. Повторяйте, пока переменные не перестанут изменяться.

Функция потерь

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

Линия имеет прогнозируемое значение y ’ каждый год. Затем мы можем сравнить прогнозируемое значение y ’ с фактическим значением y, чтобы найти разницу. Мы рассчитываем это значение каждый год и берем его среднее значение. Это также известно как среднеквадратичная ошибка (MSE).

Теперь мы почти готовы обновить наши переменные. Есть одна маленькая загвоздка. Уровень ошибок, который мы обнаружили ранее, всегда положительный. Мы практически не знаем, в каком направлении следует обновить нашу линию. Должен ли он вращаться по часовой стрелке или против часовой стрелки? Вот тогда и появляется градиентный спуск.

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

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

Хорошие новости: на практике мы не делаем это вручную.

Популярные фреймворки, такие как Tensorflow или PyTorch, вычисляют это автоматически. Но я поместил его здесь, чтобы дать краткое представление о том, как он может узнать, в каком направлении изменить значение.

Выполнение

Итак, нужно ли вам кодировать все, как описано выше, чтобы линейная регрессия работала? К счастью, многие существующие библиотеки все упрощают для вас. В этом примере мы рассмотрим scikit-learn, библиотеку машинного обучения, созданную для Python, для прогнозирования выбросов CO2.

Используя всего несколько строк кода, scikit-learn делает линейную регрессию очень доступной. Сама по себе линия 9 выполняет все необходимые шаги для обучения модели. Уф, ты напрасно волновался, не так ли? Не только для линейной регрессии, но и для реализации многих других алгоритмов машинного обучения с помощью всего лишь нескольких строк кода.

Вывод

Вот и все. Не все так сложно, правда (кроме производной части)? Линейная регрессия - это простой метод, но довольно эффективный, даже если это просто прямая линия. В этом посте мы рассмотрели только случай, когда есть только одна переменная (год). Фактически, это может быть расширено для обработки нескольких переменных, но это тема для более поздней публикации.

использованная литература

  1. Https://en.wikipedia.org/wiki/Linear_regression
  2. Https://towardsdatascience.com/introduction-to-machine-learning-algorithms-linear-regression-14c4e325882a
  3. Https://developers.google.com/machine-learning/crash-course/descending-into-ml/linear-regression
  4. Https://www.coursera.org/learn/machine-learning/lecture/kCvQc/gradient-descent-for-linear-regression