机器学习笔记【Week3】

一、逻辑回归(Logistic Regression)

与线性回归的区别:

问题类型输出类型举例
回归问题连续实数房价预测、气温预测
分类问题离散类别(0 或 1)是否患病、是否点击广告、是否合格

我们希望构建一个模型,根据输入 x x x 输出一个概率值:
h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x) = P(y=1 \mid x;\theta) hθ(x)=P(y=1x;θ)

应用场景

用于二分类任务,例如:

  • 邮件是否垃圾
  • 是否患病
  • 信用是否违约

二、假设函数 Hypothesis

与线性回归的主要区别:输出范围需限制在 [0, 1]

使用 sigmoid 函数(也称 logistic 函数):
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = g(\theta^T x) = \frac{1}{1 + e^{-\theta^T x}} hθ(x)=g(θTx)=1+eθTx1
其中:

  • g ( z ) g(z) g(z) 是 sigmoid 函数
  • 输出值 h θ ( x ) h_\theta(x) hθ(x) 表示输入为正类(y = 1)的概率

Python 实现:

import numpy as npdef sigmoid(z):return 1 / (1 + np.exp(-z))

三、分类决策

逻辑回归模型最终输出一个概率,我们通常采用:

  • h θ ( x ) ≥ 0.5 h_\theta(x) \ge 0.5 hθ(x)0.5 ⇒ 预测为 1
  • h θ ( x ) < 0.5 h_\theta(x) < 0.5 hθ(x)<0.5 ⇒ 预测为 0

决策边界:

满足 h θ ( x ) = 0.5 h_\theta(x) = 0.5 hθ(x)=0.5 即:
θ T x = 0 \theta^T x = 0 θTx=0
这就是一条分界线(或超平面),用来把输入空间划分为两类。

四、代价函数(Cost Function)

线性回归的平方误差不适用于分类,会导致非凸函数。因此改用如下对数损失函数:

单个样本:
Cost ( h θ ( x ) , y ) = { − log ⁡ ( h θ ( x ) ) if  y = 1 − log ⁡ ( 1 − h θ ( x ) ) if  y = 0 \text{Cost}(h_\theta(x), y) = \begin{cases} - \log(h_\theta(x)) & \text{if } y = 1 \\ - \log(1 - h_\theta(x)) & \text{if } y = 0 \end{cases} Cost(hθ(x),y)={log(hθ(x))log(1hθ(x))if y=1if y=0
统一表达为:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)}))\right] J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
它是一个凸函数,可用梯度下降优化。

对每个样本:

  • y = 1 y = 1 y=1:损失为 − log ⁡ ( h θ ( x ) ) -\log(h_\theta(x)) log(hθ(x))
  • y = 0 y = 0 y=0:损失为 − log ⁡ ( 1 − h θ ( x ) ) -\log(1 - h_\theta(x)) log(1hθ(x))

Python 实现:

def compute_cost(theta, X, y):m = len(y)h = sigmoid(X @ theta)epsilon = 1e-5  # 防止 log(0)return (-1 / m) * (y.T @ np.log(h + epsilon) + (1 - y).T @ np.log(1 - h + epsilon))

五、梯度下降优化参数

逻辑回归成本函数依然是凸函数,适用梯度下降:
θ j : = θ j − α ⋅ 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) ⋅ x j ( i ) \theta_j := \theta_j - \alpha \cdot \frac{1}{m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)

向量化形式:
θ : = θ − α m X T ( h θ ( x ) − y ) \theta := \theta - \frac{\alpha}{m} X^T (h_\theta(x) - y) θ:=θmαXT(hθ(x)y)
其中 h θ ( x ) = g ( X θ ) h_\theta(x) = g(X\theta) hθ(x)=g()

Python 向量化实现:

def gradient(theta, X, y):m = len(y)h = sigmoid(X @ theta)return (1 / m) * (X.T @ (h - y))

六、训练模型示例(使用 sklearn 数据)

from sklearn.datasets import make_classification
from scipy.optimize import minimize# 生成模拟数据
X, y = make_classification(n_samples=100, n_features=2, n_informative=2,n_redundant=0, random_state=42)
X = np.c_[np.ones((X.shape[0], 1)), X]  # 添加 x0
y = y.reshape(-1, 1)
theta_init = np.zeros((X.shape[1], 1))# 定义损失函数封装形式(用于 minimize)
def cost_func(t):return compute_cost(t.reshape(-1, 1), X, y)def grad_func(t):return gradient(t.reshape(-1, 1), X, y).flatten()# 优化
result = minimize(fun=cost_func, x0=theta_init.flatten(), jac=grad_func)
theta_optimized = result.x.reshape(-1, 1)

