机器学习入门(五)——多元线性回归

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()



你可能感兴趣的:(机器学习入门(五)——多元线性回归)