机器学习笔记【Week2】

一、多变量线性回归(Multivariate Linear Regression)

为什么需要多变量?

现实问题中,一个目标可能受多个因素影响,比如预测房价时:

  • x 1 x_1 x1:面积
  • x 2 x_2 x2:卧室数量
  • x 3 x_3 x3:房龄
  • . . . ... ...

假设函数(Hypothesis Function)

在单变量线性回归基础上推广为:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n hθ(x)=θ0+θ1x1+θ2x2++θnxn
向量形式更简洁:
h θ ( x ) = θ T x h_\theta(x) = \theta^T x hθ(x)=θTx
其中:

  • θ = [ θ 0 , θ 1 , ⋯ , θ n ] T \theta = [\theta_0, \theta_1, \cdots, \theta_n]^T θ=[θ0,θ1,,θn]T(参数向量)
  • x = [ 1 , x 1 , x 2 , ⋯ , x n ] T x = [1, x_1, x_2, \cdots, x_n]^T x=[1,x1,x2,,xn]T x 0 = 1 x_0 = 1 x0=1 以统一偏置项)

模型核心思想:

和单变量回归一样,我们要最小化代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2
然后通过梯度下降法正规方程法求解。

Python 示例代码(数据模拟)

import numpy as np# 模拟数据:面积、卧室数,房价
X = np.array([[2104, 3],[1600, 3],[2400, 3],[1416, 2],[3000, 4]])
y = np.array([399.9, 329.9, 369.0, 232.0, 539.9]).reshape(-1, 1)m = len(y)# 添加偏置项 x0 = 1
X = np.c_[np.ones((m, 1)), X]  # shape = (m, n+1)
theta = np.zeros((X.shape[1], 1))  # 初始参数

二、特征缩放(Feature Scaling)