七、决策边界可视化

import matplotlib.pyplot as pltdef plot_decision_boundary(X, y, theta):plt.scatter(X[:, 1], X[:, 2], c=y.flatten(), cmap='bwr')x_vals = np.linspace(X[:, 1].min(), X[:, 1].max(), 100)y_vals = -(theta[0] + theta[1]*x_vals) / theta[2]plt.plot(x_vals, y_vals, 'g--')plt.xlabel('Feature 1')plt.ylabel('Feature 2')plt.title('Decision Boundary')plt.grid(True)plt.show()plot_decision_boundary(X, y, theta_optimized)

八、过拟合与欠拟合(Overfitting vs Underfitting)

欠拟合(Underfitting)

  • 模型太简单,不能很好地拟合训练数据。
  • 训练误差高,泛化能力差。

过拟合(Overfitting)

  • 模型太复杂(如高阶多项式),虽然训练误差低,但在新数据上表现差。
  • 泛化能力弱。

图示对比:

  • 欠拟合:模型是一条直线
  • 合理拟合:模型是一条平滑曲线
  • 过拟合:模型是高频震荡曲线,精确穿过每个训练点

解决过拟合的两种主要方法

方法 1:减少特征数量(手动或 PCA)

  • 删除噪声特征
  • 降维技术(如 PCA)

方法 2:正则化(Regularization)

  • 惩罚模型中参数过大的情况
  • 防止模型过度复杂

九、多项式回归(Polynomial Regression)

使用更高阶的特征,如:
h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 + ⋯ h_\theta(x) = \theta_0 + \theta_1 x + \theta_2 x^2 + \theta_3 x^3 + \cdots hθ(x)=θ0+θ1x+θ2x2+θ3x3+
为了防止高阶模型过拟合,需要 正则化


十、正则化(Regularization)

在代价函数中加入一个惩罚项(L2 范数),避免参数变得过大:

1. 线性回归正则化代价函数:

J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 + \frac{\lambda}{2m} \sum_{j=1}^{n} \theta_j^2 J(θ)=2m1i=1m(hθ(x(i))y(i))2+2mλj=1nθj2

第一项:模型的预测误差

第二项:参数平方和,防止过大

λ \lambda λ 是正则化系数(控制惩罚强度)

注意:不对 θ 0 \theta_0 θ0 正则化

2. 对应的梯度更新(带正则化):

  • j = 0 j = 0 j=0(偏置项):

θ 0 : = θ 0 − α ⋅ 1 m ∑ ( h θ ( x ( i ) ) − y ( i ) ) \theta_0 := \theta_0 - \alpha \cdot \frac{1}{m} \sum (h_\theta(x^{(i)}) - y^{(i)}) θ0:=θ0αm1(hθ(x(i))y(i))

  • j ≥ 1 j \ge 1 j1

θ j : = θ j − α ⋅ [ 1 m ∑ ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] (j ≥ 1) \theta_j := \theta_j - \alpha \cdot \left[ \frac{1}{m} \sum (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} + \frac{\lambda}{m} \theta_j \right] \quad \text{(j ≥ 1)} θj:=θjα[m1(hθ(x(i))y(i))xj(i)+mλθj](j ≥ 1)

十一、逻辑回归中的正则化

