Регресия: —

Регресията попада в категорията на контролирано обучение в машинното обучение. В машинното обучение се отнася за прогнозиране на постоянните резултати, известен също като Регресионен анализ.

При контролираното обучение вече ни е дадена информация за резултатите (етикети) по отношение на характеристиките, дадени в набор от данни.

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

Когато имаме един атрибут за прогнозиране с помощта на модела за прогнозиране. Това е известно като модел на линейна регресия.

Линеен модел прави прогноза чрез просто изчисляване на претеглена сума от входните характеристики, плюс константа, наречена член на отклонение (наричан също термин на прихващане).

Във векторизирана форма:

Където : -

Така че преди да започнем да обучаваме нашия модел, първо трябва да изясним какво всъщност означава „обучение на модел“.

На прост език: —

Обучението на модел означава, че задаваме стойностите на параметъра на модела, най-близки до оригиналната стойност на параметъра на модела.

В машинното обучение: —

„Обучението на модел означава задаване на неговите параметри, така че моделът да пасва най-добре на набора за обучение.“

Следователно, за да обучим режим, трябва да намерим стойността на θ, която минимизира MSE (средна квадратна грешка) или функцията Cost. Тъй като е по-лесно да се минимизира MSE отколкото RMSE.

И така, сега знаем, че трябва да намерим най-добрите параметри, които да отговарят на нашия тренировъчен набор, но как? Отговорът е Нормалното уравнение.

Където : -

Можем да използваме горното уравнение за намиране на оптималните стойности на θ, за да минимизираме функцията на разходите.

Стига с дефинициите, нека да видим как можем да приложим тези уравнения към нашия Python код: —

Да предположим, че имаме набор от данни, състоящ се само от една характеристика и една целева стойност за извършване на линейна регресия, която може да бъде дадена по следния начин:

import matplotlib.pyplot as plt
import numpy as np
X = 3 * np.random.rand(100, 1)
y = 6+ 4* X + np.random.randn(100, 1)
plt.plot(X, y, "b.")
plt.xlabel("X", fontsize=14)
plt.ylabel("y", rotation=0, fontsize=14)
plt.show()

Нека начертаем екземплярите на функцията и техните етикети върху графиката x-y:

Сега трябва да намерим оптималните стойности на θ, за да минимизираме нашата функция на разходите. Актуализиран код за намиране на стойностите на θ (редактираният код е показан с удебелен шрифт): —

import matplotlib.pyplot as plt
import numpy as np
X = 3 * np.random.rand(100, 1)
y = 6+ 4* X + np.random.randn(100, 1)
# Adding the bias term to features in our dataset
bias_term = np.ones((100, 1))
X_with_bias = np.c_[bias_term, X]
# Training our model to find the best values of theta to best fit our training set (i.e. X, y)
theta_best = np.linalg.inv(X_with_bias.T.dot(X_with_bias)).dot(X_with_bias.T.dot(y))
# Let's predict some values now
X_new = np.array([[0], [2]])
X_new_with_bias = np.c_[np.ones((2, 1)), X_new]
y_pred = X_new_with_bias.dot(theta_best)
# Let's plot our regression model to see how well it fits the 
# training data
plt.plot(X, y, "b.")
plt.plot(X_new, y_pred, "r-", label="Predictions")
plt.axis([0, 2, 0, 15])
plt.legend(loc="best", fontsize=14)
plt.xlabel("$X$", fontsize=14)
plt.ylabel("$y$", rotation=0, fontsize=14)
plt.show()

След изпълнение на горния код ще получите следната графика: —

Това наистина е подходящо, но вместо да следваме този процес, имаме по-лесен начин за извършване на линейна регресия.

Можем да използваме библиотеката sklearn.linear_model.LinearRegression на sci-kit learn, за да намерим същия резултат като по-горе.

from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
# Training the lin_reg model with X and y
lin_reg.fit(X, y)
# Making predictions
X_new = np.array([[0], [2]])
y_pred = lin_reg.predict(X_new)
plt.plot(X, y, "b.")
plt.plot(X_new, y_pred, "r-", label="Predictions")
plt.legend(loc="best", fontsize=14)
plt.xlabel("$X_1$", fontsize=14)
plt.ylabel("$y$", rotation=0, fontsize=14)
plt.show()

Както можете да видите, че и двете графики са идентични, така че няма нужда да разработваме алгоритъм от нулата, ако имаме същия алгоритъм в библиотеката на sci-kit-learn.

Ако ви е харесало, моля, ръкопляскайте, за да мога с ентусиазъм да пиша повече за машинното обучение и други технологии.

Благодаря ви, че прочетохте :)