多元线性回归(附代码实现) |
您所在的位置:网站首页 › 回归分析里的常数 › 多元线性回归(附代码实现) |
在学习多元线性回归之前,你需要对线性回归有一个基本认识以及了解到一元线性回归实现。(没以上基础的童鞋可以看看上面的链接) 首先,我们来对比一下一元线性回归和多元线性回归: 共同点都是线性的模型,什么意思呢? 我们知道线性回归的公式是这样的: 一元线性回归: y = ax + b 多元线性回归: y = \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + ...+\theta_nx_n + b 这样一个线性模型非常具有可解释性,比如一元线性回归中我们是以波士顿房价数据集的RM(房子房间数目的多少)特征作为输入数据去拟合一条直线,最终得到的参数a是9.156889130216117,这是个正数,解释起来的话就是一个房子的房间数量越多,房价越高,这听起来确实挺合理的,这个系数就代表了这个特征对预测结果影响程度。 不同点一元线性回归只有一个特征,系数也只有一个(a是系数,b是偏置),而多元线性回归有多个特征作为输入,系数也有多个,影响预测结果的特征变多了,每个特征对预测结果的影响都是线性的。 多元线性回归的公式之前我们这样表示的 y = \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + ...+\theta_nx_n + b 其实我们可以把偏置也看成是一个特征,然后式子就可以写成这样: y =\theta_0x_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + ...+\theta_nx_n 我们把偏置项的输入 x_0 始终看成是1,输入就应该是: (1 , x_1,x_2,x_3...x_n) 我们的目标是求解出最优的参数 \theta : \theta = (\theta_0 , \theta_1,\theta_2,\theta_3...\theta_n) 最优参数 \theta 的求解方法:数学家帮我们做好了,我们只需要老老实实的记住公式就行了。(没有推导,其实是我不会,hhh) 所有的训练样本的即输入定义为 X ,标签定义为 y 。 \hat{y} = \theta_0 + \theta_1x_1^i+ \theta_2x_2^i+ \theta_3x_3^i+...+ \theta_nx_n^i 即\hat{y} = x^i\theta 使用正规方程就能求解出最佳参数 \theta : \theta = (X^TX)^{-1}X^Ty 理论讲完了,下面就是代码实现: 导入numpy和数据import numpy as np from sklearn.datasets import load_boston boston = load_boston() x = boston.data y = boston.target生成偏置b记住参数和输入应该是这样的: \theta = (\theta_0 , \theta_1,\theta_2,\theta_3...\theta_n) x = (1 , x_1,x_2,x_3...x_n) 我们输入特征中并没有那个1,所以我们需要人为的加上去。 np.ones((len(x),1))[:5,]结果一模一样。 将代码封装好import numpy as np class LinearRegression_2: def __init__(self): self._theta = None self.intercept_ = None self.coef_ = None def fit(self,x_train,y_train): X_b = np.hstack([np.ones((len(x_train),1)), x_train]) self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train) self.intercept_ = self._theta[0] self.coef_ = self._theta[1:] return self def predict(self,x_predict): X_b = np.hstack([np.ones((len(x_predict),1)), x_predict]) return X_b.dot(self._theta) def __repr__(self): return "LinearRegression_2()"下期预告:梯度下降法 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |