CH2-回归问题

视频学习要点

P1 有监督学习和无监督学习

  • 有监督学习: 有因变量,有特征向量,目标是能够对未在数据集中出现的输入给出合理的预测,可分为:
    • 回归:目标变量连续
    • 分类:目标变量离散
  • 无监督学习: 无因变量,有特征向量,目标是寻找数据中的结构
  • 典型数据集:
    • 有监督学习数据集:
      • 回归:sklearn.datasets.load_boston
      • 分类:load_iris
    • 无监督学习数据集:
      • 月牙型非凸集:make_moons
      • 符合正太分布的聚类数据:make_blobs

P2 回归问题解决方案

模型性能指标:

  • MSE均方误差: MSE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ( y i − y ^ i ) 2 . \text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2. MSE(y,y^)=nsamples1i=0nsamples1(yiy^i)2.
  • MAE平均绝对误差: MAE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ∣ y i − y ^ i ∣ \text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right| MAE(y,y^)=nsamples1i=0nsamples1yiy^i
  • R 2 R^2 R2决定系数: R 2 ( y , y ^ ) = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} R2(y,y^)=1i=1n(yiyˉ)2i=1n(yiy^i)2
  • 解释方差得分: e x p l a i n e d _ v a r i a n c e ( y , y ^ ) = 1 − V a r { y − y ^ } V a r { y } explained\_{}variance(y, \hat{y}) = 1 - \frac{Var\{ y - \hat{y}\}}{Var\{y\}} explained_variance(y,y^)=1Var{y}Var{yy^}

P3 回归模型具体概述

P4 理解线性回归模型的三个角度

这一节中给出了三个方法推导线性回归的公式,分别是最小二乘估计、几何解释和概率视角。

P5 线性回归的推广:多项式回归

对不能用简单线性关系概括的数据,可以尝试多项式回归。注意阶数不能取太大,一般不超过3或4,过大会引起在边界处的异常波动(龙格现象?)。

P6 线性回归的推广:广义可加模型

  • 广义可加模型就是将线性回归中的每一个变量换成一个非线性函数(有一点像概率论到随机过程的推广?)
  • 参考书目:《回归分析》谢宇;《女士品茶》(统计学入门)
  • python库:pygam
  • fit和fit_transform的区别?
  • gam.summary()需要有假设检验和统计学基础才能看懂

P7 决策树模型之回归树

回归树相当于对因变量x进行分块,在不同的区域中用不同的值来预测。打破了线性的假设。
回归树的工作过程还是直接看视频比较直观。
视频:7.决策树模型之回归树

P8 线性回归模型与回归树模型的对比

  • 特征变量和因变量之间可以很好地用线性关系来表达,使用线性回归模型
  • 特征变量和因变量之间存在高度的非线性,使用树模型
  • 树模型
    • 优点视频里列了很多,其实主要可以归结为:可解释强和容易处理异常值(不敏感)、缺失值(直接将其另外当作一个类别)
    • 缺点:容易过拟合
    • 一定要搞懂sklearn中树模型的参数意思

P9 支持向量回归(kkt条件、对偶理论等)

这一部分可以参考浙江大学的机器学习课程

P10

P11-P12

作业

(1)请详细阐述线性回归模型得最小二乘法表达

