Рубрики
Без рубрики

#P3 – Линейная регрессия

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

ML с Python (4 серии деталей)

Линейная регрессия пытается найти взаимосвязь между двумя переменными, подгоняя линейное уравнение для наблюдаемых данных. Одна переменная считается независимой переменной, а другая считается зависимой переменной. Зависимая переменная также известна как Критерий переменная и независимая переменная также известна как Переменная предиктора Анкет

Здесь наша задача состоит в том, чтобы найти, как зависимая переменная (Y) может быть предсказана на основе независимой переменной (x). Для этого мы считаем, что весь набор точек (x, y) лежит на прямой линии, что означает, что между ними существует линейная связь.

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

Итак, теперь мы должны найти линию, которая хорошо удовлетворяет следующие условия –

  • Линия должна пройти через точку (x, y) или
  • Расстояние между линией и точкой должно быть минимальным.
Источник – Google

Теперь возникает вопрос, как найти такую линию. Нет, нам не нужно брать бумагу и начинать замышлять все точки. Вспомните геометрию, которая утверждает, что уравнение линии составляет y + bx , где b это наклон (градиент) и A это y-Intercept . Если мы сможем найти значение A и B, мы можем найти значение для Y в соответствии с данным X. Таким образом, мы сможем предсказать ценность y.

Значение A и B может быть рассчитано по данной формуле

Источник – нажмите здесь

То, что мы обсуждали до сих пор, было основано на простой линейной регрессии, в которой значение Y зависит от одной независимой переменной x.

Множественная линейная регрессия

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

Уравнение линии дается как y + b1.x1 + b2.x2 + ...... где x1, x2, ... независимые переменные, B0 y-intercept, и b1, b2, ... склоны. Поиск значений B0, B1, B2 В таком случае делается с использованием некоторой матричной алгебры.

Шаги по обучению модели

Предварительное условие – Python, Google Colab или Jupyter

Окружение

Вы можете использовать ноутбуки Jupyter вместе с Anaconda или просто Google Colab. Если вы используете Google Colab, вы должны импортировать файл из GitHub или через модуль Google.colab. Колаб имеет несколько хороших функций доступности. Jupyter работает на вашей местной машине, поэтому, если у вас есть ресурсы, вам следует пойти на Google Colab.

Сбор данных

Первым шагом для обучения модели является сборы данных. Я предпочитаю использовать Kaggle или Репозиторий машинного обучения UCI который предоставляет различные типы наборов данных. Наборы данных в основном доступны в форме файлов CSV (разделенные запятыми значениями).

О наборе данных

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

Набор данных содержит 9568 точек данных, собранных с электростанции комбинированного цикла в течение 6 лет (2006-2011), когда электростанция была установлена для работы с полной нагрузкой. Особенности состоят из почасовых средних переменных окружающей среды температуры (T), давления окружающей среды (AP), относительной влажности (RH) и выхлопного вакуума (V), чтобы предсказать чистую почасовую электрическую энергию (EP) завода.

Информация о атрибуте:

Особенности состоят из почасовых средних переменных окружающей среды

Температура (AT) в диапазоне 1,81 ° C и 37,11 ° C, давление окружающей среды (AP) в диапазоне 992,89-1033,30 млн, относительная влажность (RH) в диапазоне от 25,56% до 100,16% вакуума (V) в диапазоне от 25,56% до 100,16% (V) 25.36-81,56 см рт.ст. Четчатая электрическая энергия.

Средние значения взяты из различных датчиков, расположенных вокруг завода, которые регистрируют окружающие переменные каждую секунду. Переменные даны без Нормализация Анкет Мы должны тренировать модель для прогнозирования PE

Импорт набора данных

Pandas – это библиотека Python, которая может помочь вам преобразовать CSV, Excel, List, Dict, Numpy Array в DataFrame. Мы будем использовать его для импорта нашего файла CSV. Если вы используете Colab, сначала загрузите свой файл CSV в Colab, то его путь будет доступен как ‘/content/file_name.csv’

import pandas
# enter your CSV file path here
path = r"path\to\csv"
dataframe = pandas.read_csv(path)
dataframe.info()
dataframe.head(5)

Info () дает вам информацию о вашем DataFrame, а Head (5) возвращает первые 5 строк DataFrame.

Разделение независимых и зависимых переменных

