Я пытаюсь создать модель множественной линейной регрессии с нуля в python. Используемый набор данных: Boston Housing Dataset
из Sklearn
. Поскольку мое внимание было сосредоточено на построении модели, я не выполнял никаких шагов предварительной обработки данных. Однако я использовал модель OLS для вычисления p-значений и удалил 3 функции из данных. После этого я использовал модель линейной регрессии, чтобы узнать веса для каждой функции.
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
X=load_boston()
data=pd.DataFrame(X.data,columns=X.feature_names)
y=X.target
data.head()
#dropping three features
data=data.drop(['INDUS','NOX','AGE'],axis=1)
#new shape of the data (506,10) not including the target variable
#Passed the whole dataset to Linear Regression Model
model_lr=LinearRegression()
model_lr.fit(data,y)
model_lr.score(data,y)
0.7278959820021539
model_lr.intercept_
22.60536462807957 #----- intercept value
model_lr.coef_
array([-0.09649731, 0.05281081, 2.3802989 , 3.94059598, -1.05476566,
0.28259531, -0.01572265, -0.75651996, 0.01023922, -0.57069861]) #--- coefficients
Теперь я хотел вычислить коэффициенты вручную в Excel перед созданием модели в python. Чтобы вычислить вес каждой функции, я использовал эту формулу:
Расчет весов элементов
Для вычисления точки пересечения я использовал формулу b0 = mean (y) -b1 * mean (x1) -b2 * (mean (x2) ....- bn * mean (xn)
Значение точки пересечения по моим расчетам было 22,63551387 (почти то же, что и в модели)
Проблема в том, что веса характеристик из моих вычислений далеки от веса линейной модели sklearn.
-0.002528644 #-- CRIM
-0.001028914 #-- Zn
-0.038663314 #-- CHAS
-0.035026972 #-- RM
-0.014275311 #-- DIS
-0.004058291 #-- RAD
-0.000241103 #-- TAX
-0.015035534 #-- PTRATIO
-0.000318376 #-- B
-0.006411897 #-- LSTAT
Используя первую строку в качестве тестовых данных для проверки моих расчетов, Я получаю 22,73167044199992, в то время как модель линейной регрессии предсказывает 30,42657776. Исходное значение - 24.
Но как только я проверяю другие строки, модель sklearn имеет больше вариаций, в то время как прогнозы, сделанные на основе весов из моих вычислений, все показывают значения, близкие к 22.
Я думаю, что делаю ошибку при вычислении весов, но не уверен, в чем проблема? Есть ли ошибка в моих расчетах? Почему все мои коэффициенты из расчетов так близки к 0?
Вот мой код для расчета коэффициентов: (здесь новичок)
x_1=[]
x_2=[]
for i,j in zip(data['CRIM'],y):
mean_x=data['CRIM'].mean()
mean_y=np.mean(y)
c=i-mean_x*(j-mean_y)
d=(i-mean_x)**2
x_1.append(c)
x_2.append(d)
print(sum(x_1)/sum(x_2))
Спасибо, что прочитали этот длинный пост, я ценю это.