机器学习之线性回归(七)

机器学习之线性回归(七)

文章目录

  • 机器学习之线性回归(七)
  • 一、线性回归
  • 线性回归超全指南:从“一条直线”到“正则化调参”的完整旅程
    • 0. 先对齐语言:标称型 vs 连续型
    • 1. 问题形式化
    • 2. 损失函数全景
    • 3. 求解方法 1:最小二乘(Normal Equation)
      • 3.1 推导
      • 3.2 代码
    • 4. 求解方法 2:梯度下降家族
      • 4.1 统一更新公式
      • 4.2 自己写 SGD(单变量示例)
      • 4.3 sklearn 一键调用
    • 5. 特征工程三板斧
    • 6. 正则化:专治过拟合
      • 6.1 目标函数
      • 6.2 调参模板(GridSearchCV)
    • 7. 实战:完整 Pipeline
    • 8. 面试 8 连击
    • 9. 可视化:一条直线的前世今生
    • 10. 总结脑图(文字版)


一、线性回归

线性回归超全指南:从“一条直线”到“正则化调参”的完整旅程

面向:想彻底吃透线性回归、并能在面试/竞赛/生产中直接落地的同学
代码:可直接复制运行,覆盖最小二乘、批量/随机/小批量梯度下降、Ridge/Lasso、特征工程、调参模板


0. 先对齐语言:标称型 vs 连续型

类型举例能否做加减机器学习任务
标称型 Nominal颜色{红, 绿, 蓝}、性别{男, 女}分类
连续型 Continuous温度 23.7 ℃、房价 512.3 万回归

线性回归只处理连续型目标变量 y。


1. 问题形式化

给定数据集 D={(x(i),y(i))}i=1m\mathcal{D} = \{(\mathbf{x}^{(i)}, y^{(i)})\}_{i=1}^{m}D={(x(i),y(i))}i=1m,其中

  • x(i)∈Rn\mathbf{x}^{(i)} \in \mathbb{R}^nx(i)Rn(一行 nnn 个特征)
  • y(i)∈Ry^{(i)} \in \mathbb{R}y(i)R

我们希望学到一个函数
y^=f(x)=w⊤x+b\hat{y}=f(\mathbf{x})=\mathbf{w}^\top\mathbf{x}+b y^=f(x)=wx+b
使得预测误差最小。为了写矩阵方便,把 bbb 吸收进 w\mathbf{w}w
y^=Xw\hat{\mathbf{y}} = X\mathbf{w} y^=Xw
其中

  • X∈Rm×(n+1)X\in\mathbb{R}^{m\times (n+1)}XRm×(n+1):最后一列全 1,把偏置 bbb 当做 w0w_0w0
  • w∈Rn+1\mathbf{w}\in\mathbb{R}^{n+1}wRn+1:待求参数

2. 损失函数全景

名称公式特点场景
MSE (L2)1m∣y−Xw∣22\frac{1}{m}|\mathbf{y}-X\mathbf{w}|_2^2m1yXw22光滑、可导默认
MAE (L1)1m∣y−Xw∣1\frac{1}{m}|\mathbf{y}-X\mathbf{w}|_1m1yXw1对异常值鲁棒数据脏
Huber混合 L1/L2鲁棒+光滑竞赛
Quantile预测分位数金融风控

下文默认 MSE,因为闭式解 + 凸函数 + 可微。


3. 求解方法 1:最小二乘(Normal Equation)

3.1 推导

对 MSE 求导并令导数为 0:
∇wLoss=−2X⊤(y−Xw)=0⇒X⊤Xw=X⊤y\nabla_{\mathbf{w}}\text{Loss}= -2X^\top(\mathbf{y}-X\mathbf{w})=0 \Rightarrow X^\top X\mathbf{w}=X^\top\mathbf{y} wLoss=2X(yXw)=0XXw=Xy
X⊤XX^\top XXX 可逆,则
w=(X⊤X)−1X⊤y\boxed{\mathbf{w}=(X^\top X)^{-1}X^\top\mathbf{y}} w=(XX)1Xy
时间复杂度:O(mn2+n3)O(mn^2+n^3)O(mn2+n3),特征 n>104n>10^4n>104 基本跑不动。

3.2 代码

