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

image.png
  • (1)请详述线性回归的最小二乘法表达
      使用二范数的平方和来衡量真实值y_i与预测值\omega^{T}x_i的差距。即:
    L(\omega)=\sum_{i=1}^N\parallel\omega^Tx_i-y_i\parallel^2_2=\sum_{i=1}^N(\omega^Tx_i-y_i)^2=(\omega^TX^T-Y^T)(\omega^TX^T-Y^T)^T=\omega^TX^TX\omega-2\omega^TX^TY+YY^T
    找到使得L(\omega)最小的参数\omega,即:
    \hat{\omega}=argminL(\omega)
    求解最小化问题,令导数等于0:
    \frac{\partial L(\omega)}{\partial\omega}=2X^TX\omega-2X^TY=0
    解得:\hat{\omega}=(X^TX)^{-1}X^TY

  • (2)在线性回归模型中,极大似然估计与最小二乘估计有什么联系与区别?
      线性回归得最小二乘估计等价于噪声\epsilon \sim N(0,\sigma^2 )的极大似然估计。
      线性回归的一大假设是:误差服从均值为0的正态分布,且多个观测数据之间互不影响,相互独立。正态分布(高斯分布)的概率密度公式如下面公式,根据正态分布的公式,可以得到\epsilon的概率密度。
      假设x服从正态分布,它的均值为\mu,方差为\sigma,概率密度如下:
    P(x;\mu,\sigma)=\frac{1}{\sqrt{2\pi\sigma^2}}exp(-\frac{(x-\mu)^2}{2\sigma^2})
    其中:左侧P(x;\mu,\sigma)表示x是随机变量,;分号强调\mu\sigma不是随机变量,而是这个概率密度函数的参数。条件概率函数中使用的\mid有明确的意义,P(y\mid x)表示给定x(Given x),y发生的概率(Probability of y)。
    既然误差项服从正态分布,那么:
    P(\epsilon_i)=\frac{1}{\sqrt{2\pi\sigma^2}}exp(-\frac{(\epsilon_i)^2}{2\sigma^2})
      由于\epsilon_i=y_i-\omega^Tx_i,并取均值\mu为0,可得到:
    P(y_i\mid x;\sigma)=\frac{1}{\sqrt{2\pi\sigma^2}}exp(-\frac{(y_i-\omega^Tx_i)^2}{2\sigma^2})
    上式表示给定x_iy_i的概率分布。\omega并不是随机变量,而是一个参数,所以用;分号隔开。或者说\omegax_i不是同一类变量,需要分开单独理解。P(y_i\mid x;\sigma)则有完全不同的意义,表示\omegax_i同时发生时,y_i的概率分布。
      一组样本有m个观测数据,其中单个观测数据发生的概率为上一个公式,m个观测数据的乘积为:
    L(\omega)=L(\omega;X,y)=\prod_{i=1}^N Pr(y_i\mid x_i;\omega)
    其中,x_iy_i都是观测到的真实数据,是已知的,\omega是需要去求解的模型参数。
      接下来按照最大似然估计的求解方法,可得到:
    l(\omega)=logL(\omega)
    \quad\quad=logL(\omega)
    \quad\quad=mlog\frac{1}{\sqrt{2\pi\sigma^2}}-\frac{1}{2\sigma^2}\sum_{i-1}^{m}(y_i-\omega^Tx_i)^2
      由于我们只关心参数\omega取何值时,似然函数最大,标准差\sigma并不会影响\omega取何值似然函数最大,所以可忽略掉带有标准差\sigma的项mlog\frac{1}{\sqrt{2\pi\sigma^2}}。再在-\frac{1}{2\sigma^2}\sum_{i-1}^{m}(y_i-\omega^Tx_i)^2加一个负号,则原来似然函数l(\omega)最大化问题就变成了最小化问题,这时候问题又变成了最小化:
    \sum_{i=1}^m(y_i-\omega^Tx_i)^2
    这和最小二乘的损失函数几乎一样。
      直观上来说,最小二乘法是在寻找观测数据与回归超平面之间的误差距离最小的参数。最大似然估计是最大化观测数据发生的概率。当我们假设误差是正态分布的,所有误差项越接近均值0,概率越大。正态分布是在均值两侧对称的,误差项接近均值的过程等同于距离最小化的过程。

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

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

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

  • (5)什么是KKT条件?
       KKT条件就是:假设x^*为最优化问题(P)的局部最优解,且x^* 在某个适当的条件下 ,有:
    \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()


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容