集成学习作业Task04


本文为Datawhale组队学习项目——集成学习的作业Task

相关视频
相关资料

作业

在这里插入图片描述

1分类与回归问题

输入变量与输出变量均为连续变量的预测问题是回归问题 , 例如给你一组数据要你预测明天的温度

输出变量为有限个离散变量的预测问题为分类问题,例如预测明天是否有雨,这只有两种状态:或者没有

如何用回归理解分类:如果我们把回归问题中的输出变量划分为不同的区间,就将回归问题转变为分类问题,例如按照年龄划分儿童、青少年、成年、老年。

2分类问题的损失函数

交叉熵的表达式如下:

C E L = 1 N ∑ i L i = − 1 N ∑ i ∑ c = 1 M y i c log ⁡ ( p i c ) CEL = \frac{1}{N}\sum_{i} L_i = - \frac{1}{N}\sum_{i} \sum_{c=1}^My_{ic}\log(p_{ic}) CEL=N1iLi=N1ic=1Myiclog(pic)
其中:

  • M M M:类别的数量
  • y i c y_{ic} yic:符号函数( 0 或 1),如果样本 i i i的真实类别等于 c c c 1 1 1,否则取 0 0 0
  • p i c p_{ic} pic :观测样本 i i i属于类别 c c c的预测概率

对比均方误差:
M S E = 1 n ∑ i n ( y i ^ − y i ) 2 MSE=\frac{1}{n}\sum_i^n(\hat{y_i}-y_i)^2 MSE=n1in(yi^yi)2

在分类问题中,训练的模型通常会用到 s i g m o i d sigmoid sigmoid s o f t m a x softmax softmax这样的激活函数,设采用的模型为 z ( x ) z(x) z(x),激活函数为 σ ( z ) \sigma(z) σ(z),则预测值 y ^ \hat{y} y^通常为如下表达式: y ^ = σ ( z ) \hat{y}=\sigma(z) y^=σ(z)