import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 1. 数据
X, y = fetch_california_housing(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 2. 手动最小二乘
X_b = np.c_[np.ones((X_train.shape[0], 1)), X_train]   # 加一列 1
w_exact = np.linalg.inv(X_b.T @ X_b) @ X_b.T @ y_train# 3. 预测
X_test_b = np.c_[np.ones((X_test.shape[0], 1)), X_test]
y_pred = X_test_b @ w_exact
print("MSE (Normal):", mean_squared_error(y_test, y_pred))

4. 求解方法 2:梯度下降家族

4.1 统一更新公式

wt+1=wt−η∇wLoss\mathbf{w}_{t+1} = \mathbf{w}_t - \eta \nabla_{\mathbf{w}}\text{Loss} wt+1=wtηwLoss
对 MSE:
∇wLoss=2mX⊤(Xw−y)\nabla_{\mathbf{w}}\text{Loss}= \frac{2}{m}X^\top(X\mathbf{w}-\mathbf{y}) wLoss=m2X(Xwy)

算法每次梯度计算量更新频率优点缺点
BGD全量 mmm1 epoch/次稳定
SGD1 条mmm epoch/次快、可在线噪声大
MBGDbbb 条(batch)⌈m/b⌉\lceil m/b\rceilm/b epoch/次折中需调 batch

梯度下降图解:
在这里插入图片描述

4.2 自己写 SGD(单变量示例)

def sgd_linreg(X, y, lr=0.01, epochs=100, batch_size=32):m, n = X.shapeX = np.c_[np.ones(m), X]               # 加偏置w = np.random.randn(n + 1)for epoch in range(epochs):idx = np.random.permutation(m)for i in range(0, m, batch_size):sl = idx[i:i+batch_size]grad = 2/len(sl) * X[sl].T @ (X[sl] @ w - y[sl])w -= lr * gradreturn w

4.3 sklearn 一键调用

from sklearn.linear_model import SGDRegressor
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s  = scaler.transform(X_test)sgd = SGDRegressor(loss='squared_error',penalty='l2',        # Ridgealpha=1e-4,          # 正则强度 λlearning_rate='adaptive',eta0=0.01,max_iter=1000,random_state=42)sgd.fit(X_train_s, y_train)
print("MSE (SGD):", mean_squared_error(y_test, sgd.predict(X_test_s)))

5. 特征工程三板斧

  1. 标准化:梯度下降必须!
    StandardScalerRobustScaler(对异常值稳)。
  2. 多项式特征:线性不可分时升维
    from sklearn.preprocessing import PolynomialFeatures
    poly = PolynomialFeatures(degree=2, include_bias=False)
    X_poly = poly.fit_transform(X)
    
  3. 离散特征编码:One-Hot 后当作数值即可。

6. 正则化:专治过拟合

6.1 目标函数

  • Ridge (L2)
    Loss=12m∥y−Xw∥22+λ∥w∥22\text{Loss}= \frac{1}{2m}\|\mathbf{y}-X\mathbf{w}\|_2^2 + \lambda\|\mathbf{w}\|_2^2 Loss=2m1yXw22+λw22
  • Lasso (L1)
    Loss=12m∥y−Xw∥22+λ∥w∥1\text{Loss}= \frac{1}{2m}\|\mathbf{y}-X\mathbf{w}\|_2^2 + \lambda\|\mathbf{w}\|_1 Loss=2m1yXw22+λw1
  • Elastic Net:L1 + L2 的加权组合。

6.2 调参模板(GridSearchCV)

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import RidgeCV, LassoCValphas = np.logspace(-3, 3, 20)
ridge = RidgeCV(alphas=alphas, cv=5)
ridge.fit(X_train_s, y_train)
print("Best α Ridge:", ridge.alpha_)

7. 实战:完整 Pipeline

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
from sklearn.linear_model import Ridgepipe = Pipeline([('scaler', StandardScaler()),('poly', PolynomialFeatures(degree=2, include_bias=False)),('reg', Ridge(alpha=1.0))
])pipe.fit(X_train, y_train)
print("Test MSE:", mean_squared_error(y_test, pipe.predict(X_test)))

8. 面试 8 连击

  1. 最小二乘一定可逆吗?
    不一定,需 X⊤XX^\top XXX 满秩;不可逆时用伪逆或加 λI\lambda IλI(Ridge)。
  2. MSE vs MAE 对异常值?
    MSE 平方放大异常值;MAE 线性增长。
  3. 梯度下降为什么会震荡?
    学习率过大 or 特征未标准化。
  4. L1 为什么能做特征选择?
    解空间为菱形,最优解易落在顶点 → 某些权重=0。
  5. Ridge 与 Lasso 何时选?
    高维+稀疏 → Lasso;特征相关性强 → Ridge。
  6. 多项式升维后还是线性回归吗?
    参数 仍线性,对 特征 非线性。
  7. SGD 如何选 batch_size?
    小数据 32~256;GPU 训练可 1024+。
  8. 如何监控收敛?
    loss vs epoch 曲线;早停(Early Stopping)。

9. 可视化:一条直线的前世今生

import matplotlib.pyplot as plt
plt.scatter(X_train[:,0], y_train, s=5)
plt.plot(X_test[:,0], ridge.predict(X_test), 'r')
plt.title("Ridge Regression on California Housing")
plt.show()

10. 总结脑图(文字版)

数据 → 清洗/标准化 → 特征工程(多项式/离散化)  ↓选模型├─ 最小二乘(闭式解) —— 小数据、可解释├─ 梯度下降家族 —— 大数据、在线学习│   ├─ BGD(全量)│   ├─ MBGD(batch)│   └─ SGD(单条)└─ 正则化├─ Ridge(L2)├─ Lasso(L1)└─ Elastic Net↓评估(MSE/R²/MAE) → 调参(α, degree, batch, lr) → 上线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89028.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的用户价值引导与核心用户沉淀策略研究

摘要:在数字化商业生态中,用户留存与核心用户培育是产品成功的关键。本文聚焦开源AI大模型、AI智能名片与S2B2C商城小程序源码的协同应用,探讨如何通过技术赋能实现用户价值引导与核心用户沉淀。研究结合工业品供应链、美妆品牌、健康食品行业…

课题申报书成功率提升85%!借助大模型AI精准选题、搭综述框架及提炼创新点(附实操AI提示词)

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾用大模型AI实操的学术人。可以添加七哥(qige500)交流学术写作或ChatGPT、Claude等学术大模型AI领域相关问题,多多交流,相互成就,共同进步。 写一份高质量的课题申报书往往面临许多困难,对很多同仁来说,难就难在…

Spring之【写一个简单的IOC容器EasySpring】

目录 EasySpring 注解 EasyAutowired EasyComponent EasyComponentScan EasyLazy EasyPostConstruct EasyProtoType EasyValue Bean定义信息 EasyBeanDefinition 管理Bean定义信息 EasyBeanDefinitionRegister Aware EasyAware EasyBeanFactoryAware EasyBea…

Selenium动态网页爬虫编写与解释

使用Selenium来抓取动态网页。动态网页通常是指那些通过JavaScript动态加载内容的网页,这些内容在初始HTML中并不存在,因此使用传统的requests库无法获取到这些动态生成的内容。Selenium可以模拟浏览器行为,等待JavaScript执行并渲染页面&…

element el-table中使用el-image图片预览被其他表格遮挡

或者::v-deep .el-table__cell {position: static !important;}

MyBatis与Spring整合优化实战指南:从配置到性能调优

一、SqlSessionFactory配置最佳实践 1.1 数据源配置优化 <!-- Spring配置示例 --> <bean id"dataSource" class"com.zaxxer.hikari.HikariDataSource" destroy-method"close"><property name"driverClassName" value&q…

LUA(初学)

条件语句if if then endlocal a 2 if a < 6 thenprint(a) end2条件语句if else if then else endlocal a 2 local b 3 if a > 6 thenprint(a) elseprint(b) end3while循环语句 while do endlocal a 2 while a < 5 doa a 1print(a) end3 4 5for循环语句 for do …

JMeter 连接与配置 ClickHouse 数据库

其他人都需要好几十积分提供jar包&#xff0c;我5积分提供给大家 jar包地址&#xff1a;https://download.csdn.net/download/weixin_41853064/91370401 1、将jar包内的文件放入jmeter/lib/exc目录并重启jmeter 2、配置jmeter JDBC连接 3、复制 click hourse的类名&#xff1…

Kmeams聚类算法详解

文章目录一、聚类任务的简介1.1 聚类的核心特征1.2 聚类的典型应用场景二、Kmeans的思想和数学原理2.1 核心思想2.2 数学原理三、Kmeans计算过程示例3.1 数据集3.2 步骤1&#xff1a;确定K值并初始化簇中心3.3 步骤2&#xff1a;计算样本到簇中心的距离并分配簇3.4 步骤3&#…

平升智慧水务整体解决方案,大数据驱动的智慧水务,让城市供水更智能

平升电子智慧水务整体解决方案 智慧供水整体解决方案&#xff0c;在调度中心搭建智慧水务平台&#xff0c;为供水各环节安装智能测控设备&#xff0c;应用物联网、互联网、大数据、云计算、人工智能等新一代信息技术&#xff0c;构建智慧水务综合管理系统&#xff0c;贯穿从水源…

Samba配置使用

主要作用&#xff1a;将Linux系统中的文件共享给windows配置过程&#xff1a;&#xff08;1&#xff09;打开命令终端&#xff1a;获取超级用户权限后运行以下指令:apt-get install samba&#xff08;2&#xff09;修改samba配置文件&#xff1a;gedit /etc/samba/smb.conf :找…

Datawhale AI数据分析 笔记

Part1&#xff1a;数据分析入门--信息统计知识点&#xff1a;什么是提示词&#xff08;Prompt&#xff09;&#xff1f;在人工智能&#xff08;AI&#xff09;领域&#xff0c;"提示词"是一个关键概念&#xff0c;它指的是输入给AI模型的文本或指令&#xff0c;用于引…

JAVA青企码协会模式系统源码支持微信公众号+微信小程序+H5+APP

Java青企码协会系统源码&#xff1a;构建全渠道数字化管理平台&#xff08;多端融合精准服务&#xff09;在政策红利与数字化转型的双重驱动下&#xff0c;青年企业协会正面临资源对接低效、会员粘性不足、跨域协同困难等痛点。基于Java技术栈的青企码协会系统&#xff0c;通过…

Python 中调用阿里云 OCR(Optical Character Recognition,光学字符识别)服务

在 Python 中调用阿里云 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;服务&#xff0c;通常需要使用阿里云的 SDK。OCR 服务属于阿里云“视觉智能&#xff08;Vision Intelligence&#xff09;”产品线的一部分&#xff0c;调用时需通过…

网络基础协议综合实验

本文结合所学的一些基础网络协议来完成一个综合性的实验&#xff08;实验完整代码放在最后&#xff09;会先说明使用协议的原理&#xff0c;然后分析具体在拓补图中的应用过程&#xff0c;最后再给出配置明确实验目标&#xff1a;拓扑分 核心层&#xff08;R1&#xff09;、汇聚…

图机器学习(5)——无监督图学习与浅层嵌入方法

图机器学习&#xff08;5&#xff09;——无监督图学习0. 前言1. 无监督图嵌入2. 矩阵分解2.1 图分解2.2 高阶邻接保留嵌入2.3 带有全局结构信息的图表示3. skip-gram 模型3.1 DeepWalk3.2 Node2Vec3.3 Edge2Vec3.4 Graph2Vec0. 前言 无监督机器学习是指训练过程中不利用任何目…

lua中检查静态常量是否正确引用

lua中检查静态常量是否正确引用思路代码因在项目开发中会出现引用了不存在的常量&#xff0c;为了方便检查这种情况&#xff0c;所以想着添加针对性脚本check 思路 加载要检查的常量结构到KEYWORD通过gmatch匹配指定路径下的所有文件&#xff0c;依次检查引用到目标变量的key是…

考完数通,能转云计算/安全方向吗?转型路径与拓展路线分析

不少网工考完 HCIE数通 后&#xff0c;都会面临一个现实问题&#xff1a;“能不能往云计算、安全这些热门方向转&#xff1f;”可以&#xff0c;而且非常值得。但怎么转、学什么、有没有路线图&#xff0c;是关键。一、为什么考完HCIE数通后适合转方向&#xff1f;技术基础扎实…

2.逻辑回归、Softmax回归——鸢尾花大作战

逻辑回归 逻辑回归其实并不是回归&#xff0c;而是一个分类算法 分类问题&#xff1a;邮件分类、图像识别、疾病诊断、文字情感分析、金融欺诈检测 根据历史数据&#xff0c;预测样本是属于哪个类别&#xff0c;通过数据拟合分界 主要用于二分类任务 逻辑回归公式 事实上是在多…

【Lucene/Elasticsearch】**Query Rewrite** 机制

这段话描述的是 Lucene/Elasticsearch 的 **Query Rewrite** 机制&#xff0c;核心一句话&#xff1a;> **把“高级”或“逻辑”查询&#xff08;如 PrefixQuery、WildcardQuery、RangeQuery&#xff09;在真正执行前&#xff0c;拆成最底层的、可直接倒排索引查的“原子查询…