【机器学习】回归模型(线性回归+逻辑回归)原理详解

embedded/2024/11/23 23:35:55/

线性回归 Linear Regression

1 概述

线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合(加减乘除)起来,得到的结果和目标接近。

线性回归分为一元线性回归和多元线性回归

2 一元线性回归

2.1 构造回归方程

有n组数据,自变量(特征值) x ( x 1 , x 2 , . . . , x n ) x(x_1,x_2,...,x_n) x(x1,x2,...,xn) 与因变量(目标值) y ( y 1 , y 2 , . . . , y n ) y(y_1,y_2,...,y_n) y(y1,y2,...,yn) ,我们需要找到一个线性关系,使他们之间尽可能满足: f ( x ) = a x + b f(x) =ax+b f(x)=ax+b ,这个就是构建的一元线性方程。

在这里插入图片描述

线性回归的目标就是让 f ( X ) f(X) f(X) y y y 之间的差距最小,也就是权重 a a a和偏置 b b b取什么值的时候 f ( X ) f(X) f(X) y y y最接近。

2.2 构造损失函数

损失函数是来度量模型预测值与真实值不一样的程度的,或者说度量预测错误的程度,损失函数值越小,模型就越好。

在回归问题中,误差平方和是回归任务中最常用的性能度量。这里就可以令损失函数 L ( a , b ) L(a,b) L(a,b)等于误差平方和(均方误差)。

则损失函数为:
L ( a , b ) = ∑ i = 1 n ( f ( x i ) − y i ) 2 L(a, b) = \sum \limits_{i = 1}^{n}(f(x_i) - y_i)^2 L(a,b)=i=1n(f(xi)yi)2

2.3 确定参数

我们需要通过最小的损失函数得到最佳的参数 a a a b b b 。一般使用最小二乘法
a = ∑ i = 1 n x i y i − n x ‾ y ‾ ∑ i = 1 n x i 2 − n x ‾ 2 b = y ‾ − a x ‾ a = \frac{\sum \limits_{i=1}^{n}x_iy_i - n \overline x \overline y}{\sum \limits_{i=1}^{n}x_i^2 - n \overline x ^ 2} \\ b = \overline y - a \overline x a=i=1nxi2nx2i=1nxiyinxyb=yax

3 多元线性回归

多元线性回归类似一元

回归方程: y = a 1 x 1 + a 2 x 2 + a 3 x 3 + . . . + a n x n + b y = a_1 x_1 + a_2 x_2 + a_3 x_3 + ... + a_n x_n + b y=a1x1+a2x2+a3x3+...+anxn+b

对所有的数据统一用矩阵形式表示:
y ( i ) = θ T x ( i ) + ε ( i ) ( 1 ) y^{(i)} = \theta ^ T x ^ {(i)} + \varepsilon^{(i)} \ (1) y(i)=θTx(i)+ε(i) (1)

y ( i ) y^{(i)} y(i)表示第i个样本的真实值

ε \varepsilon ε 误差代表真实值和预测值之间的差异

误差 ε ( i ) \varepsilon ^{(i)} ε(i) 是独立并具有相同的分布,服从均值为 0 方差为 θ 2 \theta ^ 2 θ2 的高斯分布

损失函数
L ( a 1 , a 2 , . . . , a n , b ) = ∑ i = 1 n ( f ( x i ) − y i ) 2 L(a_1, a_2, ..., a_n, b) = \sum_{i = 1}^{n}(f(x_i) - y_i)^2 L(a1,a2,...,an,b)=i=1n(f(xi)yi)2

