Руководство по изучению машинного обучения путем внедрения машинного обучения

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

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

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

На рисунке ниже мы видим, что мы идентифицируем столбец 1 как x, входной функция, который будет использоваться для прогнозирования меткиy, произвольно определяемой столбцом2. Метка, которую мы хотим предсказать, является непрерывным значением, что означает реальное значение, принадлежащее [-infinite ; +бесконечный]. Итак, подождите, не нужно бояться этого определения, оно просто означает, что это значение не является дискретным, то есть не 0, 1 или 2, а любое возможное реальное значение, такое как 0,5, 1,65, 2,78 или -20,1 в пределах интервала [- бесконечный; +бесконечно]

Простейшая модель машинного обучения для работы с такой конкретной проблемой называется линейной регрессией. Обратите внимание, что это самый простой, но определенно не единственный. Линейная регрессия — это математическое определение приближения, которое мы собираемся использовать для прогнозирования метки y: так называемая общая формула выглядит следующим образом: w0 + w1x1 + w2x2 + w3x3 + … + wpxp, где (w0,w1,w2,…wp), короче говоря, wi — это коэффициенты, которые мы хотели бы определить для оптимизации линейной регрессии и, следовательно, определить хорошую прогностическую модель для хорошего прогнозирования. Это своего рода очень формальное утверждение, которое мы можем представить следующим образом:

Прежде чем перейти к нашей первой реализации ML, давайте подведем итоги:

  • у нас есть набор данных, набор данных, который содержит входные данные для работы с
  • мы произвольно определили col2 как метку y, которую мы хотим предсказать
  • мы выбираем линейную регрессию как модель, аппроксимирующую метку

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

  • Python (›= 2,7 или ›= 3,3)
  • NumPy (›= 1.8.2) — pip install numpy
  • SciPy (›= 0.13.3) — pip install scipy
  • Scikit-learn (для которого требуется предыдущая среда) — pip install sklearn
  • Matplotlib (последняя доступная версия) — pip install matlplotlib

Настоятельно рекомендуется работать с Anaconda и виртуальной средой, чтобы каждый раз настраивать соответствующие предварительные требования, такие как numpy, scipy, sklearn в выделенной среде. Это гарантирует, что вы работаете в чистой и готовой к использованию среде, и не будете терять время на проблемы с зависимостями модулей.

Давайте напишем код:

Сначала мы хотим импортировать модуль, который будем использовать.

import matplotlib.pyplot as plt 
import numpy as np
import sklearn

Несколько комментариев здесь, так как мы впервые представляем эти модули. Matplotlib.pyplot (псевдонимы как plt) позволяет визуализировать данные, numpy (псевдонимы как np) позволит форматировать данные в соответствии с ожиданиями модели линейной регрессии, а sklearn — это фактический модуль, который содержит модель линейной регрессии (а также другие модели машинного обучения).

Создать набор данных

Затем мы собираемся создать наш простой набор данных с нуля на это время:

x = np.array([0,1,2,3,4,5,6,7,8,9])
y = np.array([2.1,3.5,4.2,6.1,7.2,8.0,9.5,7.0,12.7,10.0])

Здесь следует отметить очень важный момент: поскольку в этой статье мы начинаем очень просто, мы собираемся использовать здесь только одну переменную x для прогнозирования метки y . Это означает, что мы исходим из того, что линейная регрессия, над которой мы хотим работать, имеет вид:
Линейная регрессия = w0 + w1x1

Визуализируйте y и x

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

plt.scatterplot(x,y)

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

Модель поезда

Теперь, когда у нас есть набор данных, определенный x & y, определенный yв качестве нашей метки и визуализируем псевдолинейную связь, которая существует между x & y, следующий шаг будет состоять в окончательном определении и Обучение нашей модели машинного обучения. Да, вот и все, Модель линейной регрессии, которую мы собираемся использовать, на самом деле является Моделью машинного обучения, которая позволит нам делать прогнозы.

from sklearn import linear_model
lin_reg_model = linear_model.LinearRegression()
x_train = x.reshape(-1,1)
y_train = y.reshape(-1,1)
lin_reg_model.fit(x,y)

Здесь много чего происходит, поэтому давайте рассмотрим каждый шаг. Из sklearn мы импортируем linear_model, который содержит модель линейной регрессии, которую мы хотим использовать в качестве нашей функции приближения, которую мы называем lin_reg_model. Затем нам нужно изменить форму x & y с помощью встроенной функции reshape numpy, чтобы убедиться, что x_train & y_train отформатированы так, как ожидается нашей моделью регрессии. Теперь может произойти волшебство: когда мы вызываем метод fit() с (x,y)параметрами, мы фактически обучаем нашу модель линейной регрессии с входными данными x, которые дают метку y. Результат обучения автоматически дает нам лучшее значение для коэффициентов w0 и w1, которые мы пытались определить, чтобы определить лучшую модель линейной регрессии с учетом x & y.

print("w1 coefficient for the Linear Regression:")
print(lin_reg_model.coef_)
print("w0 coefficient for the Linear Regression:")
print(lin_reg_model.intercept_)
w1 coefficient of our Linear Regression: 
[[0.97272727]]
w0 coefficient of our Linear Regression: 
[2.65272727]

Таким образом, выходные значения говорят нам, что после обучения наша линейная регрессия определяется следующим образом:
Линейная регрессия = 2,65 + 0,97x
Теперь добавление линейной регрессии к предыдущей визуализации дает нам «лучшая линия», которая приблизительно соответствует y vs x

lin_reg_view = lin_reg_model.intercept + lin_reg_model.coef[0] * x
plt.plot(x,y,'o',x,line)

Предсказывать

До сих пор у нас все было очень хорошо, теперь, когда мы обучили модель линейной регрессии, используя x в качестве входного значения и y в качестве метки. Последний шаг, который мы хотим сделать сейчас, - это фактически использовать нашу обученную линейную регрессию, чтобы сделать прогноз на новом входе x . Для этого мы собираемся использовать метод predict() из нашей модели линейной регрессии для нового входного значения x_new.

x_new = np.array([1.2,3.4,10.2])
x_new = x_new.reshape(-1,1)
predictions = lin_reg_model.predict(x_new)
print(predictions)
[[ 3.82      ]
 [ 5.96      ]
 [12.57454545]]

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

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