特征数值差距大时(如面积 [ 50 , 200 ] [50, 200] [50,200] vs 房龄 [ 1 , 30 ] [1, 30] [1,30],梯度下降可能收敛非常慢,因此需要对输入进行缩放。

方法:均值归一化(mean normalization)

x i : = x i − μ i s i x_i := \frac{x_i - \mu_i}{s_i} xi:=sixiμi

  • μ i \mu_i μi:第 i i i 个特征的平均值
  • s i s_i si:标准差或最大最小差

使得所有特征都落在类似于 [ − 1 , 1 ] [-1, 1] [1,1] 范围内

Python 实现:

def feature_normalize(X):mu = np.mean(X, axis=0)sigma = np.std(X, axis=0)X_norm = (X - mu) / sigmareturn X_norm, mu, sigma# 只对 x1~xn 归一化,排除 x0
X[:, 1:], mu, sigma = feature_normalize(X[:, 1:])

三、向量化梯度下降(Vectorized Gradient Descent)

成本函数:

J ( θ ) = 1 2 m ( X θ − y ) T ( X θ − y ) J(\theta) = \frac{1}{2m}(X\theta - y)^T(X\theta - y) J(θ)=2m1(y)T(y)

梯度公式(向量化):

θ : = θ − α m X T ( X θ − y ) \theta := \theta - \frac{\alpha}{m} X^T(X\theta - y) θ:=θmαXT(y)

其中:

  • X X X m × ( n + 1 ) m \times (n+1) m×(n+1) 的训练样本矩阵
  • y y y m × 1 m \times 1 m×1 的目标值列向量

Python 实现:

def compute_cost(X, y, theta):m = len(y)return (1 / (2 * m)) * np.sum((X @ theta - y) ** 2)def gradient_descent(X, y, theta, alpha, num_iters):m = len(y)J_history = []for _ in range(num_iters):error = X @ theta - ygradient = (1 / m) * X.T @ errortheta -= alpha * gradientJ_history.append(compute_cost(X, y, theta))return theta, J_history

四、梯度下降的收敛性分析

如何判断收敛?

  • 绘制 J ( θ ) J(\theta) J(θ) 随迭代次数的变化图
  • 若代价函数持续下降 → 收敛良好
  • 若震荡/上升 → 学习率 α \alpha α 太大,需调小

调整学习率建议:

现象原因解决方法
收敛很慢学习率太小增加 α \alpha α
震荡甚至发散学习率太大减小 α \alpha α

五、正规方程法(Normal Equation)

不使用梯度下降,直接求解析解:

解法公式:

θ = ( X T X ) − 1 X T y \theta = (X^T X)^{-1} X^T y θ=(XTX)1XTy

优点:

  • 不需要选择 α \alpha α
  • 不需要迭代

缺点:

  • 当特征数量 n n n 很大时(如 >10000),求逆操作非常慢甚至不可行

Python 实现:

def normal_equation(X, y):return np.linalg.inv(X.T @ X) @ X.T @ ytheta_ne = normal_equation(X, y)

正规方程特点:

优点缺点
不需选择学习率不能用于特征非常多的情况(矩阵求逆开销大)
不需迭代,一次求解对数据量大、特征维度高时效率较低

六、可视化训练过程(损失下降)

import matplotlib.pyplot as plttheta, J_history = gradient_descent(X, y, theta, alpha=0.1, num_iters=400)plt.plot(J_history)
plt.xlabel("Iterations")
plt.ylabel("Cost J(θ)")
plt.title("Cost Reduction over Time")
plt.grid(True)
plt.show()

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

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

相关文章

Axure 基本用法学习笔记

一、元件操作基础 1. 可见性控制 隐藏/显示:可以设置元件的可见性,使元件在特定条件下隐藏或可见 应用场景:创建动态交互效果,如点击按钮显示隐藏内容 2. 层级管理 层级概念:元件有上下层关系,上层元件…

aws平台s3存储桶夸域问题处理

当我们收到开发反馈s3存在跨域问题 解决步骤: 配置 S3 存储桶的 CORS 设置: 登录到 AWS 管理控制台。转到 S3 服务。选择你存储文件的 存储桶。点击 权限 标签页。在 跨域资源共享(CORS)配置 部分,点击 编辑。 登陆…

【后端高阶面经:微服务篇】7、1秒响应保障:超时控制如何成为高并发系统的“救火队长”?

一、全链路超时建模:从用户需求到系统分解 1.1 端到端时间预算分配 黄金公式: 用户期望响应时间 = 网络传输时间 + 服务处理时间 + 下游调用时间 + 缓冲时间典型分配策略(以1秒目标为例): 环节时间预算优化目标客户端渲染100ms骨架屏(Skeleton)预渲染边缘节点(CDN)…

前端遇到高并发如何解决重复请求

在前端开发中遇到高并发场景时,若不加控制容易出现重复请求,这可能导致接口压力增加、数据异常、用户体验变差等问题。以下是前端防止/解决重复请求的常见方法,按不同场景归类总结: 🌟 一、常见重复请求场景 用户频繁点…

老牌协议再升级,Ethernet IP转Modbus TCP网关桥接精准灌装系统

对于消费品包装制造商而言,灌装机是最关键且昂贵的设备之一。然而,许多公司却难以应对生产过程中的灌装波动,从而造成严重的财务和生产后果。 在本次网络研讨会中,我们将探讨稳联技术的ethernet ip转modbus tcp(WL-ABC…

骰子游戏(2023睿抗省赛)

骰子游戏 题目描述: 在某个游戏中有一个骰子游戏。 在游戏中,你需要投掷 5 个标准六面骰子(骰子为一个正方体,6个面上分别有 1、2、3、4、5、6中的一个数字,骰子的质量均匀),投出的点数根据组合会获得一…

CMake跨平台编译生成:从理论到实战

一、引言 在当今软件开发中,跨平台开发已成为常态。无论是需要在Windows、Linux、macOS等多操作系统上运行,还是在不同的硬件架构(如x86、ARM等)间部署,跨平台编译生成都是一个无法回避的关键问题。CMake,…

Python经典算法实战

在编程的世界里,算法是解决问题的灵魂,而Python以其简洁优雅的语法成为实现算法的理想语言。无论你是初学者还是有一定经验的开发者,《Python经典算法实战》都能带你深入算法的殿堂,从理论到实践,一步步构建起扎实的编…

QT的自定义控件

1.比如对label控件进行提升为QPaintPointLabel类,基类选择QLabel,头文件建议加上相对路径,有时候VS识别不出来直接的头文件,在提升的类中重写pointEvent()函数。

flutter 常用组件详细介绍、屏幕适配方案

一、常用组件 1.基础组件 组件说明示例Text显示文本Text(‘Hello Flutter’, style: TextStyle(fontSize: 20))Image显示图片Image.network(‘https://example.com/image.jpg’)Icon显示图标Icon(Icons.home, size: 30, color: Colors.blue)RaisedButton / ElevatedButton按钮…

leetcode 17. Letter Combinations of a Phone Number

题目描述 17. Letter Combinations of a Phone Number 代码: class Solution {string table[10] {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz&qu…

Web前端大模型实战:端侧翻译+朗读流程线+模型音频数据编码 - 让网站快速支持多语言多模态输出

在以前的文章 前端大模型入门:实战篇之Vue3Antdvtransformers本地模型实现增强搜索 中介绍了前端使用大模型的文本RAG实现。本文将更进一步,介绍多模态输出的端侧实现。 本文将通过端侧大模型技术实现网页端的实时翻译与语音合成功能,无需服…

Python包管理工具uv 国内源配置

macOS 下 .config/uv/uv.toml内 pip源 [[index]] url "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/" default true#uv python install 下载源配置无效,需要在项目里配置 # python-install-mirror "https://mirror.nju.edu.cn/githu…

用户有一个Django模型没有设置主键,现在需要设置主键。

用户有一个Django模型没有设置主键,现在需要设置主键。 from django.db import modelsclass CategoryAssistentModel(models.Model):second_level_category models.CharField(max_length100, nullTrue, blankTrue)third_level_category models.CharField(max_len…

搭建 C/C++_CMake_Boost_git 开发环境

搭建 C 开发环境 步骤 1:启动 Ubuntu 18.04 容器 创建并启动一个 Ubuntu 18.04 容器: docker run -itd --name cppubuntu ubuntu:18.04-itd:以交互模式运行容器,并在后台运行。--name cppubuntu:命名容器为 cppubun…

OceanBase数据库全面指南(查询进阶篇DQL)

文章目录 一、OceanBase条件查询详解——WHERE子句的艺术1.1 WHERE子句基础语法与原理1.2 基础条件查询实战1.3 高级条件表达式1.4 分布式环境下的条件查询优化二、OceanBase排序查询——ORDER BY深度解析2.1 ORDER BY基础与执行原理2.2 单字段排序实战2.3 多字段复杂排序2.4 排…

.NET 10 - 尝试一下Minimal Api的Validation新特性

1.简单介绍 2025年11月微软将会发布.NET10,这是LTS(Long Term Support)版本。当前.NET10已经处于Preview4版本,微软对Runtime, Library, SDK, C#, Asp.NET Core, MAUI等都做了很多enhancement。近些年微软对Minimal Api一直在持续地更新。在.NET8中, Mi…

vue+threeJS 创建镂空球体(SphereGeometry)

嗨,我是小路。今天主要和大家分享的主题是“vuethreeJS 创建镂空球体(SphereGeometry)”。 上次看到一个做镂空球体的项目,自己也准备尝试着做一做。今天终于做完了,并对这个项目进行梳理。 镂空球体示例效果…

Docker 镜像打包到本地

保存镜像 使用 docker save 命令将镜像保存为一个 tar 文件。命令格式如下: docker save [options] IMAGE [IMAGE...]示例:docker save -o centos.tar centos:latest--output 或 -o:将输出保存到指定的文件中。 加载镜像 如果需要在其他机器…

前端常见的安全问题

跨站脚本攻击(XSS) XSS(跨站脚本攻击,Cross-Site Scripting)是一种通过在网页中注入恶意脚本,从而窃取用户数据或控制用户行为的攻击方式。注入的js跟网页与原有的js具有同样的权限,可以获得server端数据、可以获取co…