对交叉熵和均方误差分别进行求导:
交 叉 熵 : ∂ C ∂ w = x ⋅ ( σ ( z ) − y ) 交叉熵:\frac{\partial{C} }{\partial{w}}=x{\cdot}(\sigma(z)-y) wC=x(σ(z)y)
均 方 误 差 : ∂ M ∂ w = x ⋅ ( σ ( z ) − y ) ⋅ σ ( z ) ′ 均方误差:\frac{\partial{M} }{\partial{w}}=x{\cdot}(\sigma(z)-y)\cdot \sigma(z)^{'} wM=x(σ(z)y)σ(z)
使用梯度下降,对比所求导数可知,交叉熵比均方误差少了 σ ( z ) ′ \sigma(z)^{'} σ(z), σ ( z ) ′ \sigma(z)^{'} σ(z),也就是相比于交叉熵,均方误差还多了激活函数的梯度来影响收敛速度,而部分激活函数的梯度会在值较大是接近0,使得收敛速度下降,所以为了保证收敛速度,采用交叉熵。

3 线性判别分析与逻辑回归的异同点

相同点:都是生成模型,不是将数据确定的划分,线性判别分析与逻辑回归都基于如下的逻辑,将 P ( Y = y ∣ X = x ) P(Y=y|X=x) P(Y=yX=x)作为目标函数,计算使得 P ( Y = y ∣ X = x ) P(Y=y|X=x) P(Y=yX=x)最大的参数。

不同点:逻辑回归基于的是极大似然估计,而线性判别分析则是基于贝叶斯估计,所以计算 P ( Y = y ∣ X = x ) P(Y=y|X=x) P(Y=yX=x)的方式不同。

4 推导支持向量机

完整推导太长,可参考以下资料
参考文献:
https://blog.imfing.com/2020/06/svm-explained/
https://blog.imfing.com/2020/06/svm-explained/
https://zhuanlan.zhihu.com/p/31652569

5 三种算法的联系与区别

联系:三种算法都是基于计算 P ( Y = y ∣ X = x ) P(Y=y|X=x) P(Y=yX=x)的生成模型,且均采用的是贝叶斯估计。

区别:在统计学中,协方差用来描述维度间关系,三种模型对于协方差的假设不同

  • 线性判别分析假设每种分类类别下的特征遵循同一个协方差矩阵,每两个特征之间是存在协方差的,因此在线性判别分析中各种特征是不是独立的。
  • 朴素贝叶斯算法对线性判别分析作进一步的模型简化,它将线性判别分析中的协方差矩阵中的协方差全部变成0,只保留各自特征的方差,也就是朴素贝叶斯假设各个特征之间是不相关的。
  • 二次判别分析,对比线性判别模型,区别在于假设不同的类的协方差矩阵不同。

6 逻辑回归实现

逻辑回归一般用于二分类问题

逻辑回归方程:
y = s i g m o i d ( z ) = 1 1 + e − z y=sigmoid(z)=\frac{1}{1+e^{-z}} y=sigmoid(z)=1+ez1
z = w T ⋅ x + b z=w^T\cdot x+b z=wTx+b

将上式转换一下形式:

l n y 1 − y = w T x + b ln \frac{y}{1−y} = w^{T}x + b ln1yy=wTx+b

假设
P ( Y = 1 ∣ x ) a m p ; = p ( x ) P ( Y = 0 ∣ x ) a m p ; = 1 − p ( x ) \begin{aligned} P(Y=1|x) &= p(x) \\ P(Y=0|x) &= 1- p(x) \end{aligned} P(Y=1x)P(Y=0x)amp;=p(x)amp;=1p(x)

逻辑回归的损失函数为:
J ( w ) = − 1 n ( ∑ i = 1 n ( y i l n ( p ( x i ) ) + ( 1 − y i ) l n ( 1 − p ( x i ) ) ) J(w) = -\frac{1}{n}(\sum_{i=1}^n(y_iln(p(x_i))+(1-y_i)ln(1-p(x_i))) J(w)=n1(i=1n(yiln(p(xi))+(1yi)ln(1p(xi)))
使用梯度下降法,则梯度下降公式为:
w i k + 1 = w i k − α ( p ( x i ) − y i ) x i w^{k+1}_i=w^k_i-\alpha (p(x_i)-y_i)x_i wik+1=wikα(p(xi)yi)xi
其中,k为迭代次数, α \alpha α为超参数

代码:

import matplotlib.pyplot as plt
import numpy as np


# 激活函数
def sigmoid(X):
    return 1 / (1 + np.exp(-X))


# 损失函数计算
def lossfunc(X, Y, W):
    n = len(Y)
    return (-1 / n) * np.sum(Y * np.log(sigmoid(np.matmul(X, W))) + (1 - Y) * np.log((1 - sigmoid(np.matmul(X, W)))))


# 梯度下降
def gradient_descent(X, Y, learningrate=0.001, trainingtimes=500):
    m = len(X)
    n = len(X[0])
    b = np.ones((1, m))
    W = np.ones((1, n + 1))[0]

    X_1 = np.concatenate((X, b.T), axis=1)

    # 根据指定训练次数训练
    loss_Trace = []

    for i in range(trainingtimes):

        g = (sigmoid(np.matmul(X_1, W)) - Y)

        W = W - (learningrate / m) * np.dot(g, X_1)

        # 收集损失,查看训练效果
        if 0 == i % 1000 or (100 > i and 0 == i % 2):
            loss_Trace.append(lossfunc(X_1, Y, W))
    return W, loss_Trace


if __name__ == '__main__':
    x = [[1, 0], [2, 1], [3, 2], [1, 4], [2, 6], [7, 9], [8, 9], [9, 2], [10, 9]]
    y = [0, 0, 0, 0, 1, 1, 1, 1, 1]
    train_X = np.asarray(x, dtype=np.float64)
    train_Y = np.asarray(y, dtype=np.float64)
    final_W, loss = gradient_descent(train_X, train_Y, 0.3, 100000)

    plt.plot([i for i in range(len(loss))], loss)

7 各种算法

参考最优化方法的内容:【上海交大】最优化方法 18讲视频教程

参考链接

https://baike.baidu.com/item/交叉熵

https://zhuanlan.zhihu.com/p/35709485

https://github.com/yunshuipiao/sw_machine_learning/blob/master/machine_learning_algorithm/logistic_regression/index_two.py

https://zhuanlan.zhihu.com/p/74874291

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值