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

Линейная регрессия — это алгоритм контролируемого машинного обучения (ML), используемый для задач прогнозирования (регрессии). Термин «линейная регрессия» был впервые введен сэром Фрэнсисом Гальтоном в 1894 году. Линейная регрессия — это статистический метод, который моделирует связь между зависимой переменной (Y) и одной или несколькими независимыми переменными (X) в виде линейного уравнения. Мы не можем применить линейную регрессию к данным, которые не имеют линейной связи. В случае нелинейных данных мы можем применить полиномиальную регрессию или любые алгоритмы Advanced ML. Линейная регрессия строго принимает только один вход и производит один выход. В случае нескольких входных данных мы можем применить множественную линейную регрессию, которая может принимать более одного входа. Математическое уравнение для линейной регрессии задается следующим образом:

Y=w0+w1*X

Где w0 и w1 — коэффициенты, X — входные данные, а Y — выходные данные/прогноз.

Реализация

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

Импорт пакетов и загрузка набора данных

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import seaborn as sns
from sklearn import metrics
from scipy.stats import pearsonr
df=pd.read_csv("OneDrive\Desktop/dataset2.csv")
df.head(10)

Проверка нулевых значений

df.isnull().sum()

Описательная статистика набора данных

df.describe()

Извлечение значений X,Y и проверка линейной зависимости и корреляции

Здесь я использовал корреляцию Пирсона для анализа силы связи. Значение коэффициента корреляции Пирсона находится в диапазоне от -1 до +1, где значение от 0 до -1 указывает на отрицательную корреляцию, значения от 0 до 1 указывают на положительную корреляцию, а если значение равно 0, то это указывает на наличие нет связи. Поскольку мы получили коэффициент корреляции 0,874 (около +1), у нас сильная положительная корреляция.

x=df['ENGINESIZE'];y=df['CO2EMISSIONS']
plt.scatter(x,y)
plt.xlabel('Engine Size')
plt.ylabel('Carbon Emission')
plt.show()
corr, _ = pearsonr(x, y)
print('Pearsons correlation: %.3f' % corr)

Оценка коэффициентов линейной регрессии (w0,w1)

Мы будем использовать определяемую пользователем функцию для оценки значений коэффициента w0,w1. Функция вернет значения коэффициентов

def estimate_coef(x, y):
    t1=t2=0
    mx=(sum(x)/len(x))
    my=(sum(y)/len(y))
    for i in range(len(x)):
        t1+= (x[i]-mx)*(y[i]-my)
        t2+= (x[i]-mx)**2
        w1=t1/t2
        '''if any([t1,t2])==0:
            w1=0.0
        else:
            w1=t1/t2'''
        w0=my-w1*mx

    return (w0, w1)

Прогнозирование и оценка

def plot_regression_line(X,y, w):
    
    pred=[]
    for x in X:
        y1=w[0]+w[1]*x
        pred.append(y1)

    #Plotting Regression Line
    plt.scatter(X,y, color="blue")
    plt.plot(X,pred, color='red')
    plt.ylabel('Green House Gas Emission')
    plt.xlabel('Number of years')
    plt.title('LINEAR REGRESSION PLOT')
    plt.show()  
    mabe= round(metrics.median_absolute_error(y,pred), 8)
    mse= round(metrics.mean_squared_error(y,pred), 8)
    mae= round(metrics.mean_absolute_error(y,pred), 8)
    r2= round(metrics.r2_score(y,pred)*100, 2)
    r2=str(r2)+'%'
    return pd.DataFrame(data=[['Accuracy',r2],['Mean Absolute Error',mae],['Mean Squared Error',mse],['Median ABsolute Error',mabe]],
                        columns=['Metrics','Values'])
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.20,random_state=2)
print('Train set size: ',len(X_train),'\nTest set size',len(X_test))


w = estimate_coef(list(X_train), list(y_train))
print("Estimated coefficients:\nW0 = {} \
\nW1 = {}".format(w[0], w[1]))

d=plot_regression_line(X_test, y_test, w)
d

Здесь набор данных разделен на наборы Test и Train с помощью train_test_split. 80 % данных используются для обучения, а оставшиеся 20 % данных используются для тестирования. Как видно на изображении (5), я использовал различные показатели, такие как среднеквадратическая ошибка, средняя абсолютная ошибка, медианная абсолютная ошибка и показатель R2. Поскольку точность нашей модели составляет 79,17%, модель работает достаточно хорошо. Мы можем повысить точность, применяя больше методов предварительной обработки, настройки параметров и т. д.

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

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