线性回归基础

使用 scikit-learn 的监督学习

George Boorman

Core Curriculum Manager, DataCamp

回归机制

  • $y = ax + b$

    • 简单线性回归只用一个特征

      • $y$ = 目标

      • $x$ = 单个特征

      • $a$, $b$ = 模型参数/系数:斜率、截距

  • 如何选择 $a$ 和 $b$?

    • 为任意直线定义误差函数

    • 选择使误差函数最小的直线

  • 误差函数 = 损失函数 = 成本函数

使用 scikit-learn 的监督学习

损失函数

散点图

使用 scikit-learn 的监督学习

损失函数

回归线自左下到右上穿过观测点中部

使用 scikit-learn 的监督学习

损失函数

从回归线到各观测点的红色线段

使用 scikit-learn 的监督学习

损失函数

红色线段表示残差

使用 scikit-learn 的监督学习

损失函数

箭头标示正残差:观测点在回归线上方

使用 scikit-learn 的监督学习

普通最小二乘法

第二个箭头指向回归线下方的残差,表示负残差

$RSS = $ $\displaystyle\sum_{i=1}^{n}(y_i-\hat{y_i})^2$

普通最小二乘法(OLS):最小化 RSS

使用 scikit-learn 的监督学习

高维线性回归

$$ y = a_{1}x_{1} + a_{2}x_{2} + b$$

  • 拟合线性回归模型:
    • 需指定 3 个变量:$ a_1,\ a_2,\ b $
  • 更高维:
    • 称为多元回归
    • 为每个特征和 $b$ 指定系数

$$ y = a_{1}x_{1} + a_{2}x_{2} + a_{3}x_{3} +... + a_{n}x_{n}+ b$$

  • scikit-learn 用法相同:
    • 传入两个数组:特征和目标
使用 scikit-learn 的监督学习

使用全部特征的线性回归

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
reg_all = LinearRegression()
reg_all.fit(X_train, y_train)
y_pred = reg_all.predict(X_test)
使用 scikit-learn 的监督学习

判定系数(R-squared)

  • $R^2$:量化特征对目标方差的解释比例

    • 取值 0 到 1
  • 高 $R^2$:

回归线以约45度从左下到右上,且靠近多数观测点

 

 

  • 低 $R^2$:

回归线近乎水平,观测点远离该线分散

使用 scikit-learn 的监督学习

scikit-learn 中的 R-squared

reg_all.score(X_test, y_test)
0.356302876407827
使用 scikit-learn 的监督学习

均方误差与均方根误差

$MSE = $ $\displaystyle\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y_i})^2$

  • $MSE$ 的单位为目标变量单位的平方

 

$RMSE = $ $\sqrt{MSE}$

  • $RMSE$ 与目标变量单位相同
使用 scikit-learn 的监督学习

scikit-learn 中的 RMSE

from sklearn.metrics import root_mean_squared_error

root_mean_squared_error(y_test, y_pred)
24.028109426907236
使用 scikit-learn 的监督学习

让我们来练习!

使用 scikit-learn 的监督学习

Preparing Video For Download...