高斯分布的概率函数:
p ( x ) = 1 2 π σ exp ⁡ ( − x 2 2 σ 2 ) ( 2 ) p(x) = \frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{x^2}{2 \sigma ^ 2})} \ (2) p(x)=2π σ1exp(2σ2x2) (2)
(1)带入(2)得到预测值成为真实值的概率函数:
p ( y ( i ) ∣ x ( i ) ; θ ) = 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) p(y ^ {(i)} | x ^ {(i)}; \theta) = \frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} p(y(i)x(i);θ)=2π σ1exp(2σ2(y(i)θTx(i))2)
似然函数:(什么样的参数计算出来的误差最小,即与实际值最接近)
L ( θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) L(\theta) = \prod \limits_{i = 1}^{m} p(y ^ {(i)} | x ^ {(i)}; \theta) = \prod \limits_{i=1}^{m}\frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} L(θ)=i=1mp(y(i)x(i);θ)=i=1m2π σ1exp(2σ2(y(i)θTx(i))2)
对数似然法:(将乘法转化为加法),之后需要用极大似然估计方法求解
l n L ( θ ) = l n ∏ i = 1 m 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) ln L(\theta) = ln \prod \limits_{i=1}^{m}\frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} lnL(θ)=lni=1m2π σ1exp(2σ2(y(i)θTx(i))2)
展开化简:
l n L ( θ ) = ∑ i = 1 m l n 1 2 π σ exp ⁡ ( − ( y ( i ) − θ T x ( i ) ) 2 2 σ 2 ) = m l n 1 2 π σ − 1 σ 2 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 ln L(\theta) = \sum \limits_{i = 1}^{m}ln \frac{1}{\sqrt {2 \pi} \sigma} \exp{(-\frac{(y^{(i)} - \theta ^ T x ^ {(i)})^2}{2 \sigma ^ 2})} \\ = mln \frac{1}{\sqrt {2 \pi} \sigma} - \frac{1}{\sigma^2} \frac{1}{2} \sum \limits _{i = 1}^{m} (y^{(i)} - \theta ^ T x ^ {(i)})^2 lnL(θ)=i=1mln2π σ1exp(2σ2(y(i)θTx(i))2)=mln2π σ1σ2121i=1m(y(i)θTx(i))2

目标:让似然函数越大越好(极大似然估计),即让 J ( θ ) J(\theta) J(θ)越小越好(可以使用最小二乘法求解)
J ( θ ) = 1 2 ∑ i = 1 m ( y ( i ) − θ T x ( i ) ) 2 J(\theta) = \frac{1}{2} \sum \limits _{i = 1}^{m} (y^{(i)} - \theta ^ T x ^ {(i)})^2 J(θ)=21i=1m(y(i)θTx(i))2

其实由损失函数也可以得到同样的式子:

对于 y = θ x + b y = \theta x + b y=θx+b θ \theta θ b b b 也吸入进入得到 θ ^ = ( θ , b ) \hat \theta = (\theta, b) θ^=(θ,b) X X X代表所有的样本数据,最后一个元素置1,最后要和 θ ^ \hat\theta θ^ 相乘,最后求偏导也是一样的结果。
L = ∑ i = 1 n ( y i − f ( x i ) ) 2 = ( y − X θ ^ ) T ( y − X θ ^ ) X = ( x 11 x 12 ⋯ x 1 d 1 x 11 x 12 ⋯ x 1 d 1 ⋮ ⋮ ⋱ ⋮ ⋮ x m 1 x m 2 ⋯ x m d 1 ) = ( x 1 T 1 x 2 T 1 ⋮ ⋮ x m T 1 ) L = \sum \limits_{ i = 1 } ^ n ( y_i - f(x_i)) ^ 2 = (y - X \hat \theta)^T (y - X \hat\theta) \\ X = \begin{pmatrix} x_{11} & x_{12} & \cdots & x_{1d} & 1 \\ x_{11} & x_{12} & \cdots & x_{1d} & 1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{md} & 1 \end{pmatrix} = \begin{pmatrix} x_1^T & 1 \\ x_2^T & 1 \\ \vdots & \vdots \\ x_m^T & 1 \end{pmatrix} L=i=1n(yif(xi))2=(yXθ^)T(yXθ^)X= x11x11xm1x12x12xm2x1dx1dxmd111 = x1Tx2TxmT111

矩阵求导参考:

  • https://zhuanlan.zhihu.com/p/263777564 (先导篇)
  • https://zhuanlan.zhihu.com/p/273729929 (公式篇)

在这里插入图片描述

4 梯度下降

梯度下降法(gradient descent)是一种常用的一阶(first-order)优化方法。主要解决求最小值问题,其基本思想在于不断地逼近最优点,每一步的优化方向就是梯度的方向。

4.1 梯度下降方法

  • 批量梯度下降

容易得到最优解,但是由于每次考虑所有样本,速度很慢。

  • 随机梯度下降

每次找一个样本,迭代速度很快,但不一定每次都朝着收敛的方向。

  • 小批量梯度下降

每次更新一小部分数据来算,因为在整个训练集上算梯度资源消耗太大,我们可以随机采取 b b b个样本 i 1 , i 2 , ⋯ , i b i_1, i_2, \cdots, i_b i1,i2,,ib来近似损失, e e e是损失函数, b b b是批量大小。
1 b ∑ i ∈ I b e ( x i , y i , w ) \frac{1}{b} \sum \limits_{i \in I_b} \mathcal{e}(\mathbf{x_i}, y_i, \mathbf{w}) b1iIbe(xi,yi,w)

