Линейная регрессия
Линейная регрессия — это алгоритм контролируемого машинного обучения (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.