多元线性回归
2020-03-02 本文已影响0人
抹茶不加茶
原理
相较于简单线性回归,多元线性回归仅仅是特征数从一变成了多,其他的基本上没有变化
-
注意行为样本,列为特征
X矩阵的排列示意
-
基于多元线性回归,对某一个样本X(i),如图
多元线性回归
相较于简单线性回归,其横坐标仍然是X(i)但从单个数值变成了一行数值,也就是一个1*n(n为特征数)的矩阵
-
我们注意到方程和简单线性回归一样,有一个常数,所以我们不妨添加一行X(i=0)
1
-
改变之后,我们注意到,这时y_hat与x和seata的关系
关系
-
目标不变,仍为使预测值与数据值相差更小,这时我们使用矩阵的表示形式
目标
这时我们可以推导出seata的表达式,推导过程这里省略
- seata的这个表达式被称为正规方程解
- 注意,假设最初X数据为mn的矩阵,这时Xb为mn+1,seata为n+1*1的矩阵(其实一般而言是不区分Xb和X的)
利用正规方程进行实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston=datasets.load_boston()
#波士顿房产数据
x=boston.data
y=boston.target
x=x[y<np.max(y)]
y=y[y<np.max(y)]
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
#实际上这里size默认是0.2
#下面开始训练线性回归模型
X_b = np.hstack([np.ones((len(x_train), 1)), x_train])
theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
intercept_ = theta[0]#返回截距
coef = theta[1:]#返回theta向量
xtest_b=np.hstack([np.ones((len(x_test), 1)), x_test])
y_predict=xtest_b.dot(theta)
mse_test=np.sum((y_predict-y_test)**2)/len(y_test)
rsquared=mse_test/np.var(y_test)
其中可也得到截距等参数如图

使用sklearn进行多元线性回归
同样的例子,完全使用sklearn进行编写,这时候我们要注意到,它并没有采用正规化方程的方法,但由于我们是不用知道其底层究竟是如何封装的,所以目前尽管使用就是
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
boston=datasets.load_boston()
#波士顿房产数据
x=boston.data
y=boston.target
x=x[y<np.max(y)]
y=y[y<np.max(y)]
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=666)
#实际上这里size默认是0.2
#下面开始训练线性回归模型
from sklearn.linear_model import LinearRegression
Lin_reg=LinearRegression()
Lin_reg.fit(x_train,y_train)
Lin_reg.score(x_test,y_test)

总结
其实在学习的课程里面,关于多元线性回归还有一些对于可解释性等的思考与介绍,有利于我们对于现实模型的理解,这里我不是很想赘述,因为可能我们学习ml,更多用到的可能是后面复杂一些的算法,另外可解释性也是很容易理解的,在实际上手数据之后,相必我们拿到预测结果自己也能有所分析!!!所以内容暂且写到这里吧,以后还有想要增加的内容,我也会自行增加!