4.2 其他参数

  • 学习率:更新的步长

在这里插入图片描述

  • 批处理数量

一般batch_size选择32,64,128等,有时候会考虑内存和效率。

逻辑回归

逻辑回归是一个经典的二分类算法。

1 sigmoid函数

g ( z ) = 1 1 + e − z , z ∈ R g(z) = \frac{1}{1 + e ^ {-z}}, z \in R g(z)=1+ez1,zR

在这里插入图片描述

将任意的输入映射到了 [ 0 , 1 ] [0, 1] [0,1]区间中,在线性回归中可以得到一个预测值,再将该值映射到sigmoid函数中,这样就可以完成由值到概率的转换,这就是分类任务。

2 逻辑回归求解

预测函数:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x 其中 θ 0 + θ 1 x 1 + . . . + θ n x n = ∑ i = 1 n θ i x i = θ T x h_{\theta}(x) = g(\theta ^ T x) = \frac{1}{1 + e ^ {-\theta^T x}} \\ \text{其中} \theta_0 + \theta_1 x_1 + ... + \theta_n x_n = \sum \limits_{i = 1}^n \theta_i x_i = \theta ^ T x hθ(x)=g(θTx)=1+eθTx1其中θ0+θ1x1+...+θnxn=i=1nθixi=θTx
分类任务:
{ P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) ⇒ P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y \begin{cases} P(y = 1|x; \theta) = h_\theta(x) \\ P(y = 0|x; \theta) = 1 - h_\theta(x) \end{cases} \Rightarrow P(y | x; \theta) = (h_\theta(x)) ^ y (1 - h_\theta(x)) ^ {1 - y} {P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1hθ(x)P(yx;θ)=(hθ(x))y(1hθ(x))1y
对于二分类任务(0, 1),整合后,y取0只保留 ( 1 − h θ ( x ) ) 1 − y (1 - h_\theta(x)) ^ {1 - y} (1hθ(x))1yy取1只保留 ( h θ ( x ) ) y (h_\theta(x)) ^ y (hθ(x))y

似然函数:
L ( θ ) = ∏ i = 1 m P ( y i ∣ x i ; θ ) = ∏ i = 1 m ( h θ ( x i ) ) i y ( 1 − h θ ( x i ) ) 1 − y i L(\theta) = \prod \limits_{i = 1}^m P(y_i | x_i; \theta) = \prod \limits_{i = 1}^m (h_\theta(x_i)) ^ y_i (1 - h_\theta(x_i)) ^ {1 - y_i} L(θ)=i=1mP(yixi;θ)=i=1m(hθ(xi))iy(1hθ(xi))1yi
对数似然法,即求 l ( θ ) l(\theta) l(θ) 的最大值:
l ( θ ) = l o g L ( θ ) = ∑ i = 1 m ( y i l o g h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ) l(\theta) = logL(\theta) = \sum \limits_{i = 1} ^m (y_i log h_\theta(x_i) + (1 - y_i) log (1 - h_\theta(x_i))) l(θ)=logL(θ)=i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi)))
将上述函数转化为求最小值,同时系数乘上一个常数,即求 J ( θ ) = − 1 m l ( θ ) J(\theta) = -\frac{1}{m}l(\theta) J(θ)=m1l(θ) 的最小值,转化为梯度下降问题:
J ( θ ) = − 1 m l ( θ ) J(\theta) = -\frac{1}{m}l(\theta) J(θ)=m1l(θ)
在这里插入图片描述

上述过程即求出了偏导的方向,有了更新方向就可以进行参数更新: α \alpha α代表学习率
θ j = θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \theta_j = \theta_j - \alpha \frac{1}{m} \sum \limits_{i = 1} ^ m (h_\theta(x_i) - y_i)x_i^j θj=θjαm1i=1m(hθ(xi)yi)xij

减法是代表用的梯度下降,整体除以m是考虑了所有的m个样本。

多分类问题:

在这里插入图片描述

Softmax回归是逻辑回归的一般化,相关对比参考 https://zhuanlan.zhihu.com/p/98061179

模型评估标准

1 回归模型评估

1.1 平均绝对误差(Mean Absolute Error,MAE)

