1.0 模型介绍
在机器学习入门(三)——简单线性回归中,介绍了只有一个自变量的线性回归方程的构建思路以及推到过程。这一章在此基础上,多简单线性回归进行扩展,增加了自变量的数量,即多元线性回归
此时,自变量不再是一个列数字,而是包含列的向量,每一个因变量是由个自变量一个常数项以及残差共同决定的(残差,也称扰动项,可以理解为无法被回归方面解释的那一部分误差)。
1.1 前提条件
统计上严格来讲,多元线性回归时需要严格考察适用条件,这里只简单介绍下,因为实际工作中可以方框对适用条件的考察,但学术中需要严格遵守。
首先,应当满足分布正态性、方差齐性以及独立性的要求。
其次,各个自变量之间应当相互独立(即统计上常说的没有共线性)。
事实上,统计上很多操作的情况下都有上述这些要求,比如方差分析。这里就不在过多阐述,因为现实情况中很少存在严格符合这些条件的情况,因此通常通过绘制残差直方图对于有个大致的判断即可。而自变量间只要没有特别直接的关联,也可姑且认为是相互独立的。
2.0 建模思路
与简单线性回归方差的思路类似,也是通过寻找令损失函数最小的一组系数来进行。最小二乘法在这里同样适用,此时目标函数为:
分别就对目标函数求导,得到的等式:
整理可得:
...... ...... ...... ......
向量化,可得,于是有。
2.1 sklearn中的线性回归
sklearn中的线性回归包适用于简单线性回归和多元线性回归,仅仅是自变量的输入维度不一样:
from sklearn.linear_model import LinearRegression
linear_reg = LinearRegression()
linear_reg.fit(X_train, y_train)
linear_reg.intercept_ # 常数项
linear_reg.coef_ # 回归系数项
y_predict = linear_reg.predict(X_train)
linear.score(y_train, y_predict) # r_squared值
3.0 多项式回归
在线性回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。多项式就是指回归方程中存在自变量的高次项。
sklearn中的多项式回归,本质上还是用PolynomialFeatures转换器转化成多元线性回归来实现,如将[x1,x2]转换为[1, x1, x2, x1^2, x1x2, x2^2]。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
regressor = LinearRegression()
regressor.fit(X_train, y_train)
xx = np.linspace(0,26,100)
yy = regressor.predict(xx.reshape(-1,1))
quadratic = PolynomialFeatures(degree = 2)
X_train_quadratic = quadratic.fit_transform(X_train)
quadratic_reg = LinearRegression()
quadratic_reg.fit(X_train_quadratic, y_train)
xx_quadratic = quadratic.fit_transform(xx.reshape(-1,1))
yy_quadratic = quadratic_reg.predict(xx_quadratic)
plt.plot(X_train, y_train, 'k.', label="train")
plt.plot(xx, yy, label="y=ax+b")
plt.plot(xx, yy_quadratic, 'r-', label="y=ax^2+bx+c")
plt.legend()
plt.show()