用deepseek学大模型05逻辑回归
deepseek.com:逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。
逻辑回归全面解析
一、数学推导
模型定义:
逻辑回归模型为概率预测模型,输出 P ( y = 1 ∣ x ) = σ ( w ⊤ x + b ) P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w}^\top \mathbf{x} + b) P(y=1∣x)=σ(w⊤x+b),其中 σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e−z1。
1. 目标函数与损失函数
-
损失函数(交叉熵):
单个样本的损失:
L ( y , y ^ ) = − y log ( y ^ ) − ( 1 − y ) log ( 1 − y ^ ) \mathcal{L}(y, \hat{y}) = -y \log(\hat{y}) - (1-y) \log(1-\hat{y}) L(y,y^)=−ylog(y^)−(1−y)log(1−y^)
其中 y ^ = σ ( w ⊤ x + b ) \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b) y^=σ(w⊤x+b)。所有样本的平均损失(标量形式):
J ( w , b ) = − 1 N ∑ i = 1 N [ y i log ( y ^ i ) + ( 1 − y i ) log ( 1 − y ^ i ) ] J(\mathbf{w}, b) = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i) \right] J(w,b)=−N1i=1∑N[yilog(y^i)+(1−yi)log(1−y^i)]矩阵形式( X \mathbf{X} X为设计矩阵, y \mathbf{y} y为标签向量):
J ( w , b ) = − 1 N [ y ⊤ log ( σ ( X w + b ) ) + ( 1 − y ) ⊤ log ( 1 − σ ( X w + b ) ) ] J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log(\sigma(\mathbf{X}\mathbf{w} + b)) + (1-\mathbf{y})^\top \log(1-\sigma(\mathbf{X}\mathbf{w} + b)) \right] J(w,b)=−N1[y⊤log(σ(Xw+b))+(1−y)⊤log(1−σ(Xw+b))]
2. 梯度下降推导
-
标量形式梯度:
对 w j w_j wj求偏导:
∂ L ∂ w j = ( y ^ − y ) x j \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j ∂wj∂L=(y^−y)xj
对 b b b求偏导:
∂ L ∂ b = y ^ − y \frac{\partial \mathcal{L}}{\partial b} = \hat{y} - y ∂b∂L=y^−y -
矩阵形式梯度:
梯度矩阵为:
∇ w J = 1 N X ⊤ ( σ ( X w + b ) − y ) \nabla_{\mathbf{w}} J = \frac{1}{N} \mathbf{X}^\top (\sigma(\mathbf{X}\mathbf{w} + b) - \mathbf{y}) ∇wJ=N1X⊤(σ(Xw+b)−y)
∂ J ∂ b = 1 N ∑ i = 1 N ( y ^ i − y i ) \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i) ∂b∂J=N1i=1∑N(y^i−yi)
损失函数的设计是机器学习模型的核心环节,它决定了模型如何衡量预测值与真实值的差异,并指导参数优化方向。逻辑回归的损失函数(交叉熵)设计并非偶然,而是基于概率建模、数学优化和信息论的深刻原理。以下从多个角度详细解释其设计逻辑:
一、损失函数的设计逻辑
1. 概率建模的视角
逻辑回归的目标是预测样本属于某一类的概率(二分类)。
-
假设数据服从伯努利分布:
对单个样本,标签 y ∈ { 0 , 1 } y \in \{0,1\} y∈{0,1},模型预测的概率为:
{ P ( y = 1 ∣ x ) = y ^ = σ ( w ⊤ x + b ) , P ( y = 0 ∣ x ) = 1 − y ^ . \begin{cases} P(y=1 \mid \mathbf{x}) = \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b), \\ P(y=0 \mid \mathbf{x}) = 1 - \hat{y}. \end{cases} {P(y=1∣x)=y^=σ(w⊤x+b),P(y=0∣x)=1−y^.
样本的联合似然函数为:
L ( w , b ) = ∏ i = 1 N y ^ i y i ( 1 − y ^ i ) 1 − y i . L(\mathbf{w}, b) = \prod_{i=1}^N \hat{y}_i^{y_i} (1 - \hat{y}_i)^{1 - y_i}. L(w,b)=i=1∏Ny^iyi(1−y^i)1−yi. -
最大化对数似然:
为了便于优化,对似然函数取负对数(将乘法转为加法,凸函数性质不变):
− log L ( w , b ) = − ∑ i = 1 N [ y i log y ^ i + ( 1 − y i ) log ( 1 − y ^ i ) ] . -\log L(\mathbf{w}, b) = -\sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right]. −logL(w,b)=−i=1∑N[yilogy^i+(1−yi)log(1−y^i)].
最小化该式等价于最大化似然函数,此即 交叉熵损失。
2. 信息论视角
交叉熵(Cross-Entropy)衡量两个概率分布 P P P(真实分布)和 Q Q Q(预测分布)的差异:
H ( P , Q ) = − E P [ log Q ] . H(P, Q) = -\mathbb{E}_{P}[\log Q]. H(P,Q)=−EP[logQ].
对于二分类问题:
- 真实分布 P P P:标签 y y y是确定的(0或1),可视为一个 Dirac delta分布。
- 预测分布 Q Q Q:模型输出的概率 y ^ \hat{y} y^。
交叉熵的表达式与负对数似然一致,因此最小化交叉熵等价于让预测分布逼近真实分布。
3. 优化视角:梯度性质
-
交叉熵 vs 均方误差(MSE):
若使用 MSE 损失 L = 1 2 ( y − y ^ ) 2 \mathcal{L} = \frac{1}{2}(y - \hat{y})^2 L=21(y−y^)2,其梯度为:
∂ L ∂ w j = ( y − y ^ ) ⋅ y ^ ( 1 − y ^ ) ⋅ x j . \frac{\partial \mathcal{L}}{\partial w_j} = (y - \hat{y}) \cdot \hat{y} (1 - \hat{y}) \cdot x_j. ∂wj∂L=(y−y^)⋅y^(1−y^)⋅xj.
当 y ^ \hat{y} y^接近 0 或 1 时(预测置信度高),梯度中的 y ^ ( 1 − y ^ ) \hat{y}(1 - \hat{y}) y^(1−y^)趋近于 0,导致 梯度消失,参数更新缓慢。交叉熵的梯度为:
∂ L ∂ w j = ( y ^ − y ) x j . \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j. ∂wj∂L=(y^−y)xj.
梯度直接正比于误差 ( y ^ − y ) (\hat{y} - y) (y^−y),无论预测值大小,梯度始终有效,优化更高效。
4. 数学性质
- 凸性:交叉熵损失函数在逻辑回归中是凸函数(Hessian矩阵半正定),保证梯度下降能找到全局最优解。
- 概率校准性:交叉熵强制模型输出具有概率意义(需配合 sigmoid 函数),而 MSE 无此特性。
二、为什么不是其他损失函数?
1. 均方误差(MSE)的缺陷
- 梯度消失问题(如上述)。
- 对概率的惩罚不对称:
当 y = 1 y=1 y=1时,预测 y ^ = 0.9 \hat{y}=0.9 y^=0.9的 MSE 损失为 0.01 0.01 0.01,而交叉熵损失为 − log ( 0.9 ) ≈ 0.105 -\log(0.9) \approx 0.105 −log(0.9)≈0.105。
交叉熵对错误预测(如 y ^ = 0.1 \hat{y}=0.1 y^=0.1时 y = 1 y=1 y=1)的惩罚更严厉( − log ( 0.1 ) ≈ 2.3 -\log(0.1) \approx 2.3 −log(0.1)≈2.3),符合分类任务需求。
2. 其他替代损失函数
- Hinge Loss(SVM使用):
适用于间隔最大化,但对概率建模不直接,且优化目标不同。 - Focal Loss:
改进交叉熵,解决类别不平衡问题,但需额外调整超参数。
三、交叉熵的数学推导
1. 从伯努利分布到交叉熵
假设样本独立,标签 y ∼ Bernoulli ( y ^ ) y \sim \text{Bernoulli}(\hat{y}) y∼Bernoulli(y^),其概率质量函数为:
P ( y ∣ y ^ ) = y ^ y ( 1 − y ^ ) 1 − y . P(y \mid \hat{y}) = \hat{y}^y (1 - \hat{y})^{1 - y}. P(y∣y^)=y^y(1−y^)1−y.
对数似然函数为:
log P ( y ∣ y ^ ) = y log y ^ + ( 1 − y ) log ( 1 − y ^ ) . \log P(y \mid \hat{y}) = y \log \hat{y} + (1 - y) \log (1 - \hat{y}). logP(y∣y^)=ylogy^+(1−y)log(1−y^).
最大化对数似然等价于最小化其负数,即交叉熵损失。
2. 梯度推导(矩阵形式)
设设计矩阵 X ∈ R N × D \mathbf{X} \in \mathbb{R}^{N \times D} X∈RN×D,权重 w ∈ R D \mathbf{w} \in \mathbb{R}^D w∈RD,偏置 b ∈ R b \in \mathbb{R} b∈R,预测值 y ^ = σ ( X w + b ) \hat{\mathbf{y}} = \sigma(\mathbf{X}\mathbf{w} + b) y^=σ(Xw+b)。
交叉熵损失:
J ( w , b ) = − 1 N [ y ⊤ log y ^ + ( 1 − y ) ⊤ log ( 1 − y ^ ) ] . J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log \hat{\mathbf{y}} + (1 - \mathbf{y})^\top \log (1 - \hat{\mathbf{y}}) \right]. J(w,b)=−N1[y⊤logy^+(1−y)⊤log(1−y^)].
梯度计算:
∂ J ∂ w = 1 N X ⊤ ( y ^ − y ) , \frac{\partial J}{\partial \mathbf{w}} = \frac{1}{N} \mathbf{X}^\top (\hat{\mathbf{y}} - \mathbf{y}), ∂w∂J=N1X⊤(y^−y),
∂ J ∂ b = 1 N ∑ i = 1 N ( y ^ i − y i ) . \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i). ∂b∂J=N1i=1∑N(y^i−yi).
四、实际应用中的设计原则
- 任务需求匹配:分类任务需概率输出,回归任务用 MSE。
- 优化效率:梯度应稳定且易于计算。
- 概率解释性:损失函数需与概率模型一致(如交叉熵配 sigmoid)。
- 鲁棒性:对异常值的敏感程度(交叉熵比 MSE 更敏感,需数据清洗)。
五、总结
逻辑回归的交叉熵损失函数是通过以下步骤设计的:
- 概率假设:假设数据服从伯努利分布。
- 最大似然估计:将参数估计问题转化为优化问题。
- 数学简化:取负对数似然,得到交叉熵形式。
- 优化验证:选择梯度性质更优的损失函数。
这种设计使得逻辑回归在二分类任务中高效、稳定,且输出具有概率意义,成为基础且强大的模型。
二、PyTorch 代码案例
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification# 生成数据
X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1)
X = torch.tensor(X, dtype=torch.float32)
y = torch.tensor(y, dtype=torch.float32).view(-1, 1)# 定义模型
class LogisticRegression(nn.Module):def __init__(self, input_dim):super().__init__()self.linear = nn.Linear(input_dim, 1)def forward(self, x):return torch.sigmoid(self.linear(x))model = LogisticRegression(2)
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)# 训练
losses = []
for epoch in range(100):y_pred = model(X)loss = criterion(y_pred, y)loss.backward()optimizer.step()optimizer.zero_grad()losses.append(loss.item())# 可视化损失曲线
plt.plot(losses)
plt.title("Training Loss")
plt.show()# 决策边界可视化
w = model.linear.weight.detach().numpy()[0]
b = model.linear.bias.detach().numpy()x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100))
Z = model(torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtype=torch.float32)).detach().numpy()
Z = Z.reshape(xx.shape)plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y.squeeze(), edgecolors='k')
plt.title("Decision Boundary")
plt.show()
三、可视化展示
- 数据分布:二维散点图展示类别分离情况。
- 损失曲线:训练过程中损失值下降曲线。
- 决策边界:等高线图显示模型预测分界线。
四、应用场景与优缺点
-
应用场景:
信用评分、垃圾邮件检测、疾病预测(线性可分问题)。 -
优点:
- 计算高效,适合大规模数据。
- 输出概率解释性强。
-
缺点:
- 无法直接处理非线性关系。
- 对多重共线性敏感。
五、改进方法与数学推导
-
正则化:
- L2正则化:目标函数变为
J reg = J ( w , b ) + λ 2 ∥ w ∥ 2 J_{\text{reg}} = J(\mathbf{w}, b) + \frac{\lambda}{2} \|\mathbf{w}\|^2 Jreg=J(w,b)+2λ∥w∥2
梯度更新:
w ← w − η ( ∇ w J + λ w ) \mathbf{w} \leftarrow \mathbf{w} - \eta \left( \nabla_{\mathbf{w}} J + \lambda \mathbf{w} \right) w←w−η(∇wJ+λw)
- L2正则化:目标函数变为
-
特征工程:
添加多项式特征 x 1 2 , x 2 2 , x 1 x 2 x_1^2, x_2^2, x_1x_2 x12,x22,x1x2等,将数据映射到高维空间。 -
核方法:
通过核技巧隐式映射到高维空间(需结合其他模型如SVM)。
六、总结
逻辑回归通过概率建模解决二分类问题,代码简洁高效,但需注意其线性假设的限制。通过正则化、特征工程等手段可显著提升模型性能。
相关文章:
用deepseek学大模型05逻辑回归
deepseek.com:逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。…...
python实践-实现实时语音转文字本地部署版(二)
一、技术栈 python 3.10.6 vosk 需下载对应模型(vosk-model-cn-0.22)模型下载慢的同学看最后的资源链接。 pyaudio keyboard 二、实现功能 本地化实现麦克风语音录入,实时生成文字,并保存至本地文档。 三、实现代码 fro…...
tortoiseSVN 如何克隆项目到本地
导入项目成功,如下图:...
解决“QString的split()函数分割中文“报错
在使用Qt平台的QString类里的split()函数,分割.txt文件里中文的字符串时,发现中文会乱码。 问题原因:中文使用UTF-16编码。 解决方法:将.txt文件保存为UTF-16编码,然后使用split()去分割对应的字符串即可。…...
云平台结合DeepSeek的AI模型优化实践:技术突破与应用革新
目录 前言 一、技术架构:算力与算法的协同基石 1. 蓝耘平台的核心优势 2. DeepSeek的模型创新 二、应用场景:垂直领域的智能化落地 1. 商业领域:智能推荐与客服 2. 工业领域:质检与流程优化 3. 智慧城市与医…...
蓝桥杯(B组)-每日一题(1093字符逆序)
c中函数: reverse(首位置,尾位置) reverse(s.begin(),s.end()) 头文件:<algorithm> #include<iostream> #include<algorithm>//运用reverse函数的头文件 using namespace std; int main() {string s;//定义一…...
jsherp importItemExcel接口存在SQL注入
一、漏洞简介 很多人说管伊佳ERP(原名:华夏ERP,英文名:jshERP)是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 二、漏洞影响 …...
基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...
一文讲清 AIO BIO NIO的区别
引言 在 Java 编程中,BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是三种不同的 I/O 模型,它们在处理输入输出操作时有着不同的机制和特点,但是市…...
Qt 中使用 ffmpeg 获取采集卡数据录制视频
作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 之前做了一个功能,从采集卡获取数据然后录制成视频,结果发现录制的视频内存占用非常大,1分钟的…...
用HTML5+CSS+JavaScript实现新奇挂钟动画
用HTML5+CSS+JavaScript实现新奇挂钟动画 引言 在技术博客中,如何吸引粉丝并保持他们的关注?除了干货内容,独特的视觉效果也是关键。今天,我们将通过HTML5、CSS和JavaScript实现一个新奇挂钟动画,并将其嵌入到你的网站中。这个动画不仅能让你的网站脱颖而出,还能展示你的…...
一周学会Flask3 Python Web开发-redirect重定向
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学过渲染到模板页面,这个其实是一种内部的转发,浏览器地址栏地址没有变化。如果我们想重定向…...
如何在 ConstraintLayout 中将 ViewPager 始终置于 ll_title 的下方
关于如何在 ConstraintLayout 中将 ViewPager 始终置于 ll_title标题栏 的下方。。 如何将 ViewPager 始终置于 ll_title 下方 在 ConstraintLayout 中,可以通过约束来实现 ViewPager 始终位于 ll_title 标题栏的下方。以下是修改后的布局代码: <?…...
文心一言大模型的“三级跳”:从收费到免费再到开源,一场AI生态的重构实验
2025年2月,百度文心大模型接连抛出两枚“重磅炸弹”:4月1日起全面免费,6月30日正式开源文心大模型4.5系列。这一系列动作不仅颠覆了李彦宏此前坚持的“闭源优势论”13,更标志着中国AI大模型竞争进入了一个全新的阶段——从技术壁垒…...
IPv6报头40字节具体怎么分配的?
目录 IPv6报头结构 字段详解 示例代码:IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比,IPv6不仅提供了更大的地址空间,还简化了报头结构,提高了网络设备的处理效率。…...
使用 Spark NLP 实现中文实体抽取与关系提取
在自然语言处理(NLP)领域,实体抽取和关系提取是两个重要的任务。实体抽取用于从文本中识别出具有特定意义的实体(如人名、地名、组织名等),而关系提取则用于识别实体之间的关系。本文将通过一个基于 Apache Spark 和 Spark NLP 的示例,展示如何实现中文文本的实体抽取和…...
大数据治理之solr的体现
大数据治理之solr的体现 一,大数据治理下Solr的作用 在大数据治理的背景下,Solr作为一个高性能的搜索平台,发挥这重要的作用,下面是Solr在大数据治理中的几个关键作用和体现: 数据索引与检索: 高效检索&a…...
[笔记.AI]如何判断模型是否通过剪枝、量化、蒸馏生成?
以下摘自与DeepSeek-R1在线联网版的对话 一、基础判断维度 技术类型核心特征验证方法剪枝模型参数减少、结构稀疏化1. 检查模型参数量是否显著小于同类标准模型1 2. 分析权重矩阵稀疏性(如非零参数占比<30%)4量化权重/激活值精度降低、推理速度提升1…...
Uniapp 从入门到精通:基础篇 - 搭建开发环境
Uniapp 从入门到精通:基础篇 - 搭建开发环境 前言一、Uniapp 简介1.1 什么是 Uniapp1.2 Uniapp 的优势二、搭建开发环境前的准备2.1 安装 Node.js2.2 安装 HBuilderX三、创建第一个 Uniapp 项目3.1 打开 HBuilderX 并创建项目3.2 项目结构介绍3.3 运行项目四、配置项目4.1 配置…...
CSDN文章质量分查询系统【赠python爬虫、提分攻略】
CSDN文章质量分查询系统 https://www.csdn.net/qc 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链接-----> https://www.csdn.net/qc <------点击链接 点击链接-----> CSDN文章质量分查询系统 <------点击链接 点击链…...
GPT-SoVITS更新V3 win整合包
GPT-SoVITS 是由社区开发者联合打造的开源语音生成框架,其创新性地融合了GPT语言模型与SoVITS(Singing Voice Inference and Timbre Synthesis)语音合成技术,实现了仅需5秒语音样本即可生成高保真目标音色的突破。该项目凭借其开箱…...
nginx ngx_http_module(8) 指令详解
nginx ngx_http_module(8) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_ssi_module:服务器端包含(SSI)模块,允许在HTML页面中插入其他内容或动态生成的内容。通过特殊的SSI指令(如 …...
CSS三大特性——继承、优先级与层叠
1. 层叠性 概念:如果发生了样式冲突,那就会根据一定的规则(选择器优先级),进行样式的层叠(覆 盖)。 什么是样式冲突? ——— 元素的同一个样式名,被设置了不同的值&…...
Java 中的方法参数传递与值传递
文章目录 Java 中的方法参数传递与值传递代码示例代码运行结果分析原因1. Java 中的参数传递机制2. 代码执行过程 值传递的图示如何实现真正的交换?1. 使用数组2. 使用对象 总结 Java 中的方法参数传递与值传递 在 Java 编程中,理解方法参数传递的机制是…...
敏捷开发06:用户故事估算方法介绍
估算介绍 在以前开发 IT 软件时,使用较多的衡量软件开发工作量的单位是:小时、人天 或 人月。它是预估开发时间。比如:这个功能张三一个人开发需要 3 天时间完成。 这种 “人天” 估算只是 “理想人天” 的估算,有时与实际开发完…...
在原有基础上的Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析
以下是Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析: Python正则表达式终极指南 一、正则表达式引擎原理 1. 回溯机制解析 NFA(非确定性有限自动机)工作原理回溯的产生场景及性能影响灾难性回溯案例:# 危险模式示例 re.match(r(a+)+b, aaaaaaaaac) …...
进制转换及C语言中进制转换方法
进制转换是计算机科学和数学中的基础操作,主要用于不同数制之间的数值表示转换。以下是常见进制(二进制、八进制、十进制、十六进制)的转换方法及示例: 一、其他进制 → 十进制 方法:按权展开,逐位相加。 …...
【我要成为配环境高手】node卸载与nvm安装
node卸载与nvm安装 1. node卸载 参考了这篇文章: https://blog.csdn.net/weixin_43801036/article/details/141487791 2. nvm安装 参考了这两篇文章: https://www.cnblogs.com/rnny/p/17839190.html#tid-z7A3nR https://blog.csdn.net/weixin_45811…...
环境变量与本地变量
目录 本地变量的创建 环境变量VS本地变量 认识完了环境变量我们来认识一下本地变量。 本地变量的创建 我们如果直接env是看不到本地变量的,因为本地变量和环境变量都具有独立性,环境变量是系统提供的具有全局属性的变量,都存在bash进程的…...
Docker安装Kafka(不依赖ZooKeeper)
创建docker-compose.yaml version: "3.9" #版本号 services:kafka:image: apache/kafka:3.9.0container_name: kafkahostname: kafkaports:- 9092:9092 # 容器内部之间使用的监听端口- 9094:9094 # 容器外部访问监听端口environment:KAFKA_NODE_ID: 1KAFKA_PROCES…...