平均绝对误差就是指预测值与真实值之间平均相差多大
M A E = 1 m ∑ i = 1 m ∣ f i − y i ∣ MAE = \frac{1}{m}\sum \limits _{i = 1}^m \lvert f_i - y_i \rvert MAE=m1i=1mfiyi

1.2 均方误差(Mean Squared Error,MSE)

观测值与真值偏差的平方和与观测次数的比值
M S E = 1 m ∑ i = 1 m ( f i − y i ) 2 MSE = \frac{1}{m} \sum \limits_{i = 1}^m(f_i - y_i)^2 MSE=m1i=1m(fiyi)2
这也是线性回归中最常用的损失函数,线性回归过程中尽量让该损失函数最小。那么模型之间的对比也可以用它来比较。

MSE可以评价数据的变化程度,MSE的值越小,说明预测模型描述实验数据具有更好的精确度。

1.3 R-square(决定系数)

R 2 = 1 − ∑ ( Y a c t u a l − Y p r e d i c t ) 2 ∑ ( Y a c t u a l − Y m e a n ) 2 R^2 = 1 - \frac{\sum(Y_{actual} - Y_{predict})^2}{\sum(Y_{actual} - Y_{mean})^2} R2=1(YactualYmean)2(YactualYpredict)2

1.4 Adjusted R-Square(校正决定系数)

R a d j u s t e d 2 = 1 − ( 1 − R 2 ) ( n − 1 ) n − p − 1 R^2_{adjusted} = 1 - \frac{(1 - R^2)(n - 1)}{n - p - 1} Radjusted2=1np1(1R2)(n1)

n为样本数量,p为特征数量

消除了样本数量和特征数量的影响

1.5 交叉验证

我们有一个总的数据集,将总数据集切分,例如,将数据分为训练集(80%)和测试集(20%),训练集用来训练model,测试集用来最终的测试。

训练集还再平均进行切分为3份(标号为1、2、3)。

测试集和训练集的比例自己定。

交叉验证就是在训练集中,采用2份数据来训练,用另一份数据来验证训练出的模型的参数,进行3次。

即:1 + 2来训练,3验证;2 + 3来训练,1来验证;1 + 3来训练,2来验证。

为了让模型的评估效果比较好,最后将3次的参数取平均值。

无论分类还是回归模型,都可以利用交叉验证,进行模型评估

sklearn模块中有交叉验证函数,例如sklearn.cross_validation 中的 train_testsplit 函数

交叉验证主要是为了防止某一部分数据比较简单,导致模型的效果比较高。

2 分类模型评估

2.1 准确率、精确率、召回率、f1_score

  • 准确率(Accuracy)的定义是:对于给定的测试集,分类模型正确分类的样本数与总样本数之比;

  • 精确率(Precision)的定义是:对于给定测试集的某一个类别,分类模型预测正确的比例,或者说:分类模型预测的正样本中有多少是真正的正样本;

  • 召回率(Recall)的定义为:对于给定测试集的某一个类别,样本中的正类有多少被分类模型预测正确;

    假设有1000个人,其中990个人正常,有10个人患有癌症,模型旨在预测哪些人是患有癌症的。

    如果模型预测1000个人中都是正常的,没有癌症患者,那么可以说模型的精度是 990 1000 = 0.99 \frac{990}{1000}=0.99 1000990=0.99。虽然精度很高,但是都是正样本,没有负样本,模型是无用的,因为一个患者都没有找到。因此无法用精度来评估模型,而是使用recall召回率来评估。

  • F1_score,在理想情况下,我们希望模型的精确率越高越好,同时召回率也越高越高,但是,现实情况往往事与愿违,在现实情况下,精确率和召回率像是坐在跷跷板上一样,往往出现一个值升高,另一个值降低,那么,有没有一个指标来综合考虑精确率和召回率了,这个指标就是F值。F值的计算公式为:
    F = ( a 2 + 1 ) × P × R a 2 × ( P + R ) F = \frac{(a ^ 2 + 1) \times P \times R}{a ^ 2 \times (P + R)} F=a2×(P+R)(a2+1)×P×R

    P: Precision, R: Recall, a:权重因子

    当a=1时,F值便是F1值,代表精确率和召回率的权重是一样的,是最常用的一种评价指标。

    F1的计算公式为: F 1 = 2 × P × R P + R F1 = \frac{2 \times P \times R}{P + R} F1=P+R2×P×R

2.2 混淆矩阵

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。

具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。

