avatar
文章
97
标签
67
分类
31
Home
Archives
Categories
Tags
About
LsWorld
Home
Archives
Categories
Tags
About

LsWorld

交叉验证与网格搜索:让模型选择更可靠
发表于2026-05-25|机器学习
训练机器学习模型时,我们经常会遇到两个问题: 这个模型到底是不是真的好? 参数应该怎么选,比如 KNN 的 $K$、逻辑回归的正则化强度、决策树的最大深度? 如果只把数据随便分成一次训练集和测试集,然后看一次准确率,很容易被偶然性误导。交叉验证(Cross Validation)就是为了解决“评估不稳定”的问题;网格搜索(Grid Search)则是为了解决“超参数怎么选”的问题。 1. 为什么不能只划分一次数据假设我们有一份数据集,要判断一个模型效果如何。最常见的做法是: 训练集:用来训练模型 测试集:用来评估模型 这听起来很合理,但有一个问题:一次划分可能有运气成分。 如果测试集刚好比较简单,模型分数会偏高;如果测试集刚好比较困难,模型分数会偏低。也就是说,一次测试结果可能不能代表模型的真实水平。 可以把它想象成考试: 只考一张卷子,可能刚好考到你熟悉的题。 多考几张不同卷子,平均成绩才更接近真实水平。 交叉验证的思想就是:让模型多考几次,再看平均表现。 2. 什么是 K 折交叉验证K 折交叉验证(K-Fold Cross Validation)会把数据分成 ...
Hexo 如何实现源码私有、页面公开部署
发表于2026-05-24|Hexo
使用 Hexo 搭建博客时,我们通常会接触到两类文件: Hexo 源代码:Markdown 文章、主题配置、站点配置、脚手架、依赖文件等。 静态网页文件:Hexo 生成后的 HTML、CSS、JS、图片等,也就是访问者真正看到的网页。 如果把这两类文件都放在同一个公开仓库里,别人不仅能看到博客页面,也能看到你的 Markdown 原文、草稿结构、主题配置和提交历史。为了更好地管理博客,可以采用一种更清晰的方案:源码放私有仓库,网页放公开仓库。 1. 为什么要分开部署Hexo 的工作流程可以理解为: Hexo 源代码 | | npx hexo generate v 静态网页文件 | | npx hexo deploy v GitHub Pages 公开访问 访问者真正需要的是生成后的静态网页,并不需要看到你的 Hexo 源代码。 因此,更合理的结构是: 私有仓库:保存 Hexo 源代码 公开仓库:保存 hexo deploy 生成的网页文件 这样既能正常公开博客,又能避免源码仓库暴露。 2. public 和 privac...
逻辑回归:从直线到概率的分类算法
发表于2026-05-24|机器学习
逻辑回归(Logistic Regression)名字里有“回归”,但它最常用于分类任务,尤其是二分类问题(逻辑回归说白了就是在线性回归的基础上使用Sigmoid 函数将原先结果转为概率的形式,然后根据设定的阈值来判断是否是正类)。 它要回答的问题不是“这个样本的数值是多少”,而是“这个样本属于某一类的概率有多大”。例如: 一封邮件是垃圾邮件的概率是多少? 一个用户会不会点击广告? 一个肿瘤样本是恶性的概率是多少? 一个学生是否能通过考试? 逻辑回归的核心思想可以概括为一句话:先用一条直线算出一个分数,再用 Sigmoid 函数把这个分数压缩成 $0$ 到 $1$ 之间的概率。 1. 从线性回归说起在线性回归中,我们用一个线性函数预测连续值: $$z = wx + b$$ 如果是多个特征(w可以看作权重),可以写成: $$z = \mathbf{w}^{T}\mathbf{x} + b$$ 这里的 $z$ 可以理解为模型给样本打出的“原始分数”。 但是分类问题不能直接使用这个分数。比如判断一封邮件是不是垃圾邮件时,我们希望模型输出的是: $$P(y&...
线性回归:从直觉到最小二乘法
发表于2026-05-23|机器学习
线性回归(Linear Regression)是机器学习中最基础、也最常用的监督学习算法之一。它主要用于解决回归问题,也就是预测一个连续数值。 例如: 根据房屋面积预测房价。 根据学习时长预测考试分数。 根据广告投入预测销售额。 线性回归的核心思想很朴素:如果两个变量之间存在近似线性的关系,就可以用一条直线或者一个线性函数去描述这种关系,并用它来预测未知样本。 图中的蓝色点是训练数据,红色直线是拟合出的线性模型,灰色虚线表示预测值和真实值之间的误差。线性回归训练时,本质上就是在寻找一条让整体误差尽可能小的直线。 1. 线性回归的直觉假设我们想根据学习时长预测考试分数,已有数据如下: 学习时长/小时 考试分数 1 50 2 55 3 65 4 70 5 80 把这些点画到坐标系中,可以发现:学习时间越长,考试分数通常越高。虽然这些点不一定完全落在同一条直线上,但整体趋势接近一条向上倾斜的直线。 线性回归要做的事情,就是找到一条尽可能贴近这些数据点的直线: $$\hat{y} = wx + b$$ 其中: $x$ 表示输...
K 近邻算法:KNN(K-Nearest Neighbors)
发表于2026-05-19|机器学习
KNN(K-Nearest Neighbors,K 近邻)是一种非常直观的监督学习算法:一个样本属于什么类别,可以参考它在特征空间中最近的 $K$ 个邻居。 在分类任务中,KNN 通常采用“多数投票”:最近的 $K$ 个样本里哪个类别最多,就预测为哪个类别;在回归任务中,KNN 通常取最近 $K$ 个样本标签值的平均值或加权平均值。 1. KNN 的直觉可以把 KNN 想象成“向邻居打听答案”。 假设小区里新搬来一户人家,你想判断他们更像“高收入家庭”还是“普通收入家庭”。最直接的方式,是观察离他们最近的几户邻居:如果最近的 5 户里有 3 户都是高收入家庭,那么你可能会猜测这户新邻居也更接近高收入家庭。 机器学习里的 KNN 做的是类似的事情: 输入:一个尚未标记类别的新样本。 过程:在训练集中找到距离它最近的 $K$ 个已知样本。 输出:分类时进行多数投票,回归时进行平均或加权平均。 KNN 本质上没有显式的训练过程,它把训练数据保存下来,预测时再计算新样本与训练样本之间的距离。因此它也被称为惰性学习(Lazy Learning)。 2. 数学原理KNN 要解决两个核...
freertos中常用api总结
发表于2025-02-12|嵌入式
1. 任务管理 (Task Management) xTaskCreate(): 创建任务。 功能: 动态创建一个新的任务,并将其加入到 FreeRTOS 的任务调度器中。 常用场景: 在系统初始化阶段或运行时动态创建任务,用于执行不同的功能模块。 关键参数 : pvTaskCode: 指向任务函数的指针,任务代码的入口。 pcName: 任务名称,字符串形式,方便调试和追踪。 usStackDepth: 任务堆栈大小,以字 (word) 为单位,需要根据任务需求合理配置。 pvParameters: 传递给任务函数的参数,void 指针类型,可以传递任意类型数据。 uxPriority: 任务优先级,数值越大优先级越高,FreeRTOS 会根据优先级进行任务调度。 pxCreatedTask: 任务句柄指针,用于存储创建的任务句柄,后续操作任务时需要使用该句柄。 vTaskDelete(): 删除任务。 功能: 删除指定的任务。可以删除自身任务或其它任务。 常用场景: 任务执行完成后不再需要,或者需要动态管理任务生命周期时...
STM32根据DHT11温湿度分析城市相似度项目总结
发表于2025-02-04|嵌入式
所使用的模块与工具: STM32F103C8T6 DHT11温湿度传感器 ESP32WROOM(采用ESP-IDF) EMQX Serverless(MQTT Broker) TiDB Cloud(云数据库) 腾讯位置服务API 和风天气API 硬件层STM32Stm32Cubemx配置 使用引脚: PA10->D17(USART1_RX连到ESP32的D17) P9->D16(USART1_TX连到ESP32的D16) PB10->LED(用于测试系统是否正常运作,设置为GPIO_Output,推挽输出) PA0->DHT11 Do口(芯片左边标S的口,最右边有-的标志连GND,中间连VCC) Pinout&Configuration 由于硬件层面比较简单,就不采用DMA来传输了 SystemCore配置 GPIO PA0 GPIO output level: low(默认输出低电平) GPIO mode : Output Push Pull(推挽输出) GPIO Pull-up/Pull-down:No p...
stm32硬件实现与w25qxx通信
发表于2025-01-31|嵌入式
使用的型号为stm32f103c8t6与w25q64。 STM32CubeMX配置与引脚衔接根据stm32f103c8t6引脚手册,采用B12-B15四个引脚与W25Q64连接,实现SPI通信。 W25Q64 SCK(CLK) PB13 MOSI(DI) PB15 MISO(DO) PB14 CS(这里不采用硬件CS,所以接任意GPIO口都可以) PB12 STM32CubeMX配置这里对于时钟相关的配置就不做赘述了,由于是练习所以将系统时钟配置成了72MHz,主要是配置引脚。 在引脚配置将PB12配置为推挽输出,默认电平为高。 PB13,PB14,PB15均使用硬件的SPI。 可以在系统核心的GPIO中的SPI中看到这三个配置。 然后到SPI2中将参数配置,采用高位优先,波特率为18MB/s,若不是则需要调整Prescaler分频到18MB/s,传输以字节为单位。 这里先不开启中断,所以NVIC setting里面的中断没有选上,做好基础配置后就可以生成代码,点击GENERATE CODE。 在Src中就会...
STM32F103C8T6综合学习项目的具体功能实现详解
发表于2025-01-18
代码项目地址为stm32综合学习项目。 项目概述(详细可在项目的Project_Structure中查看)该项目基于STM32F103C8T6芯片,学习I2C,GPIO,ADC,EXTI,PWM等基础模块的使用,并通过模块化的方式使代码具有良好的可读性与健壮性。 准备的模块 OLED显示屏(I2C) 蜂鸣器模块(GPIO) 光敏电阻传感器(ADC) 热敏电阻传感器(ADC) MPU6050陀螺仪(I2C) 旋转编码器(EXTI+TIM) 舵机(PWM) LED指示灯(GPIO) 按钮(GPIO+EXTI) STM23F103C8T6芯片 文件结构设计硬件驱动层Hardware/ ├── OLED.c ├── OLED.h ├── OLED_Font.h ├── beeper.c ├── beeper.h ├── light_sensor.c ├── light_sensor.h ├── temp_sensor.c ├── temp_sensor.h ├── mpu6050.c ├── mpu6050.h ├── encoder.c ├── encoder.h ...
基于STM32综合学习项目结构设计
发表于2025-01-15|嵌入式
该项目基于型号STM32F103C8T6,项目的具体内容参考GitHub仓库,根据各个模块来学习对应的功能的实现。 开发GPIO驱动在开发GPIO模块前,需要对GPIO_TypeDef中的参数有一定的认识。 typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; 1. CRL (Configuration Register Low) 作用:配置 GPIO 端口的低 8 个引脚(Pin 0 ~ Pin 7)的模式和速度。 位域: 每 4 位控制一个引脚: MODEy[1:0]:配置引脚的模式(输入、输出、复用功能、模拟模式)。 CNFy[1:0]:配置引脚的输出类型(推挽、开漏、复用功能、模拟模式)。 示例: 设置 Pin 0 为推挽输...
stm32中热敏电阻模块在OLED上实时显示温度
发表于2025-01-15|嵌入式
采用stm32f103c8t6芯片的A0引脚连接热敏电阻模块。采用ADC1的通道0,使用标准库实现。 实现功能所使用的常量为: //温度传感器参数 #define VREF 3.3f // ADC参考电压 3.3V #define R1 10000.0f // 电压分压阻值为10KΩ,与热敏电阻串联,用于计算热敏电阻的阻值 #define B 3950.0f // 热敏电阻的 B 常数,单位为开尔文(K),用于计算热敏电阻的温度 #define T0 298.15f // 参考温度,单位为开尔文(K),298.15K即 25°C #define R0 10000.0f // 热敏电阻在参考温度 T0 下的阻值,用于计算热敏电阻在当前温度下的阻值 // DMA内存存入位置 #define ADC_BUFFER_SIZE 10 uint16_t ADC_ConvertedValue[ADC_BUFFER_SIZE]; GPIO引脚配置: void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitS...
STM32F1系列驱动SG90舵机模块
发表于2025-01-09|嵌入式
SG90舵机模块介绍 标准库代码实现驱动舵机由上图可知可以通过PWM来实现驱动舵机,这里采用STM32F103C8T6的TIM2的通道4来实现,即该芯片的A3口引脚,如下图所示 配置20ms的时基单元(以PLL时钟频率为72MHz为例),那么就是将TIM2的定时器的周期配置为20ms(50Hz),即设置ARR= 2000 - 1,PSC = 720 -1,则定时器的时钟周期就为20ms,并且我在初始位置设置为90°,即起始值设置为150,代码如下: void TIM2_PWM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 配置定时器周期为20ms(50Hz) TIM_TimeBaseStructure.TIM_Period = 2000 - 1; // 72MHz / 7200 = 10KHz TIM_TimeBaseStructure.TIM_Prescal...
12…9
avatar
LsWorld
专注机器学习、深度学习与工程实践
文章
97
标签
67
分类
31
GitHub
公告
欢迎来到 LsWorld,这里记录机器学习学习路线、实验笔记和代码实践。
最新文章
交叉验证与网格搜索:让模型选择更可靠2026-05-25
Hexo 如何实现源码私有、页面公开部署2026-05-24
逻辑回归:从直线到概率的分类算法2026-05-24
线性回归:从直觉到最小二乘法2026-05-23
K 近邻算法:KNN(K-Nearest Neighbors)2026-05-19
分类
  • C5
  • Flutter2
  • Hexo1
  • JavaScript1
  • TypeScript1
  • Vercel1
  • Vue4
  • Vue31
标签
npm 博客部署 Vuex es6 flutter nestjs 错误排查 webpack stm32 Vue3 爬虫 踩坑 存储系统 TypeScript 模型评估 运输层 python 数制与编码 JSON 中央处理器 Hexo 计算机网络 mysql mustache android 单片机 基础 数据链路层 数据结构 node.js 计算机组成原理 监督学习 typeorm 正则表达式 Vue dart JavaScript 前端 嵌入式 指令系统
归档
  • 五月 2026 5
  • 二月 2025 2
  • 一月 2025 10
  • 十二月 2024 1
  • 二月 2024 3
  • 一月 2024 6
  • 十二月 2023 14
  • 十一月 2023 6
网站信息
文章数目 :
97
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By LsWorld框架 Hexo 6.2.0|主题 Butterfly 5.5.5-b1