逻辑回归同样适用:
J ( θ ) = − 1 m ∑ [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta) = -\frac{1}{m} \sum \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1-y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] + \frac{\lambda}{2m} \sum_{j=1}^{n} \theta_j^2 J(θ)=m1[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2

Python 实现(逻辑回归正则化):

def cost_regularized(theta, X, y, lambda_):m = len(y)h = sigmoid(X @ theta)reg_term = (lambda_ / (2 * m)) * np.sum(np.square(theta[1:]))return (-1 / m) * (y.T @ np.log(h + 1e-5) + (1 - y).T @ np.log(1 - h + 1e-5)) + reg_termdef gradient_regularized(theta, X, y, lambda_):m = len(y)h = sigmoid(X @ theta)grad = (1 / m) * (X.T @ (h - y))reg = (lambda_ / m) * thetareg[0] = 0  # θ₀ 不正则化return grad + reg

十二、多项式特征与 sklearn 示例

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge# 构造多项式特征
poly = PolynomialFeatures(degree=5)
X_poly = poly.fit_transform(X)# 岭回归(L2 正则化)
model = Ridge(alpha=1.0)  # alpha 对应 λ
model.fit(X_poly, y)

十三、训练集 vs 验证集 vs 测试集

  • 训练集(training set):用于训练模型
  • 验证集(cross validation set):用于选择参数,如 λ、模型复杂度等
  • 测试集(test set):用于评估模型最终泛化性能

通常划分比例为 60% / 20% / 20%


十四、模型选择与评估流程

模型选择步骤:

  1. 使用训练集训练多个不同 λ 值的模型
  2. 在验证集上评估不同模型的性能,选择最优 λ
  3. 使用测试集评估最终模型的泛化误差

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

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

相关文章

6.4.2_3最短路径问题_Floyd算法

Floyd弗洛伊德 膜拜大佬&#xff0c;给大佬鞠躬鞠躬鞠躬。。。。。。。。。 Floyd算法 ----解决顶点间的最短路径&#xff1a; 过程&#xff1a; 如下&#xff1a; 初始化(没有中转点)&#xff1a;2个邻接矩阵A和path&#xff0c;第一个是没有中转点的2个顶点之间的最短路径…

uniapp|实现多端图片上传、拍照上传自定义插入水印内容及拖拽自定义水印位置,实现水印相机、图片下载保存等功能

本文以基础视角,详细讲解如何在uni-app中实现图片上传→水印动态编辑→图片下载的全流程功能。 目录 引言应用场景分析(社交媒体、内容保护、企业素材管理等)uniapp跨平台开发优势核心功能实现​图片上传模块多来源支持:相册选择(`uni.chooseImage`)与拍照(`sourceType:…

2021年认证杯SPSSPRO杯数学建模B题(第二阶段)依巴谷星表中的毕星团求解全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 B题 依巴谷星表中的毕星团 原题再现&#xff1a; 依巴谷卫星&#xff08;High Precision Parallax Collecting Satellite&#xff0c;缩写为 Hip-parcos&#xff09;&#xff0c;全称为“依巴谷高精度视差测量卫星”&#xff0c;是欧洲空间局发…

行为型:解释器模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 实现案例 3、优缺点分析 4、适用场景 5、注意事项 1、核心思想 目的&#xff1a;针对某种语言并基于其语法特征创建一系列的表达式类&#xff08;包括终极表达式与非终极表达式&#xff09;​&#xff0c;利用树结构模式…

Redis分布式缓存核心架构全解析:持久化、高可用与分片实战

一、持久化机制&#xff1a;数据安全双引擎 1.1 RDB与AOF的架构设计 Redis通过RDB&#xff08;快照持久化&#xff09;和AOF&#xff08;日志持久化&#xff09;两大机制实现数据持久化。 • RDB架构&#xff1a;采用COW&#xff08;写时复制&#xff09;技术&#xff0c;主进程…

换脸视频FaceFusion3.1.0-附整合包

2025版最强换脸软件FaceFusion来了&#xff08;附整合包&#xff09;超变态的换脸教程 2025版最强换脸软件FaceFusion来了&#xff08;附整合包&#xff09;超变态的换脸教程 整合包地址&#xff1a; 「Facefusion_V3.1.0」 链接&#xff1a;https://pan.quark.cn/s/f71601a920…

论文阅读笔记——Step1X-Edit: A Practical Framework for General Image Editing

Step1X-Edit 论文 当前图像编辑数据集规模小&#xff0c;质量差&#xff0c;由此构建了如下数据构造管线。 高质量三元组数据&#xff08;源图像、编辑指令、目标图像&#xff09;。 主体添加与移除&#xff1a;使用 Florence-2 对专有数据集标注&#xff0c;然后使用 SAM2 进…

使用Python在PyCharm中进行交通工程数据分析的完整流程,包括数据清洗、挖掘、关联、可视化和应用整合等各个阶段

交通工程领域数据分析流程 下面我将详细介绍使用Python在PyCharm中进行交通工程数据分析的完整流程,包括数据清洗、挖掘、关联、可视化和应用整合等各个阶段。 1. 数据准备与清洗 1.1 导入必要库 import pandas as pd import numpy as np import matplotlib.pyplot as plt…

《软件工程》第 2 章 -UML 与 RUP 统一过程

在软件工程领域&#xff0c;UML&#xff08;统一建模语言&#xff09;与 RUP&#xff08;统一过程&#xff09;是进行面向对象软件开发的重要工具和方法。接下来&#xff0c;我们将深入探讨第 2 章的内容&#xff0c;通过案例和代码&#xff0c;帮助大家理解和掌握相关知识。 …

Vue收集表单数据

在 Web 开发中&#xff0c;表单是用户与系统交互的重要方式。无论是注册、登录、提交评论还是其他操作&#xff0c;都需要通过表单获取用户输入的数据。Vue.js 提供了强大的响应式系统和指令&#xff0c;使得表单数据的收集变得简单而高效。本文将详细介绍如何在 Vue 中实现表单…

R基于多元线性回归模型实现汽车燃油效率预测及SHAP值解释项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 在全球环保意识日益增强和技术进步的推动下&#xff0c;汽车燃油效率成为了汽车行业关注的核心指标…

解决Window10上IP映射重启失效的问题

问题 在实际网络搭建过程中&#xff0c;大家有可能会遇到在局域网范围内&#xff0c;在自己本机上搭建一个网站或者应用时&#xff0c;其他设备通过本机的IP地址无法访问的问题,这个问题可以通过设置IP映射来解决&#xff0c;但是通过netsh interface命令设置的IP映射&#xf…

一台手机怎样实现多IP上网?方法有多种

在数字时代&#xff0c;多IP上网已成为许多手机用户的刚需。本文将详细介绍如何通过不同技术手段实现手机多IP上网&#xff0c;帮助读者根据实际需求选择适合的解决方案。 一、为什么一台手机要实现多IP上网 手机实现多IP上网的典型场景包括&#xff1a; ①防止同一IP操作多个…

git子模块--常见操作

克隆仓库 标准化克隆流程 基本命令git clone <父仓库远程URL> [本地文件名] cd <本地仓库名> git submodule init # 初始化子模块配置 git submodule update # 拉取子模块内容一次性完成克隆和初始化流程 基本命令git clone --recurse-submodules <父仓库远…

ceph 剔除 osd

剔除 osd 参考官网文档 Removing OSDs (Manual) Removing the OSD 你得周期性地维护集群的子系统、或解决某个失败域的问题(如一机架)。如果你不想在停机维护 OSD 时让 CRUSH 自动重均衡,提前设置 noout ceph osd set nooutid=1# OSD 通常在从集群中移除之前处于 up in 在…

MySQL推出全新Hypergraph优化器,正式进军OLAP领域!

在刚刚过去的 MySQL Summit 2025 大会上&#xff0c;Oracle 发布了一个用于 MySQL 的全新 Hypergraph&#xff08;超图&#xff09;优化器&#xff0c;能够为复杂的多表查询生成更好的执行计划&#xff0c;从而优化查询性能。 这个功能目前只在 MySQL HeatWave 云数据库中提供&…

破能所,入不二

一、缘起&#xff1a;从“闻所闻尽”到性相不二 《楞严经》观世音菩萨耳根圆通法门的核心教义——“初于闻中&#xff0c;入流亡所&#xff1b;所入既寂&#xff0c;动静二相&#xff0c;了然不生。如是渐增&#xff0c;闻所闻尽”&#xff0c;揭示了从凡夫二元认知跃升至究竟…

网站每天几点更新,更新频率是否影响网站收录

1. 每天几点更新网站最合适&#xff1f;总怕时间选错影响收录&#xff1f; 刚开始搞网站的时候&#xff0c;是不是老纠结啥时候更新合适&#xff1f;早上刚上班&#xff1f;半夜没人的时候&#xff1f;选不对时间&#xff0c;总担心搜索引擎爬虫来了没抓到新内容&#xff0c;影…

使用workvisual对库卡机器人进行程序备份

1&#xff0c;将电脑网卡设置自动获取&#xff0c;用网线将电脑与库卡机器人控制柜上的网口连接 2&#xff0c;打开软件后&#xff0c;会出现项目打开对话框&#xff0c;点击浏览按钮&#xff0c;会出现机器人站项目 3&#xff0c;点击项目前面的➕&#xff0c;展开菜单&…

2025.5.22 Axure 基础与线框图制作学习笔记

一、Axure 基础 - 界面及相关了解 界面布局 工具栏 &#xff1a;位于软件上方&#xff0c;包含新建、打开、保存等常用文件操作按钮&#xff0c;以及撤销、重做、剪切、复制、粘贴等编辑功能按钮&#xff0c;方便快速执行相关操作。 元件面板 &#xff1a;在左侧&#xff0c;提…