最优化方法Python计算:有约束优化应用——线性Lasso回归预测器
实际应用中,特征维度 n n n通常远大于样本容量 m m m( n ≪ m n\ll m n≪m),这种高维小样本场景下特征数据可能含有对标签数据 y i y_i yi的取值不必要的成分,甚至是噪声。此时,我们希望回归模型中的优化问题
{ minimize 1 2 ∥ F ( w ; X ) − y ∥ 2 2 s.t. w ∈ R p \begin{cases} \text{minimize}\quad\frac{1}{2}\lVert\boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})-\boldsymbol{y}\rVert_2^2\\ \text{s.t.}\quad\quad\quad\quad\boldsymbol{w}\in\text{R}^{p} \end{cases} {minimize21∥F(w;X)−y∥22s.t.w∈Rp
其中, p ≥ n p\geq n p≥n,的最优解 w 0 \boldsymbol{w}_0 w0是稀疏的: w 0 \boldsymbol{w}_0 w0中对应冗余特征项的元素为0,即过滤掉那些噪声的影响。为此,需要在上述无约束优化问题中添加一个约束条件: w \boldsymbol{w} w所含非零元素最少(但并非全为零)。即
{ minimize 1 2 ∥ F ( w ; X ) − y ∥ 2 2 s.t. w 非零元素个数尽可能少 , w ∈ R p \begin{cases} \text{minimize}\quad\frac{1}{2}\lVert\boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})-\boldsymbol{y}\rVert_2^2\\ \text{s.t.}\quad\quad\quad\quad\boldsymbol{w}\text{非零元素个数尽可能少},\boldsymbol{w}\in\text{R}^{p} \end{cases} {minimize21∥F(w;X)−y∥22s.t.w非零元素个数尽可能少,w∈Rp
用度量向量“稀疏性”的伪范数 L 0 L_0 L0,
∥ x ∥ 0 = ∑ i = 1 n { 1 , x i ≠ 0 0 , x i = 0 } . \lVert\boldsymbol{x}\rVert_0=\sum_{i=1}^n\left\{\begin{array}{ll} 1,&x_i\neq0\\ 0,&x_i=0\end{array}\right\}. ∥x∥0=i=1∑n{1,0,xi=0xi=0}.
则上述优化问题等价第表示为:
{ minimize ∥ w ∥ 0 s.t. F ( w ; X ) = y . \begin{cases} \text{minimize}\quad\lVert\boldsymbol{w}\rVert_0\\ \text{s.t.}\quad\quad\quad\quad\boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})=\boldsymbol{y} \end{cases}. {minimize∥w∥0s.t.F(w;X)=y.
由于 ∥ ⋅ ∥ 0 \Vert\cdot\rVert_0 ∥⋅∥0非连续函数,故常用的优化问题解法很难解决上述问题。可以证明, L 1 L_1 L1范数 ∥ ⋅ ∥ 1 \Vert\cdot\rVert_1 ∥⋅∥1也可用于度量向量的稀疏性。即可用
{ minimize ∥ w ∥ 1 s.t. F ( w ; X ) = y \begin{cases} \text{minimize}\quad\lVert\boldsymbol{w}\rVert_1\\ \text{s.t.}\quad\quad\quad\quad\boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})=\boldsymbol{y} \end{cases} {minimize∥w∥1s.t.F(w;X)=y
得到回归模型的稀疏解。这是一个有等式约束的优化问题,可以通过将约束条件作为罚项,求解无约束优化问题
{ minimize ∥ w ∥ 1 + σ 1 2 ∥ F ( w ; X ) − y ∥ 2 2 s.t. w ∈ R p \begin{cases} \text{minimize}\quad\lVert\boldsymbol{w}\rVert_1+\sigma\frac{1}{2}\lVert\boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})-\boldsymbol{y}\rVert_2^2\\ \text{s.t.}\quad\quad\quad\quad\boldsymbol{w}\in\text{R}^p \end{cases} {minimize∥w∥1+σ21∥F(w;X)−y∥22s.t.w∈Rp
完成。这称为Lasso回归问题,若令 α = 1 σ \alpha=\frac{1}{\sigma} α=σ1,上述问题的目标函数等价于
obj ( w , α ) = 1 2 ∥ F ( w ; X ) − y ∥ 2 2 + α ∥ w ∥ 1 . \text{obj}(\boldsymbol{w},\alpha)=\frac{1}{2}\lVert \boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})-\boldsymbol{y}\rVert_2^2+\alpha\lVert\boldsymbol{w}\rVert_1. obj(w,α)=21∥F(w;X)−y∥22+α∥w∥1.
σ → ∞ \sigma\rightarrow\infty σ→∞当且仅当 α → 0 \alpha\rightarrow0 α→0。而当 α = 0 \alpha=0 α=0时, arg min w ∈ R p obj ( w , 0 ) = arg min w ∈ R p 1 2 ∥ F ( w ; A ) − y ∥ 2 2 \arg\min\limits_{\boldsymbol{w}\in\text{R}^p}\text{obj}(\boldsymbol{w},0)=\arg\min\limits_{\boldsymbol{w}\in\text{R}^p}\frac{1}{2}\lVert F(\boldsymbol{w};\boldsymbol{A})-\boldsymbol{y}\rVert_2^2 argw∈Rpminobj(w,0)=argw∈Rpmin21∥F(w;A)−y∥22。即Lasso回归退化为原回归问题,这显然不符合预期。因此,Lasso回归需要寻求合适的 0 < α < + ∞ 0<\alpha<+\infty 0<α<+∞,使得 w 0 = arg min w ∈ R p obj ( w , α ) \boldsymbol{w}_0=\arg\min\limits_{\boldsymbol{w}\in\text{R}^p}\text{obj}(\boldsymbol{w},\alpha) w0=argw∈Rpminobj(w,α)为稀疏解。以式 1 2 ∥ F ( w ; X ) − y ∥ 2 2 + α ∥ w ∥ 1 \frac{1}{2}\lVert \boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})-\boldsymbol{y}\rVert_2^2+\alpha\lVert\boldsymbol{w}\rVert_1 21∥F(w;X)−y∥22+α∥w∥1为目标函数的优化问题也称为 L 1 L_1 L1范数正则化模型,其中正则化参数 α \alpha α用来控制最优解 w 0 \boldsymbol{w}_0 w0的稀疏程度。当回归函数 F ( w ; X ) \boldsymbol{F}(\boldsymbol{w};\boldsymbol{X}) F(w;X)为线性函数 A w \boldsymbol{Aw} Aw,其中 A = ( X ⊤ , 1 ) \boldsymbol{A}=(\boldsymbol{X}^\top, \boldsymbol{1}) A=(X⊤,1),此时 p = n + 1 p=n+1 p=n+1,称为线性Lasso回归。而当 F ( w ; X ) = 1 1 + e − A w \boldsymbol{F}(\boldsymbol{w};\boldsymbol{X})=\frac{1}{1+e^{-\boldsymbol{Aw}}} F(w;X)=1+e−Aw1时,称为逻辑Lasso回归。
下列代码实现线性Lasso回归模型。
import numpy as np #导入numpy
class LineLassoModel(LineModel): #线性lasso模型def obj(self,w):h = lambda x: np.linalg.norm(x, ord = 1)return super().obj(w) + self.alpha * h(w)
class LassoRegressor(Regression, LineLassoModel): #线性Lasso回归预测器def __init__(self, alpha = 1.0):self.alpha = alphaself.tagVal = identity
程序中,
- 第2~5行将LineLassoModel定义为LineModel(见博文《最优化方法Python计算:无约束优化应用——线性回归模型》)的子类,其中的第3~5行重载目标函数obj。第4行定义 L 1 L_1 L1范数函数 h ( x ) = ∥ x ∥ 1 h(\boldsymbol{x})=\lVert\boldsymbol{x}\rVert_1 h(x)=∥x∥1。注意,此处调用Numpy的norm函数,传递ord参数为1,计算一阶范数。
- 第6~9行将线性Lasso回归预测器类LassoRegressor定义为Regression(见博文《最优化方法Python计算:无约束优化应用——线性回归预测器》)与LineLassoModel的子类。其中,第7~9行定义其构造函数__init__,第8行设置正则参数alpha,缺省值为1.0。第9行将标签值函数tagVal设置为恒等函数identity,已适用于回归预测。
综合案例
文件forestfires.csv(来自UC Irvine Machine Learning Repository)包含517条葡萄牙东北部地区蒙特西尼奥公园森林火灾的烧毁面积的数据记录。
X | Y | month | day | FFMC | DMC | DC | ISI | temp | RH | wind | rain | area |
---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 5 | mar | fri | 86.2 | 26.2 | 94.3 | 5.1 | 8.2 | 51 | 6.7 | 0 | 0 |
⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ |
1 | 4 | sep | tue | 91 | 129.5 | 692.6 | 7 | 21.7 | 38 | 2.2 | 0 | 0.43 |
⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ |
7 | 6 | jul | tue | 93.1 | 180.4 | 430.8 | 11 | 26.9 | 28 | 5.4 | 0 | 86.45 |
⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ |
4 | 4 | aug | wed | 95.1 | 141.3 | 605.8 | 17.7 | 28.7 | 33 | 4 | 0 | 0 |
⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ | ⋯ \cdots ⋯ |
6 | 3 | nov | tue | 79.5 | 3 | 106.7 | 1.1 | 11.8 | 31 | 4.5 | 0 | 0 |
其中:
- X - 蒙特西尼奥公园地图内的x轴空间坐标:1到9
- Y - 蒙特西尼奥公园地图内的y轴空间坐标:2到9
- month - 月份-一年中的月份:“jan”到“dec”
- day - 一周中的某一天:“mon”到“sun”
- FFMC - 来自快速预警系统的FFMC指数:18.7至96.20
- DMC - 来自快速预警系统的DMC指数:1.1至291.3
- DC - 来自快速预警系统的DC指数:7.9至860.6
- ISI - 来自快速预警系统的ISI指数:0.0至56.10
- temp - 摄氏度:2.2至33.30
- RH - 相对湿度%{}:15.0至100
- wind - 风速(公里/小时):0.40至9.40
- rain - 室外雨,以毫米/平方米为单位:0.0至6.4
- area - 森林被烧毁面积(以公顷为单位):0.00至1090.84
以森林烧毁面积area作为标签,其余12个数据项作为样本特征,我们用线性回归来创建、训练和测试模型。下列代码完成计算
import numpy as np
data = np.loadtxt('forestfires.csv', delimiter=',', #读取数据文件dtype=str, skiprows=1) #跳过表头
X = np.array(data) #转换为数组
Y = X[:, 12].astype(float) #读取标签数据
X=np.delete(X, [12], axis = 1)
X1 = X[:, 2] #读取月份列
X1 = np.array([0 if x == 'jan' else #串转换为数值1 if x == 'feb' else2 if x == 'mar' else3 if x == 'apr' else4 if x == 'may' else5 if x == 'jun' else6 if x == 'jul' else7 if x == 'aug' else8 if x == 'sept' else9 if x == 'oct' else10 if x == 'nov' else11 for x in X1])
X[:, 2] = X1 #修改月份列
X1 = X[:, 3] #读取星期列
X1 = np.array([0 if x == 'mon' else #串转换为数值1 if x == 'tue' else2 if x == 'wed' else3 if x == 'thu' else4 if x == 'fri' else5 if x == 'sat' else6 for x in X1])
X[:, 3] = X1 #修改季节列
X = X.astype(float) #所有数据转换为实数型
m, n = X.shape #读取样本个数
print('共有%d个数据样本'%m)
a = np.arange(m) #下标集
print('随机抽取%d个样本作为训练数据。'%(m // 2))
np.random.seed(7503) #随机种子
train = np.random.choice(a, m // 2, replace = False) #随机取得一半作为训练集下标
test = np.setdiff1d(a, train) #测试集下标
print('LINE REGRESSION:')
forestfires = LinearRegressor() #构造线性回归模型
forestfires.fit(X[train], Y[train]) #训练模型
coef, inte=forestfires.coef_inte()
print('系数:', coef)
print('截距:%.4f'%inte)
score=forestfires.score(X[test], Y[test]) #测试模型
print('对其余%d个样本数据测试,评估分:%.4f'%(m - m // 2, score))
程序的2~4行读取文件,转换为数组X。第5~6行分离出标签数据Y。第7~20行将month列的字串行转换为数值。第21~29行将day列的字串转换为数值。第30行将特征数据转换为浮点型。第31~37行从数据集的下标中随机选取一半作为训练集下标train,其余的作为测试集下标test。第39行创建线性回归模型LinearRegressor(见《最优化方法Python计算:无约束优化应用——线性回归预测器》)类对象forestfires。第40行调用forestfires的fit函数用X[train]和Y[train]训练forestfires。第44行调用forestfires的score函数用X[test]和Y[test]测试训练好的forestfires。运行程序,输出
共有517个数据样本
随机抽取258个样本作为训练数据。
LINE REGRESSION:
训练中...,稍候
20次迭代后完成训练。
系数: [ 1.2764 -0.2223 4.3442 1.5441 0.2316 0.1098 -0.0589 -1.2177 1.0874-0.2069 1.4681 -9.0991]
截距:-36.2409
对其余259个样本数据测试,评估分:0.0248
意为用线性回归模型计算本问题,经20次迭代训练所得模型的测试评分为0.0248>0,属正常回归。接下来,我们对相同的训练集和测试集训练和测试一个Lasso回归模型。
……
print('LASSO REGRESSION:')
forestfires=LassoRegressor(alpha=0.035) #构造Lasso回归模型
forestfires.fit(X[train], Y[train]) #训练模型
coef, inte=forestfires.coef_inte()
print('系数:',coef)
print('截距:%.4f'%inte)
score=forestfires.score(X[test], Y[test]) #测试模型
print('对其余%d个样本数据测试,评估分:%.4f'%(m - m // 2, score))
紧接前一程序,本程序第1行的省略号即表示前一程序的代码。第2行创建Lasso回归模型LassoRegressor(程序8.3第2行导入)类对象forestfires。第3行调用forestfires的fit函数用X[train]和Y[train]训练forestfires,注意传递给表示正则化参数 α \alpha α的参数alpha的值为0.035。第7行调用forestfires的score函数用X[test]和Y[test]测试forestfires。运行程序,输出
……
LASSO REGRESSION:
训练中...,稍候
39次迭代后完成训练。
系数: [ 6.9598e-03 9.8288e-11 2.5677e-02 8.2371e-03 -9.7036e-09 1.9184e-02-2.4566e-02 -1.6390e-02 1.6269e-02 -2.0274e-02 5.5864e-03 -1.1389e-08-5.0886e-04]
截距:-0.5551
对其余259个样本数据测试,评估分:0.0260
所得模型的评分与线性回归模型的相差无几。现在我们观察Lasso回归模型训练所得的拟合函数系数,其中有若干个的绝对值小于 1 0 − 4 10^{-4} 10−4,这意味着这些系数对应的特征数据项对标签数据并无贡献。删掉这些数据项,用筛选后的数据集再次训练、测试线性回归模型。
……
a=np.where(np.abs(coef)<1e-4)[0] #绝对值小于1/10000的系数下标
print('LASSO回归绝对值小于1/10000的系数下标:%s'%a)
X = np.delete(X,a,axis = 1) #删除对应特征数据列
print('LINE REGRESSION:')
forestfires = LinearRegressor() #创建线性回归模型
forestfires.fit(X[train], Y[train]) #训练模型
coef, inte = forestfires.coef_inte()
print('系数:%s'%coef)
print('截距:%.4f'%inte)
score=forestfires.score(X[test], Y[test]) #测试模型
print('对其余%d个样本数据测试,评估分:%.4f'%(m - m // 2, score))
紧接前一程序,本程序第1行的省略号表示前两个程序的代码。第2行调用numpy的where函数计算Lasso回归模型的系数数组coef中绝对值小于 1 0 − 4 10^{-4} 10−4的元素下标,赋予a。第4行调用numpy的delete函数删除特征数据集X中对应a的数据列。第6行创建线性回归模型类对象forestfires。第7行训练forestfires。第11行测试forestfires。运行程序,输出
……
LASSO回归绝对值小于1/10000的系数下标:[ 1 4 11]
LINE REGRESSION:
训练中...,稍候
18次迭代后完成训练。
系数:[ 1.1912 4.4249 1.5407 0.115 -0.06 -1.08 1.0462 -0.24 1.2875]
截距:-14.7009
对其余259个样本数据测试,评估分:0.0302
这意味着特征数据项Y(地图的y坐标)、预警系统的FFMC指数及下雨量rain对应的Lasso回归系数接近零。删除X的这3项数据后,用X[train]和Y[train]经18次迭代训练所得模型对X[test]和Y[test]作测试的评分为0.0302,比原数据(未删除Y、FFMC、rain数据)迭代20次所得模型测试评分0.0248还略有改善。
相关文章:
最优化方法Python计算:有约束优化应用——线性Lasso回归预测器
实际应用中,特征维度 n n n通常远大于样本容量 m m m( n ≪ m n\ll m n≪m),这种高维小样本场景下特征数据可能含有对标签数据 y i y_i yi的取值不必要的成分,甚至是噪声。此时,我们希望回归模型中的优化…...
基础算法 —— 二分算法 【复习总结】
1. 简介 1.1 原理 二分算法,顾名思义,关键在于二分,当我们求解的目标具有二段性时,我们就可以使用二分算法: 先根据待查找区间中点位置,判断结果会在左侧还是右侧,接下来,舍弃一半…...
计算机网络常识:缓存、长短连接 网络初探、URL、客户端与服务端、域名操作 tcp 三次握手 四次挥手
缓存: 缓存是对cpu,内存的一个节约:节约的是网络带宽资源 节约服务器的性能 资源的每次下载和请求都会造成服务器的一个压力 减少网络对资源拉取的延迟 这个就是浏览器缓存的一个好处 表示这个html页面的返回是不要缓存的 忽略缓存 需要每次…...
OpenHarmony平台驱动开发(九),MIPI DSI
OpenHarmony平台驱动开发(九) MIPI DSI 概述 功能简介 DSI(Display Serial Interface)是由移动行业处理器接口联盟(Mobile Industry Processor Interface (MIPI) Alliance)制定的规范,旨在降…...
经济体制1
一.计划经济体制与市场经济体制 1.计划经济又称指令型经济,是对生产和资源分配以及产品消费事先进行计划的经济体制。 市场经济体制是指依靠市场手段对资源进行配置的经济体制 注意: 计划与市场都是调节经济的手段,都属于资源配…...
Spring AI 入门(持续更新)
介绍 Spring AI 是 Spring 项目中一个面向 AI 应用的模块,旨在通过集成开源框架、提供标准化的工具和便捷的开发体验,加速 AI 应用程序的构建和部署。 依赖 <!-- 基于 WebFlux 的响应式 SSE 传输 --> <dependency><groupId>org.spr…...
[ctfshow web入门] web58
信息收集 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }这麽简单? 解题 好吧,还是我想得太简单了 把system禁用了。不是参数过滤,而是直接禁用,不管是间接还是直接调用system都不行&#x…...
Python量化交易Backtrader技术指标的实现
一、Backtrader技术指标概览 (一)Backtrader内置指标的优势 Backtrader内置的技术指标具有以下优势: 多样性:涵盖了常见的移动平均线、相对强弱指数(RSI)、布林带等多种指标,满足了不同交易者的需求。易用性:通过简单的函数调用即可在策略中添加和使用这些指标,无需…...
蓝桥杯第十六届c组c++题目及个人理解
本篇文章只是部分题目的理解,代码和思路仅供参考,切勿当成正确答案,欢迎各位小伙伴在评论区与博主交流! 题目:2025 题目解析 核心提取 要求的数中至少有1个0、2个2、1个5 代码展示 #include<iostream> #incl…...
ARM 芯片上移植 Ubuntu 操作系统详细步骤
一、准备工作 (一)硬件准备 ARM 开发板:确保 ARM 开发板的型号与 Ubuntu 官方支持的 ARM 架构兼容,常见的 ARM 架构有 ARMv7、ARMv8 等。例如树莓派系列开发板,广泛用于 ARM 系统移植,其采用 ARM 架构。存…...
能耗优化新引擎:EIOT平台助力企业降本增效
安科瑞顾强 数字化转型的背景下,能源管理正加速向智能化、远程化方向演进。安科瑞电气推出的EIOT托管平台及ADW300系列4G无线计量仪表,通过云端技术与无线通信的深度融合,为用户打造了高效、便捷的远程能源监测与管理体系,助力企…...
录播课视觉包装与转化率提升指南
1. 封面设计黄金法则 1.1 程序员审美三要素 极客风配色方案 主色:深空灰(#2D2D2D) 代码蓝(#007BFF) 点缀色:终端绿(#28A745) 警告黄(#FFC107) 信息密度控制 核心标语≤9字(如:"3天攻克分布式事务") 技…...
Solidity语言基础:区块链智能合约开发入门指南
一、Solidity概述 Solidity是以太坊生态系统中最重要的智能合约编程语言,由Gavin Wood于2014年提出。作为面向合约的高级语言,它结合了JavaScript、Python和C的语法特点,专为在以太坊虚拟机(EVM)上运行而设计。 核心…...
QMK开发环境搭建指南:Eclipse和VS Code详解
QMK开发环境搭建指南:Eclipse和VS Code详解 前言 各位键盘DIY爱好者们,今天跟大家分享如何搭建QMK固件开发环境。无论你是想定制自己的客制化键盘固件,还是对开源键盘固件开发感兴趣,这篇教程都能帮你搞定开发环境配置。本文将详…...
Python pandas 向excel追加数据,不覆盖之前的数据
最近突然看了一下pandas向excel追加数据的方法,发现有很多人出了一些馊主意; 比如用concat,append等方法,这种方法的会先将旧数据df_1读取到内存,再把新数据df_2与旧的合并,形成df_new,再覆盖写入,消耗和速…...
spring中RequestContextHolder
1、在 Spring 框架中, RequestAttributes attributes RequestContextHolder.getRequestAttributes(); 是获取当前请求上下文的核心方法。以下是其关键要点及注意事项: 一、核心机制 作用原理 通过 ThreadLocal 存储当前线程的请求属性对象 …...
Kotlin 遍历
在 Kotlin 中,遍历(迭代)是操作集合、数组、范围(Range)等数据结构的常见需求。Kotlin 提供了多种遍历方式,语法简洁且功能强大。以下是不同场景下的遍历方法总结,附代码示例: 一、…...
Ubuntu Linux系统配置账号无密码sudo
在Linux系统中,配置无密码sudo可以通过修改sudoers文件来实现。以下是具体的配置步骤 一、编辑sudoers文件 输入sudo visudo命令来编辑sudo的配置文件。visudo是一个专门用于编辑sudoers文件的命令,它会在保存前检查语法错误,从而防止可能的…...
C# NX二次开发:判断两个体是否干涉和获取系统日志的UFUN函数
大家好,今天要讲关于如何判断两个体是否干涉和获取系统日志的UFUN函数。 (1)UF_MODL_check_interference:这个函数的定义为根据单个目标体检查每个指定的工具体是否有干扰。 Defined in: uf_modl.h Overview Checks each sp…...
若依项目图片显示问题
图片显示异常问题 路径配置问题:前端图片路径配置错误,最初使用相对路径且未从根目录开始解析,导致浏览器根据当前页面 URL 解析路径出错。例如在用户信息展示页面,若当前页面 URL 为http://localhost:8088/user/profileÿ…...
线索二叉树
一 概念 线索二叉树(Threaded Binary Tree)是一种对二叉树的优化结构,主要解决传统二叉树遍历时需要借助栈或递归(额外空间开销)的问题。通过利用节点中的空指针(nullptr)存储遍历过程中的前驱…...
Git查看某个commit的改动
在Git中查看特定commit的改动有多种方法,下面是几种常用的命令行方式: 1. 使用 git show 命令 这是最常用的方法,直接显示某个commit的详细信息和改动: git show <commit-hash> 例如: git show abc1234 也可…...
es 里的Filesystem Cache 理解
文章目录 背景问题1,Filesystem Cache 里放的是啥问题2,哪些查询它们会受益于文件系统缓存 问题3 查询分析 背景 对于es 优化来说常常看到会有一条结论给,给 JVM Heap 最多不超过物理内存的 50%,且不要超过 31GB(避免…...
2025年3月电子学会等级考试五级题——4、收费站在哪里
文章目录 题目代码公式小结 题目 4、收费站在哪里 在一条高速公路上,如果已知 n 座收费站的位置 x1,x2,… ,xn(不妨假设 0x1 ≤ x2 ≤ … ≤ xn),就很容易算出一共有 n(n-1)/2 个距离的值。而比较困难的问题是,在收集…...
深入探索 JavaScript 中的模块对象
引言 在现代 JavaScript 开发中,模块化编程是一项至关重要的技术。它允许开发者将代码拆分成多个独立的模块,每个模块专注于单一功能,从而提高代码的可维护性、可测试性和复用性。而模块对象则是模块化编程中的核心概念之一,它为…...
R1-Searcher:用强化学习解锁大语言模型检索新能力!
R1-Searcher:用强化学习解锁大语言模型检索新能力! 大语言模型(LLMs)发展迅猛,却常因依赖内部知识而在复杂问题上“栽跟头”。今天解读的论文提出R1-Searcher框架,通过强化学习提升LLMs检索能力。它表现超…...
LangChain框架-PromptTemplate 详解
摘要 本文聚焦于 LangChain 框架中PromptTemplate提示词模板模块的深度解析,主要参考langchain_core.prompts源码模块与官方文档。系统梳理 LangChain 对提示词模板的封装逻辑与设计思路,旨在帮助读者构建全面、深入的知识体系,为高效运用LangChain 框架的提示词模板开发应用…...
【Java ee 初阶】文件IO和操作(下)
书接上文 文本操作的方法 String[] list() 返回 File 对象代表的目录下的所有文件名 File[] listFiles() 返回 File 对象代表的目录下的所有文件,以 File 对象表示 此处是针对File对象打印得到的效果(调用了File的toString) boolean …...
Android7 Input(六)InputChannel
概述: 本文讲述Android Input输入框架中 InputChannel的功能。从前面的讲述,我们知道input系统服务最终将输入事件写入了InputChannel,而input属于system_server进程,App属于另外一个进程,当Input系统服务想要把事件传递给App进行…...
【Java ee初阶】初始网络
一、IP地址 概念 IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。 就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 格式 IP…...
LabVIEW 2019 与 NI VISA 20.0 安装及报错处理
在使用 Windows 11 操作系统的电脑上,同时安装了 LabVIEW 2019 32 位和 64 位版本的软件。此前安装的 NI VISA 2024 Q1 版,该版本与 LabVIEW 2019 32 位和 64 位不兼容,之后重新安装了 NI VISA 20.0。从说明书来看,NI VISA 20.0 …...
http协议理解
文章目录 http协议理解基本概念HTTP版本演变版本编年史版本对比未来趋势 HTTP请求/响应结构请求报文响应报文HTTP方法分类对比方法选择原则必须遵守的约束 常见状态码HTTP头部字段HTTPSHTTPS 核心功能说明HTTPS 如何工作? HTTP特点补充知识点启用HTTP/2Nginx 中配置…...
typecho中的Widget设计文档
组成系统的最基本元素 什么是Widget Widget是组成Typecho的最基本元素,除了已经抽象出来的类库外,其它几乎所有的功能都会通过Widget来完成。在实践中我们发现,在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的,…...
使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
文章目录 一、安装ESPHome二、配置ESP32-C3控制灯1.主配置文件esp32c3-luat.yaml2.基础通用配置base.yaml3.密码文件secret.yaml4.围栏灯four_light.yaml5.彩灯rgb_light.yaml6.左右柱灯left_right_light.yaml 三、安装固件四、HomeAssistant配置ESPHome1.直接访问2.配置ESPHom…...
基于STM32、HAL库的CH340N USB转UART收发器 驱动程序设计
一、简介: CH340N是南京沁恒电子生产的一款USB转串口芯片,具有以下特点: 支持USB 2.0全速(12Mbps) 内置时钟,无需外部晶振 支持5V和3.3V电源电压 提供常用的MODEM联络信号 内置上电复位电路 支持Windows/Linux/Mac OSX等多平台驱动 体积小,SOP-8封装 二、硬件接口: CH…...
Spring Boot Controller 如何处理HTTP请求体
Spring Boot (通过Spring MVC) 提供了强大的机制来处理不同 Content-Type 的HTTP请求体。这主要依赖于 HttpMessageConverter 接口的各种实现,它们能够自动将请求体内容转换成Java方法参数。 一、核心机制:HttpMessageConverter Spring MVC会根据…...
【deepseek教学应用】001:deepseek如何撰写教案并自动实现word排版
本文讲述利用deepseek如何撰写教案并自动实现word高效完美排版。 文章目录 一、访问deepseek官网二、输入教案关键词三、格式转换四、word进一步排版 一、访问deepseek官网 官网:https://www.deepseek.com/ 进入主页后,点击【开始对话】,如…...
【Spring Boot 多模块项目】@MapperScan失效、MapperScannerConfigurer 报错终极解决方案
在使用 Spring Boot 构建多模块项目,集成 MyBatis-Plus 时,很多开发者会遇到类似如下启动报错: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…...
vue 中如何使用region?
vue 中如何使用region? 在 Vue 文件中,你可以使用 //#region 和 //#endregion 注释来创建可折叠的代码区块(类似于 C# 的 region)。这可以显著提高大型 Vue 组件的可读性。 1. 基本用法 在 <script> 部分使用 <script&…...
Spring Boot 启动原理的核心机制
一、核心启动流程概览 Spring Boot 的启动流程可概括为 7 个关键阶段: 1. 加载启动类 (Main Class) 2. 初始化 SpringApplication 实例 3. 加载配置 & 准备环境 (Environment) 4. 创建 ApplicationContext(容器) 5. 刷新容器&#…...
【每天学习一点点】使用Python的pathlib模块分割文件路径
使用Python的pathlib模块分割文件路径 pathlib模块(Python 3.4)提供了面向对象的文件系统路径操作方式,比传统的os.path更加直观和易用。以下是使用pathlib分割文件路径的几种方法: 基本路径分割 from pathlib import Path# 创…...
Qt/C++面试【速通笔记八】—Qt的事件处理机制
在Qt中,事件处理机制是应用程序与用户或系统交互的核心。通过事件处理,Qt能够响应用户的输入、窗口的变化、定时器的触发等各种情况。 1. 事件循环(Event Loop) 在Qt应用程序中,事件循环是事件处理机制的基础。事件循…...
uniapp自定义步骤条(可二开进行调试)
前言 有一个业务需求是需要一个步骤条,但是发现开源的都不太合适,所以就自己写了一个。 开始 test.vue <template><view class"authenticateRecordDetails_container"><!-- 进度 --><view class"authenticateSte…...
uniapp|实现多终端聊天对话组件、表情选择、消息发送
基于UniApp框架,实现跨平台多终端适配的聊天对话组件开发、表情选择交互设计及消息发送,支持文本与表情混合渲染。 目录 聊天界面静态组件实现消息列表布局消息气泡双向布局辅助元素定位与样式静态数据模拟与扩展性设计表情选择器静态模块浮层实现符号网格排列多端样式适配方…...
1.3.1 Linux音频框架alsa详细介绍
ALSA作为对旧OSS系统的替代方案,始于1998年。当时OSS还闭源商业化,因此社区开始开发开源的ALSA。经过多年的发展,ALSA成为Linux内核中音频架构的标准。 结构和架构 ALSA由以下几个主要部分组成: 内核模块: 这是ALSA的…...
R 语言机器学习:为遥感数据处理开启新视角
技术点目录 基础理论、机器学习与数据准备建模与空间预测实践案例与项目了解更多 ——————————————————————————————————————————— 前言综述 在当今科技快速发展的时代,遥感技术为生态学研究提供了海量的数据资源…...
深度 |提“智”向新,奔向未来——当前机器人产业观察
机器人踏着“猫步”在T台走秀、进入工厂协助造车,教育、医疗、城市管理等领域都有了机器人的帮助……今天,机器人已得到广泛应用,走进你我的生活。 伴随着技术日新月异,机器人产业加快提“智”向新。特别是今年以来…...
Web开发-JavaEE应用SpringBoot栈ActuatorSwaggerHeapDump提取自动化
知识点: 1、安全开发-JavaEE-常见依赖-Actuator&Swagger 2、安全开发-JavaEE-安全问题-配置安全&接口测试 一、演示案例-WEB开发-JavaEE-监控依赖-SpringBoot&Actuator&配置安全 SpringBoot Actuator模块提供了生产级别的功能,比如健康…...
AI Agent开发之门:微软官方课程全面解析
AI Agent开发之门:微软官方课程全面解析 引言项目概览10 节核心课程内容详解1. AI 代理简介及应用场景2. 探索 AI Agentic 框架3. 理解 AI Agentic 设计模式4. 工具使用设计模式5. Agentic RAG(检索增强生成)6. 构建可信赖的 AI Agents7. 规划…...
Unity-Shader详解-其五
关于Unity的Shader部分的基础知识其实已经讲解得差不多了,今天我们来一些实例分享: 溶解 效果如下: 代码如下: Shader "Chapter8/chapter8_1" {Properties{// 定义属性[NoScaleOffset]_Albedo("Albedo", 2…...