关于最小二乘法的原理和公式推导西瓜书和南瓜书给出了比较详细的过程,但是在Gilbert Strang教授的线性代数课程中给出了更加优雅的解法和理解。关于完整的理解、推导以及前置知识建议将Gilbert Strang教授的课系统学一遍,这里作为作业只给出要点。

  • 这里首先给出一个投影矩阵的公式:
    P = A ( A T A ) − 1 A T P=A(A^TA)^{-1}A^T P=A(ATA)1AT
    将投影矩阵与任意一个向量相乘 b b b就可以得到 b b b A A A的列空间(Column Space)中的投影:
    P b = A ( A T A ) − 1 A T b Pb=A(A^TA)^{-1}A^Tb Pb=A(ATA)1ATb

  • 接下来我们再说说解方程组的几何意义。
    当我们解方程组 A x = b Ax=b Ax=b时我们其实是以 A A A的列向量为基,寻找一组坐标 x x x来对 A A A的列向量进行线性组合,使之能够表示出 b b b
    A x = b 上 式 可 写 成 : [ a 1   a 2 ⋯ a n ] [ x 1 x 2 ⋮ x n ] = b , a i 为 A 的 第 i 个 列 向 量 , i = 1 ⋯ n 即 : a 1 x 1 + a 2 x 2 + ⋯ + a n x n = b \begin{array}{l} Ax=b \\ 上式可写成:\\ \left[ a_1 \ a_2 \cdots a_n \right] \left[ \begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_n \end{array} \right ]=b,a_i为A的第i个列向量,i=1\cdots n \\ 即:a_1 x_1 + a_2 x_2 + \cdots + a_n x_n = b \end{array} Ax=b[a1 a2an]x1x2xn=baiAii=1na1x1+a2x2++anxn=b
    显然,当 b b b处于 A A A的列空间中时,方程组无解;反之无解。

  • 然而,在最小二乘法的应用场景中,往往存在大量的数据点,而需要求解的未知数较少,即方程数量远远多于未知数个数,也就是 A A A的行数远远大于列数。从几何的角度我们可以这样理解, b b b存在与一个高维空间中, A A A的列空间只是这个高维空间中的一个子空间(这里我不确定“子空间”这一概念用得是否恰当,但应该不影响理解),所以存在很大可能 b b b并不在 A A A的列空间中,即 A x = b Ax=b Ax=b无解,如下图所示。请添加图片描述
    在这种情况下,我们不再想要求精确解,而是想办法求一个近似解,误差最小。从几何的角度来看就是在 A A A的列空间中寻找一个向量,使之到 b b b的距离最短。那么什么样的向量到 b b b的距离最短呢?显然就是 b b b A A A的列空间上的投影。使用前面的投影矩阵, b b b A A A的列空间中的投影为:
    P b = A ( A T A ) − 1 A T b Pb=A(A^TA)^{-1}A^Tb Pb=A(ATA)1ATb
    现在我们有了投影向量,下一步就是求解它在 A A A的列空间中的坐标表示,即:
    A x = P b = A ( A T A ) − 1 A T b = A ( ( A T A ) − 1 A T b ) x = ( A T A ) − 1 A T b Ax=Pb=A(A^TA)^{-1}A^Tb=A \left( (A^TA)^{-1}A^Tb \right) \\ x=(A^TA)^{-1}A^Tb Ax=Pb=A(ATA)1ATb=A((ATA)1ATb)x=(ATA)1ATb

(2)在线性回归模型中,极大似然估计与最小二乘估计有什么联系与区别吗

先留个坑,以后再填

(3)为什么多项式回归在实际问题中的表现经常不是很好

因为实际问题往往很复杂,目标函数具有很强的非线性。直观来说,就是目标函数会拐很多弯。而多项式函数的非线性由它的阶数决定,即一个n阶多项式函数的曲线能最多能拐n-1个弯(对多项式函数求一次导,导函数次数最高为n-1次,也就是说最多有n-1个零点)。然而,多项式函数阶数太高在拟合时会在边界处产生震荡(龙格现象?),所以这就限制了它在应用时只能用较低阶数来拟合复杂问题,效果自然不会太好。

(4)决策树模型与线性模型之间的联系与差别

见前面的笔记

(5)什么是KKT条件

先留个坑,以后再填

(6)为什么要引入原问题的对偶问题

在原问题难以求解或优化的时候往往会引入对偶问题,因为当原问题不好求解时其对偶问题可能容易求解,而二者的最优解是相同的,这就简化了求解难度。

(7)使用CH1机器学习数学基础所学的内容,找到一个具体的数据集,使用线性回归模型拟合数据,要求不能使用sklearn,只能使用python与numpy

参考:

  1. sklearn官方文档:https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py
  2. 往期优秀作业:https://blog.csdn.net/Codewith_jing/article/details/118728313

注意:要在X矩阵组后见一列1,否则学出来的模型没有常熟偏置项b

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score

# Load the diabetes dataset
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
print( diabetes_X.shape )
print( diabetes_y.shape )

# Use only one feature
diabetes_X = diabetes_X[:, np.newaxis, 2]

print( diabetes_X.shape )

xMat = np.mat(diabetes_X)
yMat = np.mat(diabetes_y).T
x, y = np.array( xMat ), np.array( yMat )
xMat = np.column_stack( (xMat, np.ones(xMat.shape[0])))

print(xMat.shape, yMat.shape)
print(x.shape)
print(y.shape)
def standRegres(xMat,yMat):
    xTx = xMat.T*xMat
    ws = xTx.I * (xMat.T*yMat)       #求 w=(x.T*x).I*x.T*y
    return ws

ws = standRegres(xMat,yMat)
print(ws)
plt.figure()
plt.scatter(x,y,c = 'k')
print(xMat.shape, ws.shape)
plt.plot(x,xMat*ws,'r')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值