下面是一个混淆矩阵,Actual代表真实值,Predicted代表预测值,预测的是标签号(因为是分类任务,主要对标签进行分类)。

下面是我对TP、TN、FP、FN四个值的理解(助记)

TP:预测正确,预测成1

TN:预测正确,预测成0

FP:预测错误,预测成1

FN:预测错误,预测成0

在这里插入图片描述

可以通过上面四个值计算相应的评估值,见下图。

在这里插入图片描述

  • 准确率:预测正确的比例
  • 精确率:在预测之后,在预测结果的某一结果上,正确的比例
  • 召回率:在预测之前,真实值为某一结果上,正确的比例

回归模型相关技巧

1 下采样和上采样

在分类问题的数据中,很容易出现正反数据集数量存在极大的差距,这类数据直接用于训练不利于模型的构架,所以我们需要对数据进行些许处理。

很容易想到,合理的数据集应该是正反数据集数量应接近,那就存在两种策略:

下采样策略:把数量多的减少到与数量少的相近

上(过)采样策略:把数量少的增加到与数量多的相近

  • 下采样:

在这里插入图片描述

  • 上采样:SMOTE算法

步骤:

(1)对于少数类中每一个样本x,以**欧氏距离(两点之间距离)**为标准计算它到少数类样本集中所有样本的距离,得到其k近邻(所有距离排序后前k小的距离)

(2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn

(3)对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本。
x n e w = x + r a n d ( 0 , 1 ) × ( x ~ − x ) x_{new} = x + rand(0, 1) \times (\widetilde x - x) xnew=x+rand(0,1)×(x x)

( x ~ − x ) (\widetilde x - x) (x x) 相当于距离 d i d_i di (欧几里得距离),那么每个 d i d_i di 都可以生成一个新的数据。

在这里插入图片描述

2 正则化惩罚

加上了正则化项能在一定程度上避免过拟合


http://www.ppmy.cn/embedded/139969.html

相关文章

Superset 二次开发之Superset技术栈分析

Apache Superset 是一个功能强大的开源数据可视化平台,支持交互式仪表板和数据探索。它的灵活性来源于其现代化的技术栈架构。本文将详细分析 Superset 的技术栈,从前端到后端及数据层,帮助开发者理解其核心组件和使用场景。 1. 整体架构概览 Superset 的架构分为三个主要…

GPU服务器厂家:为什么要选择 GPU 服务器?

文章来源于百家号:GPU服务器厂家 嘿,各位小伙伴们!今天咱来聊聊为啥要选择 GPU 服务器,特别是定制化的那种哦。 你们知道吗?现在定制化 GPU 服务器那可是超火的,简直就是科研项目的超强 “外挂”&#x…

Java项目实战II基于微信小程序的新闻资讯平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在信息爆炸…

CSS(8):盒子阴影与文字阴影

一:盒子阴影text-shadow属性 1.box-shadow:h-shadow v-shadow blur spread color inset; 默认的是外部阴影outset,不能写在代码上 2.鼠标经过盒子后的阴影 rgba透明度 3.文字阴影 text-shadow:水平偏移 垂直偏移 模糊度 阴影颜色; 注意点…

pytorch官方FasterRCNN代码详解

本博文转自捋一捋pytorch官方FasterRCNN代码 - 知乎 (zhihu.com),增加了其中代码的更详细的解读,以帮助自己理解该代码。 代码理解的参考Faster-RCNN全面解读(手把手带你分析代码实现)---前向传播部分_手把手faster rcnn-CSDN博客 1. 代码结构 作为 to…

Linux云服务器docker使用教程

诸神缄默不语-个人CSDN博文目录 我用的是腾讯云服务器,操作系统是OpenCloudOS 9,基本上可以当特色版CentOS用。 docker安装跟各个系统关系太大了,我就不写了。OpenCloudOS 9安装docker见这篇博文:腾讯云服务器使用教程 文章目录 …

windows实现VNC连接ubuntu22.04服务器

最近弄了一个700块钱的mini主机,刷了ubuntu22.04系统,然后想要在笔记本上通过VNC连接,这样就有了一个linux的开发环境。最后实现的过程为: 安装vnc服务器 安装 VNC 服务器软件: sudo apt update sudo apt install t…

【大数据技术基础 | 实验十二】Hive实验:Hive分区

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验步骤(一)启动Hadoop集群(二)用命令进入Hive客户端(三)通过HQL语句进行实验 六、实验结果七、实验心得 一、实验目的 掌握Hive分区的用…