x = dataframe.loc[:,dataframe.columns!="PE"].values
y = dataframe.loc[:,"PE"].values
print(x[0],"\n",y[0])

[14,96 41,76 1024,07 73,17] 463.26 LOC – это свойство DataFrame, которое используется для выбора строк и столбцов. Это также может занять логические ценности. : используется для выбора всех рядов или столбцов.

Предварительная обработка данных

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

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

Разделение данных обучения и тестирования

В любой контролируемой модели обучения мы разделяем весь набор данных на два типа, набор данных обучения и набор тестирования. Мы обучаем модель на основе учебного набора данных, а затем тестируем ее с помощью набора данных. Как правило, учебный набор данных занимает от 70% до 80% всего набора данных. Scikit-Learn (Sklearn)-это библиотека в Python, которая предоставляет много неконтролируемых и контролируемых алгоритмов обучения. Он построен на Numpy, Pandas и Matplotlib.

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = 0.2, random_state=0)

Здесь test_size Определяет размер тестовых данных. В этом случае данные тестирования составляют 20% от всего данных. random_state определяет, как будет работать случайная функция.

Подгонка модели и прогнозирование значений.

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train,y_train)

# predictions
y_pred = model.predict(x_test)
print("actual  |  predicted")
for i in range(0,5):
    print("{:.2f}  |  {:.2f}".format(y_test[i], y_pred[i]))

Фактическое | прогнозируется 431.23 | 431.43 460.01 | 458.56 461.14 | 462.75 445.90 | 448.60 451.29 | 457.87

И вот ваша модель обучена. Вы можете увидеть, как почти это предсказывает значения «PE».

Расчет R-Square, перехват, склоны

R-Squared-это статистическая мера того, насколько близки данные к установленной линии регрессии. Он также известен как коэффициент определения или коэффициент множественного определения для множественной регрессии.

r_sq = model.score(x,y)
r_sq_train = model.score(x_train,y_train)
r_sq_test = model.score(x_test,y_test)
print("r_sq : ",r_sq, r_sq_train, r_sq_test)

error = 1 - r_sq


print('intercept :', model.intercept_ )
print('slope :', model.coef_)

R_SQ: 0,9286947104407257 0,9277253998587902 0,9325315554761303 перехват: 452.8410371616384 Уклон: [-1,97313099 -0.23649993 0,06387891 -0.15807019]

model.score () Вычисляет значение R квадрата. В этом случае значение R_SQ говорит, что точность всей модели составляет 92,86%, в то время как стоимость обучающего набора составляет 92,77%, а тестовый набор – 93,25% model.intercept_ Возвращает значение перехвата B0 model.coef_ Возвращает список коэффициентов (склоны) b1 b2 b3 ....

Выбор функций

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

Метод отсталого отмены

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

  1. Выберите уровень значимости (p-значение), как правило, 05)
  2. Подписать модель со всеми возможными предикторами
  3. Найти p-значения всех предикторов
  4. Удалите предиктор с наибольшим значением P, затем снова установите модель и повторите процесс до тех пор, пока P-значение не превышает 0,05

Есть одна вещь, о которой нужно позаботиться. y + b1.x1 + b2.x2 + b3.x3 ... В приведенном выше уравнении, если вы заметили, что каждый Xn Имеет множитель мгновенный но не постоянная B0 Анкет В пакете StatsModel рассматривается мультипликатор только в том случае, если он имеет значение функции. Если нет значения функций, то его не подхватит при создании модели. Итак, B0 будет сброшен. Но если у вас есть x0 и установите на 1 Это решит проблему. Следовательно, нам нужно создать функцию.

import statsmodels.regression.linear_model as sm
import numpy
print(x[0])
# add a column of values = 1 (int)
be_x = numpy.append(arr = numpy.ones((9568,1)).astype(int), values = x, axis=1)
print(be_x[0])

# finding significance level
x_opt = be_x[:,[0,1,2,3,4]]
ols = sm.OLS(endog = y, exog = x_opt).fit()
ols.summary()

Если вы видите P> | t | В столбце нет значения, это больше 0,05. Так что в нашей модели нет бесполезной функции.

Что дальше

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

ML с Python (4 серии деталей)

Оригинал: “https://dev.to/ashuto7h/p3-linear-regression-242”