我正在尝试从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
现在,我想在python中创建模型之前先在excel中手动计算系数。为了计算每个特征的权重,我使用了以下公式:
Calculating the Weights of the Features
为了计算截距,我使用了公式b0 =平均值(y)-b1 *平均值(x1)-b2 *(平均值(x2)....- bn *平均值(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))
感谢您阅读这篇长文章,我很感激。
我正在尝试从python开始从头创建多元线性回归模型。使用的数据集:来自Sklearn的Boston Housing数据集。由于我专注于模型构建,因此我没有执行任何预...
似乎麻烦在于系数计算。您给出的用于计算系数的公式为标量形式,用于最简单的线性回归,即只有一个特征x。