监督学习单模型—线性模型—LASSO回归、Ridge回归
目标变量通常有很多影响因素,通过各类影响因素构建对目标变量的回归模型,能够实现对目标的预测。但根据稀疏性的假设,即使影响一个变量的因素有很多,其关键因素永远只会是少数。在这种情况下,还用传统的线性回归方法来处理的话,效果可能并不理想。针对这种情况,下面介绍两种线性回归模型的拓展模型—— LASSO 回归和 Ridge 回归。
一、LASSO回归
1. 原理推导
LASSO(the least absolute shrinkage and election operator)回归模型,可译为最小绝对收缩和选择算子,已知线性回归模型的最优参数估计表达式为:
ω∧✶ = (XTX)-1XTy【式 1】
具体解析见:【监督学习单模型—线性模型—线性回归】
假设训练样本量为 m ,样本特征数为 n ,按照惯例,有 m > n ,即样本量大于特征数。当 m > n 时,若 rank(X) = n ,即 X 为满秩矩阵,则 XTX 是可逆矩阵,式 1 是可以直接求解的,但如果 m < n ,即特征数大于样本量时,rank(X) < n ,矩阵 X 不满秩,XTX 不可逆,这时候式 1 中的参数 ω∧✶ 是不可估计的。
对于这个问题,LASSO 回归给出的做法是在线性回归的损失函数后面加一个 1-范数项,也叫正则化项,即:L(ω) = (y-ωX)2 + λ||ω||1【式 2】 ,其中 |ω||1 即为矩阵的 1-范数,λ 为 1-范数项的系数。
范数(norm)的概念:在数学分析中,范数可视为一种长度或者距离概念的函数。针对向量或者矩阵而言,常用的范数包括 0-范数、1-范数、2-范数和 p-范数等。矩阵的 0-范数为矩阵中非零元素的个数,矩阵的 1-范数可定义为矩阵中所有元素的绝对值之和,而矩阵的 2-范数是指矩阵中各元素的平方和再求均方根的结果。
从机器学习的角度来看,式 2 相当于给最初的线性回归损失函数添加了一个 L1 正则化项,λ 也叫正则化系数。从防止模型过拟合的角度而言,正则化项相当于对目标参数施加了一个惩罚项,使得模型不能过于复杂。在优化过程中,正则化项的存在能够使那些不重要的特征系数逐渐为零,从而保留关键特征,使得模型简化。所以,式 2 等价于:arg min (y-ωX)2【式 3】s.t. Σ|ωij| < s【式 4】,其中式 3 即为线性回归目标函数,式 4 为其约束条件,即权重系数矩阵所有元素绝对值之和小于一个指定常数 s ,s 取值越小,特征参数中被压缩到零的特征就会越多。
下图是 LASSO 回归的参数估计图:
如上图所示,横纵坐标分别为两个回归参数 ω1 和 ω2 ,菱形线框表示 LASSO 回归的 L1 正则化约束:|ω1| + |ω2| ≤ s ,椭圆形区域为回归参数的求解空间。可以看到,LASSO 回归的参数解空间与纵坐标轴相交,此时意味着参数 ω1 被压缩为 0 。
如何针对式 2 :L(ω) = (y-ωX)2 + λ||ω||1 的 LASSO 回归目标函数进行参数优化?即如何求 LASSO 回归的最优解问题。L1 正则化项的存在使得式 2 是连续不可导的函数,直接使用梯度下降法无法进行寻优,一种替代的 LASSO 回归寻优方法称为坐标下降法(coordinate descent method)。坐标下降法是一种迭代算法,相较于梯度下降法通过损失函数的负梯度来确定下降方向,坐标下降法是在当前坐标轴上搜索损失函数的最小值,无需计算函数梯度。
以二维空间为例,假设 LASSO 回归损失函数为凸函数 L(x,y) ,给定初始点 x0 ,可以找到使得 L(y) 达到最小的 y1 ,然后固定 y1 ,再找到使得 L(x) 达到最小的 x2 。这样反复迭代之后,根据凸函数的性质,一定能够找到使得 L(x,y) 最小的点 (xk,yk) 。坐标下降法的寻优过程如下图所示:
2. 代码实现
数据集:葡萄酒质量(类型:txt 文件)
-
输入变量:物理化学性质(例如,pH 值、酒精含量、酸度)。
-
输出变量:感官评分(质量),这是有序的类别。
“fixed acidity”;“volatile acidity”;“citric acid”;“residual sugar”;“chlorides”;“free sulfur dioxide”;“total sulfur dioxide”;“density”;“pH”;“sulphates”;“alcohol”;“quality” |
---|
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5 |
7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5 |
7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8;5 |
11.2;0.28;0.56;1.9;0.075;17;60;0.998;3.16;0.58;9.8;6 |
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5 |
7.4;0.66;0;1.8;0.075;13;40;0.9978;3.51;0.56;9.4;5 |
7.9;0.6;0.06;1.6;0.069;15;59;0.9964;3.3;0.46;9.4;5 |
7.3;0.65;0;1.2;0.065;15;21;0.9946;3.39;0.47;10;7 |
7.8;0.58;0.02;2;0.073;9;18;0.9968;3.36;0.57;9.5;7 |
7.5;0.5;0.36;6.1;0.071;17;102;0.9978;3.35;0.8;10.5;5 |
6.7;0.58;0.08;1.8;0.097;15;65;0.9959;3.28;0.54;9.2;5 |
7.5;0.5;0.36;6.1;0.071;17;102;0.9978;3.35;0.8;10.5;5 |
1)基于 Numpy 的代码实现
【代码实现】:
import numpy as np# 定义符号函数
def sign(x):if x > 0:return 1elif x < 0:return -1else:return 0
# 利用Numpy对符号函数进行向量化
vec_sign = np.vectorize(sign)# 定义LASSO回归损失函数
def l1_loss(X, y, w, b, alpha):# 训练样本数num_train = X.shape[0]# 训练特征数# num_feature = X.shape[1]# 回归模型预测输出y_hat = np.dot(X, w) + b# L1损失函数loss = np.sum((y_hat - y) ** 2) / num_train + np.sum(alpha * abs(w))# 基于向量化符号函数的参数梯度计算dw = np.dot(X.T, (y_hat - y)) / num_train + alpha * vec_sign(w)db = np.sum((y_hat - y)) / num_trainreturn y_hat, loss, dw, db# 初始化模型参数
def initialize_params(dims):# 将权重向量初始化为零向量w = np.zeros((dims, 1))# 将偏置参数初始化为0b = 0return w, b# 定义LASSO回归模型的训练过程
def lasso_train(X, y, learning_rate=0.01, epochs=1000):# 记录训练损失的空列表loss_his = []# 初始化模型参数w, b = initialize_params(X.shape[1])# 迭代训练for i in range(1, epochs):# 计算当前迭代的预测值、损失和梯度alpha = 0.1y_hat, loss, dw, db = l1_loss(X, y, w, b, alpha)# 基于梯度下降法的参数更新w += -learning_rate * dwb += -learning_rate * db# 记录当前迭代的损失loss_his.append(loss)# 每50次迭代打印当前损失信息# if i % 50 == 0:# print('epoch %d loss %f' % (i, loss))# 将迭代优化后的参数保存到字典中params = {'w':w, 'b':b}return loss_his, params# 导入数据集 (12,12)
data = np.genfromtxt('D:\PycharmProjects\wine_lasso_quality.txt', delimiter=';')
# 选择特征与标签
num_row = data.shape[0]
num_column = data.shape[1]
x = data[1:, 0:num_column-1]
y = data[1:, num_column-1].reshape(-1, 1)
# 加一列
X = np.column_stack((np.ones((num_row-1, 1)), x))
# 划分数据集,使用30%的数据作为测试集
offset = int(X.shape[0] * 0.7)
# 训练集 (8,12) & (8,1)
X_train, y_train = X[:offset], y[:offset]
# 测试集 (4,12) & (4,1)
X_test, y_test = X[offset:], y[offset:]
# 执行训练示例
learning_rate = 0.01
epochs = 100
loss_list, params = lasso_train(X_train, y_train, learning_rate, epochs)
# 获取训练参数
print('训练参数:\n', params)
# 将测试集应用在模型上
y_predict = np.dot(X_test, params['w']) + params['b']
print('测试集训练标签:\n', y_predict)
【结果展示】:
2)基于 Sklearn 的模型实现
【代码实现】:
import numpy as np
from sklearn import linear_model# 导入数据集 (12,12)
data = np.genfromtxt('D:\PycharmProjects\wine_lasso_quality.txt', delimiter=';')
# 选择特征与标签
num_row = data.shape[0]
num_column = data.shape[1]
x = data[1:, 0:num_column-1]
y = data[1:, num_column-1].reshape(-1, 1)
# 加一列
X = np.column_stack((np.ones((num_row-1, 1)), x))
# 划分数据集,使用30%的数据作为测试集
offset = int(X.shape[0] * 0.7)
# 训练集 (8,12) & (8,1)
X_train, y_train = X[:offset], y[:offset]
# 测试集 (4,12) & (4,1)
X_test, y_test = X[offset:], y[offset:]# 创建LASSO回归模型实例
sk_LASSO = linear_model.Lasso(alpha=0.1)
# 对训练集进行拟合
sk_LASSO.fit(X_train, y_train)
# 打印模型相关系数
print('sklearn LASSO intercept:(截距)', sk_LASSO.intercept_)
print('\nsklearn LASSO coefficients:(系数)\n', sk_LASSO.coef_)
print('\nsklearn LASSO number of iterations(迭代次数):', sk_LASSO.n_iter_)
【结果展示】:
从上述结果可以看出,LASSO 回归模型使得大量特征的参数被压缩为 0 。
二、Ridge回归
1. 原理推导
类似于 LASSO 回归模型,Ridge 回归(岭回归)是一种使用 2-范数作为惩罚项改造线性回归损失函数的模型。此时损失函数如式 5 所示:
L(ω) = (y-ωX)2 + λ||ω||2【式 5】
其中 ||ω||2 = λ · Σi=1n ωi2 ,也叫 L2 正则化项,采用 2-范数进行正则化的原理是最小化参数矩阵的每个元素,使其无限接近 0 但又不像 L1 那样等于 0 。
为什么参数矩阵中的每个元素变得很小,就能防止过拟合?下面以深度神经网络为例来说明。在 L2 正则化中,如果正则化系数 λ 取值较大,参数矩阵 ω 中的每个元素都会变小,线性计算,激活函数在此时相对呈线性状态,这样就会降低深度神经网络的复杂性,因而可以防止过拟合,所以式 5 等价于:arg min (y-ωX)2(s.t. Σωij2 < s)【式 6】。
式 6 的第一个公式即为线性回归目标函数,括号里的公式为其约束条件,即权重系数矩阵所有元素平方之和小于指定常数 s 。相应地,式 1 可改写为:ω∧✶ = (XTX + λI)-1XTy【式 7】。
从式 7 可以看到,通过给 XTX 加上一个单位矩阵使其变成非奇异矩阵并可以进行求逆运算,从而求解 Ridge 回归。下图是 Ridge 回归的参数估计图:
如上图所示,横纵坐标分别为两个回归参数 ω1 和 ω2 ,圆形区域表示 Ridge 回归的 L2 正则化约束:ω12 + ω22 ≤ s ,椭圆形区域为回归参数的求解空间。由此可见,LASSO 回归的参数解空间与纵坐标轴相交,而 Ridge 回归参数只是接近 0 但不等于 0 。
Ridge 回归参数求解要比 LASSO 回归相对容易一些,一方面,我们可以直接基于式 7 的矩阵运算进行求解,另一方面,也可以按照线性回归的梯度下降优化方式进行迭代计算。
2. 代码实现
1)基于 Numpy 的代码实现
【代码实现】:
import numpy as np# 定义Ridge回归损失函数
def l2_loss(X, y, w, b, alpha):# 训练样本数num_train = X.shape[0]# 训练特征数# num_feature = X.shape[1]# 回归模型预测输出y_hat = np.dot(X, w) + b# L2损失函数loss = np.sum((y_hat - y) ** 2) / num_train + alpha * (np.sum(np.square(w)))# 参数梯度计算dw = np.dot(X.T, (y_hat - y)) / num_train + 2 * alpha * wdb = np.sum((y_hat - y)) / num_trainreturn y_hat, loss, dw, db# 初始化模型参数
def initialize_params(dims):# 将权重向量初始化为零向量w = np.zeros((dims, 1))# 将偏置参数初始化为0b = 0return w, b# 定义Ridge回归模型的训练过程
def ridge_train(X, y, learning_rate=0.01, epochs=1000):# 记录训练损失的空列表loss_his = []# 初始化模型参数w, b = initialize_params(X.shape[1])# 迭代训练for i in range(1, epochs):# 计算当前迭代的预测值、损失和梯度alpha = 0.1y_hat, loss, dw, db = l2_loss(X, y, w, b, alpha)# 基于梯度下降法的参数更新w += -learning_rate * dwb += -learning_rate * db# 记录当前迭代的损失loss_his.append(loss)# 每50次迭代打印当前损失信息# if i % 50 == 0:# print('epoch %d loss %f' % (i, loss))# 将迭代优化后的参数保存到字典中params = {'w':w, 'b':b}return loss_his, params# 导入数据集 (12,12)
data = np.genfromtxt('D:\PycharmProjects\wine_lasso_quality.txt', delimiter=';')
# 选择特征与标签
num_row = data.shape[0]
num_column = data.shape[1]
x = data[1:, 0:num_column-1]
y = data[1:, num_column-1].reshape(-1, 1)
# 加一列
X = np.column_stack((np.ones((num_row-1, 1)), x))
# 划分数据集,使用30%的数据作为测试集
offset = int(X.shape[0] * 0.7)
# 训练集 (8,12) & (8,1)
X_train, y_train = X[:offset], y[:offset]
# 测试集 (4,12) & (4,1)
X_test, y_test = X[offset:], y[offset:]
# 执行训练示例
learning_rate = 0.01
epochs = 100
loss_list, params = ridge_train(X_train, y_train, learning_rate, epochs)
# 获取训练参数
print('训练参数:\n', params)
# 将测试集应用在模型上
y_predict = np.dot(X_test, params['w']) + params['b']
print('测试集训练标签:\n', y_predict)
【结果展示】:
2)基于 Sklearn 的模型实现
【代码实现】:
import numpy as np
from sklearn.linear_model import Ridge# 导入数据集 (12,12)
data = np.genfromtxt('D:\PycharmProjects\wine_lasso_quality.txt', delimiter=';')
# 选择特征与标签
num_row = data.shape[0]
num_column = data.shape[1]
x = data[1:, 0:num_column-1]
y = data[1:, num_column-1].reshape(-1, 1)
# 加一列
X = np.column_stack((np.ones((num_row-1, 1)), x))
# 划分数据集,使用30%的数据作为测试集
offset = int(X.shape[0] * 0.7)
# 训练集 (8,12) & (8,1)
X_train, y_train = X[:offset], y[:offset]
# 测试集 (4,12) & (4,1)
X_test, y_test = X[offset:], y[offset:]# 创建Ridge回归模型实例
clf = Ridge(alpha=0.1)
# 对训练集进行拟合
clf.fit(X_train, y_train)
# 打印模型相关系数
print('sklearn LASSO intercept:(截距)', clf.intercept_)
print('\nsklearn LASSO coefficients:(系数)\n', clf.coef_)
【结果展示】:
可以看到,Ridge 回归参数大多比较接近 0 ,但都不等于 0 ,这也正是 Ridge 回归的一个特征。
从数学角度来看,LASSO 回归和 Ridge 回归都是在 XTX 为不可逆矩阵的情况下,求解回归参数的一种 “妥协” 性的方法。通过给常规的平方损失函数添加 L1 正则化项和 L2 正则化项,使得回归问题有可行解,虽然这种解是一种有偏估计。
但从业务可解释性的角度来看,影响一个变量的因素有很多,但关键因素永远只会是少数。当影响一个变量的因素有很多时(特征数可能会大于样本量),用传统的线性回归方法来处理可能效果会不太理想。LASSO 回归和 Ridge 回归通过对损失函数施加正则化项的方式,使得回归建模过程中大量不重要的特征系数被压缩为 0 或者接近 0 ,从而找出对目标变量有较强影响的关键特征。
相关文章:
监督学习单模型—线性模型—LASSO回归、Ridge回归
目标变量通常有很多影响因素,通过各类影响因素构建对目标变量的回归模型,能够实现对目标的预测。但根据稀疏性的假设,即使影响一个变量的因素有很多,其关键因素永远只会是少数。在这种情况下,还用传统的线性回归方法来…...
StableDiffusion打包 项目迁移 项目分发 1
文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新:https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序: python3.10.6: https://www.python.org/downloads/release/python-3106/gi…...
【C++】模板初阶
文章目录 一. 泛型编程1.1 什么是模板1.2 为什么要使用模板 二. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.4.1 隐式实例化2.4.2 显式实例化 2.5 模板参数的匹配原则 三. 类模板3.1 类模板的定义格式3.2 类模板的实例化3.3 在类模板外…...
STM32学习【4】ARM汇编(够用)
目录 ARM汇编语言基础写在前面 1. ARM汇编的分类2. 关于指令集指令集切换Thumb2指令集统一汇编语言(UAL)常用汇编指令 3. 汇编格式立即数与伪指令 4. 操作内存的汇编指令LDR:从内存加载数据到CPU寄存器STR:将数据从寄存器存储到内…...
傅里叶分析
傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…...
Jmeter插件下载及安装
1、在Jmeter官网(Install :: JMeter-Plugins.org)下载所需插件 2、将下载的插件复制到jmeter文件下的lib/ext文件里(PS:D:\Jmeter\apache-jmeter-5.6.2\lib\ext) 3、打开Jmeter,选择 选项----Plugins Manag…...
Docker迁移/var/lib/docker之后镜像容器丢失问题
迁移/var/lib/docker时,如果目标目录少写一个/,/etc/docker/daemon.json中的data-root后面需要多加一级目录docker。 若迁移命令如下 rsync -avz /var/lib/docker /home/docker/ 在/etc/docker/daemon.json中添加如下内容 "data-root": &q…...
【C++】深入理解List:双向链表的应用
凭时间赢来的东西,时间肯定会为之作证。 前言 这是我自己学习C的第七篇博客总结。后期我会继续把C学习笔记开源至博客上。 上一期笔记是关于C的vector类知识,没看的同学可以过去看看:【C】探索Vector:灵活的数据存储解决方案-CS…...
如何使用 Ollama 的 API 来生成文本
如何使用 Ollama 的 API 来生成文本 简介 生成文本 生成文本的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API,允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能,包括模型管理、运行和监控。本…...
Redis除了做缓存还有哪些应用场景
我用「现实场景代码简例」帮你彻底掌握Redis的18般武艺。先记住这句话:Redis是数据结构的瑞士军刀。以下分7大核心应用方向讲解: 一、高频面试答案速记版 1. 分布式锁 → 超市储物柜机制 2. 计数器 → 直播间点赞统计 3. 排行榜 → 游戏战力榜 4. 消息队…...
软件工程复试专业课-测试
测试 1 软件质量2 黑盒测试2.1 概念2.2 等价划分类 2.3 边值分析2.4 错误推测2.5 因果图 3 白盒测试3.1概念3.2 覆盖标准3.2.1 语句覆盖3.2.2 判断覆盖3.2.3 条件覆盖3.2.4 判定/条件覆盖3.2.5 条件组合覆盖3.2.6 路径覆盖 4 软件测试的四个阶段5 测试工具 1 软件质量 定义&…...
html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Maven的传递性、排除依赖、生命周期、插件
一、Maven的传递性 蓝色背景中的两个jar包是projectA的直接依赖,其余的Jar包是projectA的间接依赖。 projectA可以使用直接依赖,也可以使用间接依赖。 maven-projectB项目引入了maven-projectC(整个项目打成了jar包)和junit两个jar包。 ma…...
Java 调试模式下 Redisson 看门狗失效
一、场景分析 前几天在做分布式锁测试: 在调试模式下,lock.lock() 之后打上断点,想测试一下在当前线程放弃锁之前,别的线程能否获取得到锁。 发现调试模式下,看门狗机制失效了,Redis 上 30 秒后࿰…...
PHP下载安装以及基本配置
目录 引言 官网 下载 配置 1. 鼠标右键“此电脑”>“属性” 2. 打开高级系统设置 3. 打开环境变量 4. 双击系统变量中的path 5. 新建新的path 6. 将刚刚安装的位置加入环境变量 7. 检查是否安装成功 引言 PHP(“PHP: Hypertext Preprocessor”&#…...
Vue nextTick原理回顾
nextTick就是将异步函数放在下一次实践循环的微任务队列中执行 实现原理比较简单,极简版本: function myNextTick(cb){let p;pPromise.resolve().then(cb)return cb?p:Promise.resolve() }复杂版本,考虑异步函数入队、执行锁、兼容处理 l…...
【Javascript】js精度丢失
当JS处理大整数或者浮点数的时候会出现精度丢失的情况。 Javascript的数字都使用双精度浮点数表示,遵循IEEE754标准 比如我遇到的问题,对一个小数的四舍五入,保留2位小数: 235.985≈235.98 235.9851≈235.99 原理请大家参考百度&…...
Go在1.22版本修复for循环陷阱
记录 前段时间升级Go版本碰到一个大坑,先记录。 先上代码案例: func main() {testClosure() }func testClosure() {for i : 0; i < 5; i {defer func() {fmt.Println(i)}()} }在1.22之下(不包括1.22)版本: 输出的…...
服务器离线部署DeepSeek
目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网,因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…...
PhotoDoodle: Learning Artistic Image Editing from Few-Shot Examples 论文解读
目录 一、概述 二、PhotoDoodle 1、OmniEditor的预训练 2、DiT重点 3、无噪声条件范式与CFM 4、EditLoRA 4.1关于LoRA 4.2关于EditLoRA 三、相关工作 一、概述 风格化图像编辑的论文! 介绍了PhotoDoodle,一个基于扩散模型的图像编辑框架&#x…...
的pythonAPI文档含义
Open3D的pythonAPI文档含义 Open3D的pythonAPI文档含义1、相关文档1.[Open3D的python文档]2 [Open3D的cpp文档] 2、结论 >> 看了好久的文档,奶奶的什么个意思。1. class Type是一个枚举类,PointCloud等是枚举成员,每个成员在python有 n…...
跟着AI学vue第十三章
第十三章:技术传承与行业影响力塑造 到了这个阶段,你已经在Vue技术领域积累了深厚的经验,拥有了较强的技术实力。此时,你的重点将是把自己的知识和经验传递给更多人,在行业内树立起影响力,推动整个Vue技术…...
实现实时数据仓库开源项目
根据你的需求,以下是一些可以实现类似 ClickHouse 的实时数仓功能的项目,这些项目提供了高性能的数据处理和分析能力,适合实时数据仓库的场景: 1. Apache Doris Apache Doris 是一个开源的实时数据仓库,支持高吞吐量…...
实现了一个自适应的NOC路由机制,包括构建流量图、设计拥塞预测模型、优化路由策略和评估性能
以下是针对设计和实现自适应的网络 - on - chip (NOC) 路由机制的详细步骤及代码示例: 1. 分析NOC路由路径拥塞的原因及传统方法的不足之处 拥塞原因: 动态流量变化:芯片内不同模块的工作负载随时间变化,导致局部流量突然增加。…...
光速解决phpstudy无法启动MySQL服务
问题描述 在初步安装使用phpstudy时,会出现mysql服务启动失败的情况,具体表现为点击一键启动后,mysql启动又立即停止 原因及解决方法: phpstudy数据库无法启动有以下几个原因,可以看看自己是第几种: 服务名…...
2022 年 9 月青少年软编等考 C 语言五级真题解析
目录 T1. 城堡问题思路分析T2. 斗地主大师思路分析T3. 玩具摆放思路分析T4. 哥斯拉大战金刚思路分析T1. 城堡问题 1 2 3 4 5 6 7 ############################# 1 # | # | # | | ######---#####---#---#####---# 2 # # | # # # # ##…...
【原创】Ubuntu 24搭建Ollama+ DeepSeek局域网服务器
安装Ubuntu 服务器 通过ubuntu官网下载ubuntu 24服务器版本 刻录光盘(也可以使用U盘) 用光盘启动PC机器(必须是带显卡的PC机,包括集成Intel显卡的也行,纯CPU计算的服务器基本上不能使用) 最小化安装Ubuntu…...
阿里云ack的创建与实战应用案例
阿里云ack的创建与应用案例 创建前开通ack相关服务:开始创建简单的魔方游戏,熟悉sv与clb自动注册创建部署一个nginx 服务示例:走不同域名访问不同svc资源:为什么需要 Ingress ?创建第一个域名的 Deployment和Service。…...
制造业数字化实践案例丨国内某大型物联网企业数字化项目管理系统,赋能品牌和生态战略落地
30秒快读 该大型物联网企业在规模化和业务扩展过程中,面临项目管理模式单一、供应链与客户端协同不足、项目过程数据透明度低、软硬件项目管理分离等痛点,数字化项目管理系统建设旨在构建以项目制为核心的流程型组织,建立内外部高效协同的项…...
当AI重构认知:技术狂潮下的教育沉思录
备注:文章未Deepseek R1模型辅助生成,如有不妥请谅解。 以下使原文: 我有三个娃,各间隔4到5岁,经历过搜索引擎,短视频,短剧,本身曾经也是教育专业出生,任何事务都有两面性…...
Game Maker 0.11更新:构建社交竞速游戏并增强玩家互动
在这三部分系列中,我们将介绍如何实现Game Maker 0.11中一些最激动人心的新功能。 欢迎来到我们系列文章的第一篇,重点介绍了The Sandbox Game Maker 0.11更新中的新特性。 The Sandbox Game Maker 0.11是一个多功能工具,帮助创作者通过游戏…...
ubuntu配置jmeter
1.前提准备 系统 ubuntu server 22.04 前提条件:服务器更新apt与安装lrzsz:更新apt: sudo apt update安装lrzsz: 命令行下的上传下载文件工具 sudo apt install lrzszsudo apt install zip2.安装jemeter 2.1.下载jdk17 输入命令…...
计算机毕业设计Python+DeepSeek-R1大模型考研院校推荐系统 考研分数线预测 考研推荐系统 考研(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
字段对比清洗
import pandas as pd import psycopg2 from psycopg2 import sql# 数据库连接配置 DB_CONFIG {"host": "","user": "","password": "","dbname": "","port": , }def get_excel_fi…...
过滤器 二、过滤器详解
过滤器生命周期: init(FilterConfig):在服务器启动时会创建Filter实例,并且每个类型的Filter只创建一个实例,从此不再创建!在创建完Filter实例后,会马上调用init()方法完成初始化工作,这个方法…...
七、Three.jsPBR材质与纹理贴图
1、PBR材质金属度和粗糙度 1、金属度metalness 金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。 threejs的PBR材质,.metalness默认是0.5,0.0到1.0之间的值可用于生锈的金属外观 new THREE.MeshStandardMaterial({met…...
分布式主键生成服务
目录 一、使用线程安全的类——AtomicInteger或者AtomicLong 二、主键生成最简单写法(不推荐) 三、主键生成方法一:Long型id生成——雪花算法 四、主键生成方法二:流水号 (一)流水号概述 (二)添加配置 1.pom.xml 2.application.properties 3.创…...
【Day50 LeetCode】图论问题 Ⅷ
一、图论问题 Ⅷ 1、dijkstra算法 堆优化 采用堆来优化,适合节点多的稀疏图。代码如下: # include<iostream> # include<vector> # include<list> # include<queue> # include<climits>using namespace std;class myco…...
人大金仓KCA | 用户与角色
人大金仓KCA | 用户与角色 一、知识预备1. 用户和角色 二、具体实施1. 用户管理-命令行1.1 创建和修改用户1.2 修改用户密码1.3 修改用户的并发连接数1.4 修改用户的密码有效期 2.用户管理-EasyKStudio2.1 创建和修改用户2.2 修改用户密码2.3 修改用户的并发连接数2.4 修改用户…...
嵌入式开发:傅里叶变换(4):在 STM32上面实现FFT(基于STM32L071KZT6 HAL库+DSP库)
目录 步骤 1:准备工作 步骤 2:创建 Keil 项目,并配置工程 步骤 3:在MDK工程上添加 CMSIS-DSP 库 步骤 5:编写代码 步骤 6:配置时钟和优化 步骤 7:调试与验证 步骤 8:优化和调…...
【AI学习从零至壹】Numpy基础知识
PyTorch基础知识 Numpy基础NumPy 基本数据类型Numpy数组 NumPy 基础数组创建Numpy特殊数组创建Numpy数组的访问NumPy数组的遍历Numpy数组的常用属性比较常用的属性有: Numpy数组的基本操作Numpy数组的数学操作加减乘除 Numpy线性代数Numpy广播机制 Numpy基础 NumPy…...
Day11,Hot100(贪心算法)
贪心 (1)121. 买卖股票的最佳时机 第 i 天卖出的最大利润,即在前面最低价的时候买入 class Solution:def maxProfit(self, prices: List[int]) -> int:min_price prices[0]ans 0for price in prices:ans max(ans, price - min_price…...
Transformer 代码剖析1 - 数据处理 (pytorch实现)
引言 Transformer 架构自《Attention Is All You Need》论文发表以来,在自然语言处理领域引起了巨大的变革。它摒弃了传统的循环结构,完全基于注意力机制,显著提高了处理序列数据的效率和性能。本文将通过对一个具体的项目代码结构进行详细分…...
Python--模块(下)
3. 内置模块 3.1 os模块 常用功能: os.mkdir("new_dir") # 创建目录 os.listdir(".") # 列出当前目录文件 os.path.join("dir", "file.txt") # 路径拼接 os.path.abspath(__file…...
Android Studio超级详细讲解下载、安装配置教程(建议收藏)
博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有…...
PS画笔工具
画笔工具: 画笔工具(B)(原理:单位笔刷的连续填充,文件格式.abr):圆形矢量笔刷、动态矢量画笔(旧版画笔里有 与压感笔有关)、图案填充画笔 shift画笔ÿ…...
[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)
文章目录 1. JVM内存模型2. 常量池中有什么类型?3. 常量池中真正存储的内容是什么4. 判断一个字符串(引用)是否在常量池中5. BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗?6. 获取堆内存使用情况、非堆内存使用情况 1. JVM内…...
1.68M 免安装多格式图片批量转 webp 无广告软件推荐
软件介绍 今天要给大家分享一款超实用的图片处理工具,它能实现多格式图片向 webp 格式的转换,无论是 jpg、png、tif、gif 还是 webp 格式自身的图片,都能批量且借助多线程技术进行转换。 直接打开就能用,体积小巧,仅 …...
LeetCode 1472.设计浏览器历史记录:一个数组完成模拟,单次操作均O(1)
【LetMeFly】1472.设计浏览器历史记录:一个数组完成模拟,单次操作均O(1) 力扣题目链接:https://leetcode.cn/problems/design-browser-history/ 你有一个只支持单个标签页的 浏览器 ,最开始你浏览的网页是 homepage ,…...
[笔记.AI]AI知识科普提纲
仅供参考 1.AI基础认知 1.1什么是什么AI 1.2核心概念 1.2.1机器学习、深度学习、神经网络 1.2.2模型:模型、大模型、模型参数 1.2.3多模态 1.2.4生成式AI & 判别式AI 1.3发展与现状 2.大模型 2.1主流大模型 2.1.1分类 2.1.2各…...