集成学习(二)机器学习基础模型回顾 (作业一)

image.png
  • (1)请详述线性回归的最小二乘法表达
      使用二范数的平方和来衡量真实值与预测值的差距。即:

    找到使得最小的参数,即:

    求解最小化问题,令导数等于0:

    解得:

  • (2)在线性回归模型中,极大似然估计与最小二乘估计有什么联系与区别?
      线性回归得最小二乘估计等价于噪声的极大似然估计。
      线性回归的一大假设是:误差服从均值为0的正态分布,且多个观测数据之间互不影响,相互独立。正态分布(高斯分布)的概率密度公式如下面公式,根据正态分布的公式,可以得到的概率密度。
      假设服从正态分布,它的均值为,方差为,概率密度如下:

    其中:左侧表示是随机变量,分号强调和不是随机变量,而是这个概率密度函数的参数。条件概率函数中使用的有明确的意义,表示给定(Given x),发生的概率(Probability of )。
    既然误差项服从正态分布,那么:

      由于,并取均值\mu为0,可得到:

    上式表示给定,的概率分布。并不是随机变量,而是一个参数,所以用分号隔开。或者说和不是同一类变量,需要分开单独理解。则有完全不同的意义,表示和同时发生时,的概率分布。
      一组样本有m个观测数据,其中单个观测数据发生的概率为上一个公式,m个观测数据的乘积为:

    其中,和都是观测到的真实数据,是已知的,是需要去求解的模型参数。
      接下来按照最大似然估计的求解方法,可得到:



      由于我们只关心参数取何值时,似然函数最大,标准差并不会影响取何值似然函数最大,所以可忽略掉带有标准差的项。再在加一个负号,则原来似然函数最大化问题就变成了最小化问题,这时候问题又变成了最小化:

    这和最小二乘的损失函数几乎一样。
      直观上来说,最小二乘法是在寻找观测数据与回归超平面之间的误差距离最小的参数。最大似然估计是最大化观测数据发生的概率。当我们假设误差是正态分布的,所有误差项越接近均值0,概率越大。正态分布是在均值两侧对称的,误差项接近均值的过程等同于距离最小化的过程。

  • (3)为什么多项式回归在实际问题中的表现经常不是很好?
      多项式回归很容易过拟合训练数据集?
      阶数太高后,边缘处置信区间会过大

  • (4)决策树模型与线性模型之间的联系和区别?
      决策回归树模型的模型假设:
      线性回归的模型假设:
      1. 树模型
       ①树模型产生可视化的分类规则,可以通过图表表达简单直观,逐个特征进行处理,更加接近人的决策方式
       ②产生的模型可以抽取规则易于理解,即解释性比线性模型强。
       ③树模型拟合出来的函数其实是分区间的阶梯函数。
       ④在训练过程中,树模型需要计算特征属性的信息增益或信息增益率等度量,从而确定哪个属性对目标最有益,即有最强区分样本的能力。
       ⑤一般特征空间复杂,无法用线性表达时使用树模型来解决问题。
      

  2. 线性模型
   ①线性模型是对所有特征赋予权重后相加得到一个新的值。
   ②通常能够获得更高的预测精度,预测方差比树模型低。
   ③线性模型拟合出来的函数则可以是任意曲线。
   ④在训练过程中,线性模型使用简单公式通过一组数据点找到最佳拟合。
   ⑤一般当特征和标签可以通过线性方式得到较好拟合则使用线性模型解决问题。

  • (5)什么是KKT条件?
       KKT条件就是:假设为最优化问题(P)的局部最优解,且 在某个适当的条件下 ,有:
    \nabla f(x^*) + \sum\limits_{i=1}^{m}\lambda_i \nabla g(x^*) + \sum\limits_{j=1}^{l}\mu_j \nabla h_j(x^*) = 0(对偶条件)\\ \lambda_i \ge 0,\;i = 1,2,...,m(对偶条件)\\ g_i(x^*) \le 0(原问题条件)\\ h_j(x^*) = 0(原问题条件)\\ \lambda_i g(x^*) = 0(互补松弛定理)
  • (6)为什么要引入原问题的对偶问题?
      因为原问题与对偶问题就像是一个问题两个角度去看,如利润最大与成本最低等。有时侯原问题上难以解决,但是在对偶问题上就会变得很简单。再者,任何一个原问题在变成对偶问题后都会变成一个凸优化的问题
  • (7)使用CH1机器学习基础所学内容,找到一个具体的数据集,使用线性回归模型拟合模型,要求不能使用sklearn,只能使用python和numpy。
import numpy as np
import matplotlib.pyplot as plt

def predict(x, a, b):
    return a * x + b

def loss(y, y_):
    v = y - y_
    return np.sum(v * v) / len(y)    #  均方差损失函数
# 对a求偏导
def partial_a(x, y, y_):
    return 2 / len(y) * np.sum((y-y_)*x)
# 对b求偏导
def partial_b(x, y, y_):
    return 2 / len(y) * np.sum(y-y_)
# 学习率
learning_rate = 0.0001
# 初始化参数a, b
a, b = np.random.normal(size=2)
   
x = np.arange(30)
# 这些数据大致在 y = 6x + 1 附近
y_ = [7.1, 4.3, 6.5, 28.2, 11.8, 40.2, 24.8, 56.1, 
     36.9, 53.0, 52.2, 57.1, 62.5, 79.7, 95.8, 83.6, 
     103.0, 104.7, 108.2, 116.5, 115.1, 121.2, 129.8, 
     148.1, 142.1, 151.5, 165.8, 174.7, 154.5, 189.9]    
    
loss_list = []
plt.scatter(x, y_, color="green")

for i in range(50):
    y = predict(x, a, b)    
    lss = loss(y, y_)
    loss_list.append(lss)
    if i % 10 == 0:
        print("%03d weight a=%.2f, b=%.2f loss=%.2f" % (i, a, b, lss))
        plt.plot(x, predict(x, a, b), linestyle='--', label="epoch=%s" % i)
    # 采用梯度下降算法更新权重
    a = a - learning_rate * partial_a(x, y, y_)
    b = b - learning_rate * partial_b(x, y, y_)
print("final weight a=%.2f, b=%.2f loss=%.2f" % (a, b, lss))

plt.plot(x, predict(x, a, b), label="final")
plt.legend()
plt.figure()
plt.plot(loss_list, color='red', label="loss")
plt.legend()


  • refer:
    本系列教程均为Datawhale组队学习活动。资料链接:https://github.com/datawhalechina/ensemble-learning
    最大似然估计:从概率角度理解线性回归的优化目标 - 知乎 (zhihu.com)
    Karush-Kuhn-Tucker (KKT)条件 - 知乎 (zhihu.com)
    树模型与线性模型的区别 决策树分类和逻辑回归分类的区别 【总结】Ximerr的博客-CSDN博客树模型和线性模型的区别
    线性回归的numpy、tf2.0、keras实现 - 知乎 (zhihu.com)
    使用numpy写一个简单的线性回归_再见北京的博客-CSDN博客
    机器学习理论(六)多项式回归 - 知乎 (zhihu.com)

你可能感兴趣的:(集成学习(二)机器学习基础模型回顾 (作业一))