线性回归【输出连续值或离散类别】
最小化平方损失

【损失函数】平方损失
ℓin​(w)=1N​∑n=1N​(wTxn​−yn​)2ℓ_{in}​(w)=\frac{1}{N}​∑_{n=1}^N​(w^Tx_n​−y_n​)^2ℓin​​(w)=N1​​∑n=1N​​(wTxn​​−yn​​)2,矩阵形式ℓin​(w)=1N​∥Xw−Y∥2ℓ_{in}​(w)=\frac{1}{N}​∥Xw−Y∥^2ℓin​​(w)=N1​​∥Xw−Y∥2
模型表达:h(x)=wTxh(x)=w^Txh(x)=wTx

1.线性回归算法(最小二乘法)

1)核心目标:最小化训练误差ℓin​(w)ℓ_{in}​(w)ℓin​​(w),求解最优权重w∗w^∗w∗。
2)步骤

  • 对ℓin​(w)ℓ_{in​}(w)ℓin​​(w)求梯度并令其为 0,∇ℓin​(w)=2N​XT(Xw−Y)=0∇ℓ_{in}​(w)=\frac{2}{N}​X^T(Xw−Y)=0∇ℓin​​(w)=N2​​XT(Xw−Y)=0(矩阵形式)或者∇ℓin​(w)=2N​∑n=1N​(wTxn​−yn​)xn​∇ℓ_{in}​(w)=\frac{2}{N}​∑_{n=1}^{N}​(w^Tx_n​−y_n​)x_n​∇ℓin​​(w)=N2​​∑n=1N​​(wTxn​​−yn​​)xn​​
  • 最优权重w∗=(XTX)−1XTY,其中w^*=(X^TX)^{−1}X^TY,其中w∗=(XTX)−1XTY,其中X†=(XTX)−1XTX^†=(X^TX)^{−1}X^TX†=(XTX)−1XT为X的广义逆(仅当XTX可逆时成立)

3)回归→分类:将回归输出w∗Txw^{∗T}xw∗Tx代入符号函数,即sign(w∗Tx)sign(w^{∗T}x)sign(w∗Tx)

2.梯度下降法(迭代优化)

适用:XTXX^TXXTX不可逆或样本维度高

【权重更新】:wt+1​=wt​−η∇ℓin​(wt​)w_{t+1}​=w_t​−η∇ℓ_{in}​(w_t​)wt+1​​=wt​​−η∇ℓin​​(wt​​) ,其中η为学习率(控制步长)
【关键变种算法】

算法核心改进权重更新公式(单参数wi​)
随机梯度下降(SGD)每次用 1 个样本计算梯度,速度快但波动大wi,t+1​=wi,t​−η(wtT​xn​−yn​)xn,iw_{i,t+1}​=w_{i,t}​−η(w_tT​x_n​−y_n​)x_{n,i}wi,t+1​​=wi,t​​−η(wt​T​xn​​−yn​​)xn,i​(xn,i(x_{n,i}(xn,i​​为第n样本第i特征)
Adagrad自适应学习率,梯度大的参数步长小,梯度小的参数步长大wi,t+1​=wi,t​−∑k=0t​(∂wi,k/​∂ℓin​​)2+ε​η​⋅∂wi,t/​∂ℓinw_{i,t+1​}=w_{i,t}​−∑_{k=0}^t​(∂w_{i,k}/​∂ℓ_{in​}​)^2+ε​η​⋅∂w_{i,t}/​∂ℓ_{in}wi,t+1​​=wi,t​​−∑k=0t​​(∂wi,k​/​∂ℓin​​​)2+ε​η​⋅∂wi,t​/​∂ℓin​​​
RMSProp改进 Adagrad,用指数移动平均降低历史梯度影响,适合非平稳目标wi,t+1​=wi,t​−ασi,t−1/2​+(1−α)(∂wi,t​/∂ℓin​​)2+ε​η​⋅∂wi,t/​∂ℓinw_{i,t+1​}=w_{i,t}​−ασ_{i,t}^{−1/2}​+(1−α)(∂w_{i,t}​/∂ℓ_{in}​​)^2+ε​η​⋅∂w_{i,t}/​∂ℓ_{in}wi,t+1​​=wi,t​​−ασi,t−1/2​​+(1−α)(∂wi,t​​/∂ℓin​​​)2+ε​η​⋅∂wi,t​/​∂ℓin​​​(α=0.9)
动量法引入动量m,模拟物理惯性,加速收敛并抑制波动mi,t+1​=λmi,t​−η∂wi,t/​∂ℓin​​m_{i,t+1​}=λm_{i,t}​−η∂w_{i,t}/​∂ℓ_{in​}​mi,t+1​​=λmi,t​​−η∂wi,t​/​∂ℓin​​​,wi,t+1​=wi,t​+mi,t+1​w_{i,t+1}​=w_{i,t}​+m_{i,t+1​}wi,t+1​​=wi,t​​+mi,t+1​​(λ=0.9)
Adam结合 RMSProp(自适应学习率)和动量法(惯性),加偏差修正mt​=β1​mt−1​+(1−β1​)∇ℓin​m_t​=β_1​m_{t−1​}+(1−β_1​)∇ℓ_{in}​mt​​=β1​​mt−1​​+(1−β1​​)∇ℓin​​,vt​=β2​vt−1​+(1−β2​)(∇ℓin​)2v_t​=β_2​v_{t−1}​+(1−β_2​)(∇ℓ_{in}​)^2vt​​=β2​​vt−1​​+(1−β2​​)(∇ℓin​​)2,β1​=0.9β_1​=0.9β1​​=0.9,β2​=0.999β_2​=0.999β2​​=0.999,α=0.001α=0.001α=0.001,m^t​=mt/(1−β1t​)\hat m_t​=m_t/(1−β_1t​)m^t​​=mt​/(1−β1​t​),v^t​=vt​/(1−β2t​)\hat v_t​=v_t​/(1−β_2t​)v^t​​=vt​​/(1−β2​t​)

学习率η:过大会导致震荡不收敛,过小会导致收敛过慢

  • SGD 与 BGD 对比:
    • 批量梯度下降(BGD):用全部样本算梯度,更新稳定但速度慢
    • 随机梯度下降(SGD):批量大小 = 1,速度快但波动大,可看作 “软性” 感知器

附录:
例:求最小平方误差和最佳解的算法(仅展示关键函数)
1.广义逆法

def least_squares (X, y):
    # 添加偏置项
    X_b = np.hstack([np.ones((X.shape[0], 1)), X]) 
    X_T = X_b.T  # 计算广义逆
    w = np.linalg.pinv(X_T @ X_b) @ X_T @ y  # 广义逆求解
    return w

2.梯度下降法

def gradient_descent (X, y, learning_rate=0.01, epochs=10000, tol=1e-6):
n_samples, n_features = X.shape
    X_b = np.hstack([np.ones((n_samples, 1)), X]) 
    y = y.reshape(-1, 1)  # 转为列向量
    w = np.random.randn(n_features + 1, 1) 
    losses = []
    for epoch in range(epochs): 
        y_pred = X_b @ w # 计算预测值和损失
        loss = np.mean((y_pred - y)**2) / 
        losses.append(loss)
        
        gradient = (X_b.T @ (y_pred- y)) / n_samples 
        w_new = w - learning_rate * gradient
        
        if np.linalg.norm(w_new - w) < tol: 
            w = w_new# 检查是否收敛
            break
        w = w_new
    
    return w.flatten(), losses

更多推荐