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