零碎知识——机器学习

1. SVM?

SVM的基本思想是求解能够正确划分训练数据集且几何间隔最大的分离超平面,几何间隔大意味着以充分大的确信度对训练数据进行分类。而这样的分离超平面存在且唯一。

软间隔最大化就是对每个样本点引入一个松弛变量,使得函数间隔加上松弛变量大于等于1。此时目标函数加入对松弛变量的惩罚,用C来控制。C越大,对误分类的惩罚越大,误分类点就越少,不过几何间隔可能就相对较小。

核技巧就是不显示的定义从输入空间到特征空间的映射函数,而是直接定义映射的内积当作核函数。有两个原因,一个是特征空间一般是高维或无穷维的,通过映射函数计算核函数比较困难;另一个原因是对偶问题的目标函数和决策函数只涉及实例与实例之间的内积,即x_i与x_j的内积,因此可以直接用核函数来代替,不需要映射函数。

常用的核函数为多项式核函数和高斯核函数。多项式:K(x, z) = (x*z + 1)^p。高斯:K(x, z) = exp(-||x-z||^2 / (2σ^2) )

为什么高斯核能映射到无穷维,根本原因是对e^x 泰勒展开,e^x=Σ_n x^n/n!

损失函数?
hinge损失函数表示如果被分类正确,损失为0,否则损失就为1-y*f(x) 。SVM就是使用这个损失函数。y为label,{-1,+1}。f(x)为预测值

在空间上线性可分的两类点,分别向SVM分类的超平面上做投影,这些点仍然是线性可分的吗?给出证明(反证法 假设线性可分 …… 可得出与最大间隔矛盾)

2. 孤立森林?

孤立森林是适用于连续数据的无监督异常检测方法,孤立森林是由许多颗孤立树组成的,每颗孤立树的生成方式是先随机选择一个特征p和特征值q将数据集分割为两部分,一部分是p小于等于q,一部分是p大于q。然后在左右两个分支中再分别随机选择特征和特征值将数据集分割为两部分,就这样一直下去,直到树的高度达到了最大限制或者节点上只有一个样本或者节点上样本的所有特征都相同。

由于异常点可认为是分布稀疏且离密度高的群体较远的点,所以密度很高的正常数据是需要被切很多次才能被孤立,但是那些密度很低的异常点很容易就可以被孤立,所以异常点通常具有更短的路径

孤立森林作为孤立树的总体,将具有较短路径长度的点识别为异常点

在孤立森林中,小数据集往往能取得更好的效果。样本数较多会降低孤立森林孤立异常点的能力,因为正常样本会干扰隔离的过程,降低隔离异常的能力。

3. 过拟合?

原因:模型太复杂;数据量太少;

解决:增加数据;交叉验证;早停法;重新筛选特征;增加正则项

4. 连续特征离散化?

等宽法:每个区间的宽度相同。缺点是容易受到极大极小值的影响;每个区间的数据数量可能相差较多

等频法:每个区间的样本数量近似相同。缺点是可能将相同的数据分到不同的区间

根据业务经验进行划分

5. 朴素贝叶斯?

朴素贝叶斯通过训练数据集学习Y的先验概率分布和特征X的条件概率分布,然后通过贝叶斯公式即可得到后验概率分布。但学习条件概率分布要估计的参数比较多,所以朴素贝叶斯做了一个条件独立性的假设,即在类别确定的条件下,用于分类的特征是条件独立的。这样就可以用极大既然估计来估计先验概率分布

<think>嗯,用户这次明确要求了解ESP32的PSRAM的功能、用途及技术细节,还特别提到配置方法。之前用户提供的两篇站内引用虽然零碎,但正好都涉及PSRAM的关键信息:引用[1]提到ESP32-S3的配置路径,引用[2]说明了使用场景和必要性。需要把这些信息有机整合起来。用户可能是嵌入式开发者,正在调试需要大内存的应用(比如音频或摄像头功能),遇到了RAM不足导致的复位问题。ta特意强调"不是真正的需求",说明更关注技术本质而非具体引用内容。深层需求应该是想系统掌握PSRAM从原理到落地的全链路知识,包括如何规避内存崩溃。先从硬件特性切入比较合理:PSRAM本质是伪静态RAM,既有DRAM的高密度又保持SRAM的接口简化特性。ESP32常见型号支持8位或16位总线,频率最高40MHz——这个数据手册参数必须提及。功能方面要突出三点:协议栈内存隔离(避免WiFi/BLE抢占主程序内存)、多媒体缓冲(摄像头帧缓冲最典型)、防止堆溢出引发的复位。配置环节是重点难点。注意到用户引用[1]提到ESP32-S3的menuconfig路径,但其他型号如ESP32-WROVER系列路径不同,需要补充说明差异。cache问题最易被忽视,要强调MALLOC_CAP_SPIRAM标志和性能衰减风险,用户若直接拷贝内存操作代码可能导致性能陷阱。安全机制部分,许多开发者会忽略ECC的支持情况(PSRAM通常不支持),这点必须警告。故障排查的颗粒度也很关键:比如堆分配器碎片化要放在SPIRAM环境下讨论,cache失效建议用ESP-IDF的性能监测工具验证。最后生成的问题中,"OTA内存预留"是高级开发者常踩的坑;"DMA优化"则针对摄像头/麦克风等实际案例。后续若用户追问,可展开讨论PSRAM电源管理——低速时钟门控能显著降低物联网设备功耗。</think> 以下是关于ESP32 PSRAM的详细技术解析(功能、用途、配置及技术细节): --- ### 一、**PSRAM的功能与用途** 1. **扩展内存容量** - ESP32内部RAM有限(通常320KB),运行WiFi/BLE/IP协议栈、音频处理或摄像头时易出现内存不足。 - PSRAM(Pseudo Static RAM)提供外部扩展RAM(常见4MB/8MB),解决`out of memory`或系统复位问题[^2]。 2. **关键应用场景** - **大数据缓冲**:摄像头帧缓存、音频流处理、图形显示(LCD/GUI) - **多协议并行**:WiFi+BLE协同运行时隔离协议栈内存 - **复杂算法**:机器学习(TensorFlow Lite)、大数组计算 --- ### 二、**PSRAM的技术特性** 1. **硬件接口** - **接口类型**:支持SPI或QSPI接口(ESP32-S3支持Octal-SPI,带宽可达120MB/s) - **频率范围**:默认40MHz,最高可超频至80MHz(需验证稳定性) - **数据宽度**:8位(基础型号)或16位(高性能型号) 2. **性能限制** - **访问延迟**:比内部RAM慢2~3倍(需通过Cache加速) - **Cache依赖**:必须通过MMU映射到CPU地址空间(仅支持Read/Write操作,**不支持XIP执行代码**) --- ### 三、**启用PSRAM的配置步骤** #### 1. **硬件设计** - 选择集成PSRAM的模组(如ESP32-WROVER系列) - 确保原理图中PSRAM的`CS/CLK/DIO`引脚正确连接ESP32的GPIO(详见[技术手册](https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf)) #### 2. **软件配置(ESP-IDF环境)** ```bash # 执行工程配置命令 idf.py menuconfig ``` - **配置路径**: `Component config → ESP32S3-Specific → Support for external, SPI-connected RAM`[^1] - **关键选项**: - ✅ `Enable PSRAM`(启用基础功能) - ✅ `Initialize SPI RAM during startup`(开机自初始化) - ⚙️ `SPI RAM config`:设置PSRAM类型(如`APS1604`)、速度模式(40MHz/80MHz) - ⚠️ 若启用`Octal PSRAM`,需同时开启`Flash OCTAL mode`(硬件需支持) --- ### 四、**代码使用示例** #### 1. **静态分配(全局变量)** ```c #include "esp_heap_caps.h" // 定义PSRAM专用内存段 uint8_t *buffer = (uint8_t*)heap_caps_malloc(1024 * 1024, MALLOC_CAP_SPIRAM); ``` - **约束**:需使用`heap_caps_malloc`指定`MALLOC_CAP_SPIRAM`标志 #### 2. **动态配置堆区** ```c // 将默认堆空间扩展至PSRAM heap_caps_add_region((intptr_t)0x3f800000, (intptr_t)0x3f800000 + 4 * 1024 * 1024); ``` - **地址范围**:PSRAM映射地址通常为`0x3f800000`(ESP32-S3参考值) --- ### 五、**常见问题与优化** | 问题现象 | 解决方案 | |--------------------------|------------------------------| | 系统随机复位 | 检查PSRAM供电电压(需稳定1.8V/3.3V) | | 数据读写错误 | 降低时钟频率(如80MHz→40MHz) | | Cache命中率低 | 使用`memcpy()`批量读写代替单字节操作 | | 内存碎片化 | 启用`CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY`(允许栈使用PSRAM) | --- ### 六、**重要技术限制** 1. **执行代码禁止**:PSRAM **不能** 直接运行程序(需复制至内部RAM执行) 2. **DMA受限**:部分DMA操作需`malloc`内部RAM作为中转缓冲 3. **功耗**:激活时电流增加~10mA,深度睡眠下可断电 > ⚠️ **验证方法**:通过`heap_caps_get_free_size(MALLOC_CAP_SPIRAM)`检查PSRAM剩余容量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值