深度学习笔记: 最详尽解释逻辑回归 Logistic Regression

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

逻辑回归概述

逻辑回归类似于线性回归,但预测的是某事物是否为真,而不是像大小这样的连续值。逻辑回归拟合的是“S”形的“逻辑函数”曲线,而不是一条直线。这个曲线从0到1,表示根据预测变量(例如体重),某个结果发生的概率(例如老鼠是否肥胖)。

逻辑回归的工作原理

  • 重的老鼠:高概率肥胖。
  • 中等体重的老鼠:50%概率肥胖。
  • 轻的老鼠:低概率肥胖。

虽然逻辑回归给出了老鼠是否肥胖的概率,但它通常用于分类。例如,如果老鼠肥胖的概率大于50%,我们就将其分类为肥胖,否则分类为“不肥胖”。

alt

逻辑回归中的预测变量

逻辑回归可以处理连续数据(如体重、年龄)和离散数据(如基因型、星座)。我们可以测试每个变量是否对预测肥胖有用。与普通回归不同,我们不能轻易地比较复杂模型和简单模型。相反,我们测试一个变量对预测的影响是否显著不同于0。如果不是,这意味着该变量对预测没有帮助。我们使用沃尔德检验来确定这一点。

例如,如果肥胖是由体重+基因型+年龄+星座预测的,而我们发现星座“完全无用”(统计术语表示“没有帮助”),我们可以从模型中排除它,以节省时间和资源。

逻辑回归能够提供概率并使用连续和离散测量值对新样本进行分类,使其成为一种流行的机器学习方法。

线性回归与逻辑回归的区别

线性回归和逻辑回归的一个主要区别是数据拟合的方法:

  • 线性回归:使用“最小二乘法”拟合,最小化残差的平方和。该方法允许计算R²来比较模型。
  • 逻辑回归:使用“最大似然法”。它没有残差,因此不能使用最小二乘法或计算R²。

在逻辑回归中,您:

  1. 选择一个概率,根据体重缩放,观察肥胖老鼠的概率。
  2. 使用此概率计算观察到的该体重的非肥胖老鼠的可能性。
  3. 然后计算观察到该老鼠的可能性。
  4. 对所有老鼠重复此过程并将所有这些可能性相乘。这是给定该曲线的数据的可能性。

然后,您:

  1. 移动曲线。
  2. 计算新曲线的数据可能性。
  3. 重复此过程,直到找到最大可能性的曲线。

总结

逻辑回归可以用于分类样本,并且可以使用不同类型的数据(例如体重、基因型)进行分类。它还帮助评估哪些变量对分类有用(例如在使用体重、基因型、年龄和星座预测肥胖时,星座可能“完全无用”)。

关键概念

逻辑函数

逻辑回归的核心是逻辑函数(也称为S型函数),它将任何实值数映射到[0, 1]范围内:

σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1

这里, z z z是输入特征的线性组合。对于二分类,逻辑函数输出给定输入点属于正类的概率。

决策边界

决策边界是我们分类输出的阈值。对于二分类,一个常见的阈值是0.5:

  • 如果输出概率 ≥ 0.5 \geq 0.5 0.5,则分类为类别1。
  • 如果输出概率 < 0.5 < 0.5 <0.5,则分类为类别0。

模型表示

假设

在逻辑回归中,假设定义为:

h θ ( x ) = σ ( θ T x ) h_\theta(x) = \sigma(\theta^T x) hθ(x)=σ(θTx)

其中, θ \theta θ是权重向量, x x x是输入特征向量, σ \sigma σ是S型函数。

代价函数

逻辑回归的代价函数是对数损失(也称为二元交叉熵):

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

其中, m m m是训练样本的数量, y y y是实际标签, h θ ( x ) h_\theta(x) hθ(x)是预测概率。

优化

目标是找到使代价函数 J ( θ ) J(\theta) J(θ)最小化的参数 θ \theta θ。这通常使用梯度下降等优化算法来完成。

稀疏特征

在许多现实世界的应用中,特征空间是稀疏的,意味着大多数特征值为零。逻辑回归在这些场景中特别有效,因为:

  • 它可以高效地处理高维数据。
  • 模型复杂度与特征数量线性相关,使其在计算上可行。

使用稀疏数据进行逻辑回归时,我们通常使用稀疏矩阵表示(如压缩稀疏行(CSR)或压缩稀疏列(CSC)格式)来存储输入特征。
这些数据结构仅存储非零元素及其索引,与密集矩阵相比显著减少了内存使用。
逻辑回归涉及矩阵乘法和其他线性代数操作。当数据存储在稀疏矩阵中时,这些操作可以优化以忽略零元素,从而加快计算速度。

当使用正则化技术时,特别是L1正则化(也称为套索正则化),逻辑回归被认为是稀疏线性分类器。这种正则化技术可以迫使模型的一些系数正好为零,有效地忽略某些特征,从而导致稀疏模型。

该模型是线性的,因为它将对数几率建模为输入特征的线性组合。
log ⁡ ( p 1 − p ) = β 0 + β 1 x 1 + β 2 x 2 + … + β n x n \log \left( \frac{p}{1-p} \right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n log(1pp)=β0+β1x1+β2x2++βnxn

在逻辑回归的上下文中,“计算上可行”意味着:
训练和预测的时间和内存需求随着数据规模(特征和样本数量)线性增长。

分布式训练

为什么要分布式训练?

随着数据量的增加,在单台机器上训练模型会变得缓慢且不切实际。分布式训练允许并行处理,使得能够高效地处理大数据集。因此,在数据量大的情况下,我们需要使用分布式训练:Spark中的逻辑回归或交替方向乘子法(ADMM)。

Apache Spark

Apache Spark是一个强大的分布式数据处理工具。它可以用于在集群上的多台机器上并行训练逻辑回归模型。

交替方向乘子法(ADMM)

ADMM是一种优化技术,它将问题分解为可以并行解决的较小子问题。这对于需要机器之间协调的分布式环境特别有用。

结论

逻辑回归是一种强大且高效的二分类方法,特别适用于稀疏特征和大数据集。通过利用如Apache Spark的分布式训练框架和ADMM等优化技术,逻辑回归可以扩展以应对现代数据科学应用的需求。

逻辑回归与对数几率

概率与几率

  • 概率 §:事件发生的可能性。

  • 几率:事件发生的概率与其不发生的概率之比。

    几率 = P 1 − P \text{几率} = \frac{P}{1 - P} 几率=1PP

对数几率(Logit)

  • 对数几率是几率的自然对数。

    对数几率 = log ⁡ ( P 1 − P ) \text{对数几率} = \log \left( \frac{P}{1 - P} \right) 对数几率=log(1PP)

逻辑回归模型

  • 在逻辑回归中,事件发生概率的对数几率(例如点击的概率)被建模为输入特征的线性组合。

  • 模型方程为:

    log ⁡ ( P 1 − P ) = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n \log \left( \frac{P}{1 - P} \right) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n log(1PP)=θ0+θ1x1+θ2x2++θnxn

  • 这里, θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n θ0+θ1x1+θ2x2++θnxn 是特征的线性组合,通常表示为 z z z

连接 ( z ) 和对数几率

  • 术语 z = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n z = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n z=θ0+θ1x1+θ2x2++θnxn 代表逻辑回归模型中的对数几率。尽管 z z z 本身不包含对数,它是逻辑函数的参数,将其映射到概率。

逻辑回归中代价函数的梯度

逻辑回归中代价函数 J ( θ ) J(\theta) J(θ) 对参数 θ \theta θ 的梯度为:

∂ J ( θ ) ∂ θ = x ( i ) ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J(\theta)}{\partial \theta} = x^{(i)} (h_\theta(x^{(i)}) - y^{(i)}) θJ(θ)=x(i)(hθ(x(i))y(i))

这个公式来自于为二分类问题的逻辑回归代价函数导出的梯度。

推导

让我们一步步推导这个公式。

1. 假设函数

在逻辑回归中,假设函数 h θ ( x ) h_\theta(x) hθ(x) 由应用于输入特征线性组合的S型函数给出:

h θ ( x ) = σ ( θ T x ) = 1 1 + e − θ T x h_\theta(x) = \sigma(\theta^T x) = \frac{1}{1 + e^{-\theta^T x}} hθ(x)=σ(θTx)=1+eθTx1

2. 代价函数

逻辑回归的代价函数是训练数据的负对数似然,可以写为:

J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] J(θ)=m1i=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

3. 简化代价函数

为了简便起见,我们关注于单个训练样本 ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i)) 的代价函数:

J ( θ ) = − [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] J(θ)=[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

4. 对 θ j \theta_j θj 的偏导数

为了找到梯度,我们需要计算 J ( θ ) J(\theta) J(θ) 对每个参数 θ j \theta_j θj 的偏导数。我们将 z = θ T x ( i ) z = \theta^T x^{(i)} z=θTx(i),因此 h θ ( x ( i ) ) = σ ( z ) h_\theta(x^{(i)}) = \sigma(z) hθ(x(i))=σ(z)

代价函数 J ( θ ) J(\theta) J(θ) θ j \theta_j θj 的偏导数为:

∂ J ( θ ) ∂ θ j = − [ ∂ ∂ θ j y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ∂ ∂ θ j ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] \frac{\partial J(\theta)}{\partial \theta_j} = -\left[ \frac{\partial}{\partial \theta_j} y^{(i)} \log(h_\theta(x^{(i)})) + \frac{\partial}{\partial \theta_j} (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] θjJ(θ)=[θjy(i)log(hθ(x(i)))+θj(1y(i))log(1hθ(x(i)))]

使用链式法则,我们有:
∂ ∂ θ j h θ ( x ( i ) ) = ∂ σ ( z ) ∂ z ⋅ ∂ z ∂ θ j = σ ( z ) ( 1 − σ ( z ) ) ∂ z ∂ θ j = h θ ( x ( i ) ) ( 1 − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial}{\partial \theta_j} h_\theta(x^{(i)}) = \frac{\partial \sigma(z)}{\partial z} \cdot \frac{\partial z}{\partial \theta_j} = \sigma(z) (1 - \sigma(z)) \frac{\partial z}{\partial \theta_j} = h_\theta(x^{(i)}) (1 - h_\theta(x^{(i)})) x_j^{(i)} θjhθ(x(i))=zσ(z)θjz=σ(z)(1σ(z))θjz=hθ(x(i))(1hθ(x(i)))xj(i)

5. 每项的导数

现在,计算代价函数中每项的偏导数:

∂ ∂ θ j y ( i ) log ⁡ ( h θ ( x ( i ) ) ) = y ( i ) 1 h θ ( x ( i ) ) ∂ h θ ( x ( i ) ) ∂ θ j = y ( i ) 1 h θ ( x ( i ) ) h θ ( x ( i ) ) ( 1 − h θ ( x ( i ) ) ) x j ( i ) = y ( i ) ( 1 − h θ ( x ( i ) ) ) x j ( i ) \frac{\partial}{\partial \theta_j} y^{(i)} \log(h_\theta(x^{(i)})) = y^{(i)} \frac{1}{h_\theta(x^{(i)})} \frac{\partial h_\theta(x^{(i)})}{\partial \theta_j} = y^{(i)} \frac{1}{h_\theta(x^{(i)})} h_\theta(x^{(i)}) (1 - h_\theta(x^{(i)})) x_j^{(i)} = y^{(i)} (1 - h_\theta(x^{(i)})) x_j^{(i)} θjy(i)log(hθ(x(i)))=y(i)hθ(x(i))1θjhθ(x(i))=y(i)hθ(x(i))1hθ(x(i))(1hθ(x(i)))xj(i)=y(i)(1hθ(x(i)))xj(i)

∂ ∂ θ j ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) = ( 1 − y ( i ) ) 1 1 − h θ ( x ( i ) ) ∂ ( 1 − h θ ( x ( i ) ) ∂ θ j = ( 1 − y ( i ) ) 1 1 − h θ ( x ( i ) ) ( − h θ ( x ( i ) ) ) x j ( i ) = − ( 1 − y ( i ) ) h θ ( x ( i ) ) x j ( i ) \frac{\partial}{\partial \theta_j} (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) = (1 - y^{(i)}) \frac{1}{1 - h_\theta(x^{(i)})} \frac{\partial (1 - h_\theta(x^{(i)})}{\partial \theta_j} = (1 - y^{(i)}) \frac{1}{1 - h_\theta(x^{(i)})} (-h_\theta(x^{(i)})) x_j^{(i)} = - (1 - y^{(i)}) h_\theta(x^{(i)}) x_j^{(i)} θj(1y(i))log(1hθ(x(i)))=(1y(i))1hθ(x(i))1θj(1hθ(x(i))=(1y(i))1hθ(x(i))1(hθ(x(i)))xj(i)=(1y(i))hθ(x(i))xj(i)

6. 合并项

合并这些结果:

∂ J ( θ ) ∂ θ j = − [ y ( i ) ( 1 − h θ ( x ( i ) ) ) x j ( i ) + ( 1 − y ( i ) ) ( − h θ ( x ( i ) ) ) x j ( i ) ] \frac{\partial J(\theta)}{\partial \theta_j} = - \left[ y^{(i)} (1 - h_\theta(x^{(i)})) x_j^{(i)} + (1 - y^{(i)}) (- h_\theta(x^{(i)})) x_j^{(i)} \right] θjJ(θ)=[y(i)(1hθ(x(i)))xj(i)+(1y(i))(hθ(x(i)))xj(i)]

∂ J ( θ ) ∂ θ j = − [ y ( i ) x j ( i ) − y ( i ) h θ ( x ( i ) ) ) x j ( i ) − ( 1 − y ( i ) ) h θ ( x ( i ) ) ) x j ( i ) ] \frac{\partial J(\theta)}{\partial \theta_j} = - \left[ y^{(i)} x_j^{(i)} - y^{(i)} h_\theta(x^{(i)})) x_j^{(i)} - (1 - y^{(i)}) h_\theta(x^{(i)})) x_j^{(i)} \right] θjJ(θ)=[y(i)xj(i)y(i)hθ(x(i)))xj(i)(1y(i))hθ(x(i)))xj(i)]

∂ J ( θ ) ∂ θ j = − [ y ( i ) x j ( i ) − h θ ( x ( i ) ) ) x j ( i ) ] \frac{\partial J(\theta)}{\partial \theta_j} = - \left[ y^{(i)} x_j^{(i)} - h_\theta(x^{(i)})) x_j^{(i)} \right] θjJ(θ)=[y(i)xj(i)hθ(x(i)))xj(i)]

∂ J ( θ ) ∂ θ j = x j ( i ) ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J(\theta)}{\partial \theta_j} = x_j^{(i)} (h_\theta(x^{(i)}) - y^{(i)}) θjJ(θ)=xj(i)(hθ(x(i))y(i))

向量形式

用向量形式表达所有参数:

∇ θ J ( θ ) = x ( i ) ( h θ ( x ( i ) ) − y ( i ) ) \nabla_\theta J(\theta) = x^{(i)} (h_\theta(x^{(i)}) - y^{(i)}) θJ(θ)=x(i)(hθ(x(i))y(i))

其中:

  • x ( i ) x^{(i)} x(i) 是第i个样本的特征向量。
  • h θ ( x ( i ) ) h_\theta(x^{(i)}) hθ(x(i)) 是第i个样本的预测概率。
  • y ( i ) y^{(i)} y(i) 是第i个样本的实际标签。
总结

逻辑回归中代价函数的梯度为:

∂ J ( θ ) ∂ θ = x ( i ) ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J(\theta)}{\partial \theta} = x^{(i)} (h_\theta(x^{(i)}) - y^{(i)}) θJ(θ)=x(i)(hθ(x(i))y(i))

这个梯度告诉我们如何调整模型参数 θ \theta θ 来最小化代价函数,这是梯度下降优化中训练逻辑回归模型的关键组成部分。

代码实现

def dJ(theta, X, y, i):
    return np.array(X[i]) * (-y[i] + sigmoid(np.matmul(np.array(X[i]), theta)))

def train(theta, X, y, num_epoch, learning_rate):
    for num_epoch in range(int(num_epoch)):
        for i in range(len(X)):
            theta -= float(learning_rate) * dJ(theta, X, y,i )
    return theta

def predict(update_theta, X):
    y_pred = []
    for i in range(len(X)):
        if sigmoid(np.matmul(X[i], update_theta)) >= 0.5:
            y_pred.append(1)
        else:
            y_pred.append(0)
    return y_pred

参考资料:

  • 在YouTube上观看视频
  • Alex Xu的《机器学习系统设计》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/758806.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字化那点事:一文读懂数字乡村

一、数字乡村的定义 数字乡村是指利用信息技术和数字化手段&#xff0c;推动乡村社会经济发展和治理模式变革&#xff0c;提升乡村治理能力和公共服务水平&#xff0c;实现乡村全面振兴的一种新型发展模式。它包括农业生产的数字化、乡村治理的智能化、乡村生活的现代化等方面…

【ai】trition:tritonclient.utils.shared_memory 仅支持linux

Can’t find tritonclient.utils.shared_memory on WIN10 #4149yolov4的python客户端 导入以后,windows 的pycharm 就是看不到折腾了很久:SaviorEnv 环境下安装tritonclient[all]也会失败 (base) C:\Users\zhangbin>conda create -n SaviorEnv python=3.8 Collecting pack…

信号与系统-实验5 离散时间系统的时域分析

一、实验目的 1、理解离散信号的定义与时域特征&#xff0c;掌握在时域求解信号的各种变换运算&#xff1b; 2、掌握离散系统的单位响应及其 MATLAB 实现的方法&#xff1b; 3、掌握离散时间序列卷积及其 MATLAB 实现的方法&#xff1b; 4、掌握利用 MATLAB 求解微分方程&a…

MySQL高级-MVCC-undo log 版本链

文章目录 1、undo log2、undo log 版本链2.1、然后&#xff0c;有四个并发事务同时在访问这张表。2.1.1、修改id为30记录&#xff0c;age改为32.1.2、修改id为30记录&#xff0c;name改为A32.1.3、修改id为30记录&#xff0c;age改为10 2.2、总结 1、undo log 回滚日志&#xf…

2.WeBASE一键部署

一、官方文档 一键部署可以在 同机 快速搭建WeBASE管理台环境&#xff0c;方便用户快速体验WeBASE管理平台。 一键部署会搭建&#xff1a;节点&#xff08;FISCO-BCOS 2.0&#xff09;、管理平台&#xff08;WeBASE-Web&#xff09;、节点管理子系统&#xff08;WeBASE-Node-…

单片机学习(14)--DS18B20温度传感器

DS18B20温度传感器 13.1DS18B20温度传感器基础知识1.DS18B20介绍2.引脚及应用电路3.内部结构框图4.存储器框图5.单总线介绍6.单总线电路规范7.单总线时序结构8.DS18B20操作流程9.DS18B20数据帧 13.2DS18B20温度读取和温度报警器代码1.DS18B20温度读取&#xff08;1&#xff09;…

Keil汇编相关知识

一、汇编的组成 1.汇编指令&#xff1a;在内存中占用内存&#xff0c;执行一条汇编指令会让处理器进行相关运算 分类&#xff1a;数据处理指令&#xff0c;跳转指令&#xff0c;内存读写指令&#xff0c;状态寄存器传送指令&#xff0c;软中断产生指令&#xff0c;协助处理器…

项目菜单配置

stores/index.js import {createStore } from "vuex"; //计算高度 let height window.innerHeight;//计算分辨率 let width window.innerWidth;let activeIndex localStorage.getItem("activeIndex"); if (activeIndex null || activeIndex "&q…

基于单片机技术的按键扫描电路分析

摘 要&#xff1a; 单片机应用技术被广泛应用于各种智能控制系统中&#xff0c;是电子信息类专业学生必修的一门专业课。在单片机端口信息输入模块中&#xff0c;按键是主要元器件之一&#xff0c;笔者主要介绍矩阵键盘的电路设计及控制程序编写&#xff0c;分析了单片机端口连…

商城自动化测试实战 —— 登录+滑块验证

hello大家好&#xff0c;我是你们的小编&#xff01; 本商城测试项目采取PO模型和数据分离式架构&#xff0c;采用pytestseleniumjenkins结合的方式进行脚本编写与运行&#xff0c;项目架构如下&#xff1a; 1、创建项目名称&#xff1a;code_shopping&#xff0c;创建所需项目…

springboot是否可以代替spring

Spring Boot不能直接代替Spring&#xff0c;但它是Spring框架的一个扩展和增强&#xff0c;提供了更加便捷和高效的开发体验。以下是关于Spring Boot和Spring关系的详细解释&#xff1a; Spring框架&#xff1a; Spring是一个广泛应用的开源Java框架&#xff0c;提供了一系列模…

Linux 2-Vim使用

1 什么是vi及vim&#xff1f; vi是文本编辑器&#xff1b;vim是程序开发工具。 2 vi的几种模式 1 一般模式&#xff1a;vi <fileName> 就进入命令模式&#xff0c;可以删除或者复制粘贴 2 编辑模式&#xff1a;修改内容 3 命令行模式&#xff1a;最下面一行&#xf…

追觅科技25届校招校招24年社招科技北森题库商业推理综合测评答题攻略、通关技巧

一、追觅科技这家公司怎么样&#xff1f; 追觅科技是一家在智能清洁家电领域表现出色的企业。 二、追觅科技待遇怎么样 追觅科技的待遇在业内具有竞争力&#xff0c;具体信息如下&#xff1a; 1. **薪酬结构**&#xff1a;根据对外经济贸易大学招生就业处发布的2023届校园招…

一、安装VMware16

本篇来源&#xff1a;山海同行 本篇地址&#xff1a;https://shanhaigo.cn/courseDetail/1805875642621952000 本篇资源&#xff1a;以整理到-山海同行 一、VMware虚拟机下载 1. 官网下载 1. 打开官网 打开VMware官网地址&#xff1a;https://www.vmware.com/ 2. 选择下载产…

ctfshow sqli-labs web532--web540

web532 时间盲注 admin")闭合 import requestsurl"https://8b83d32c-8348-4393-ad72-08d00f7f6cd0.challenge.ctf.show/" flag"" i0 while True:i 1low 32high 127while low < high:mid (lowhigh)//2#payloadf"if((ascii(substr((databas…

大语言模型(LLMs)全面学习指南,初学者入门,一看就懂!

大语言模型&#xff08;LLMs&#xff09;作为人工智能&#xff08;AI&#xff09;领域的一项突破性发展&#xff0c;已经改变了自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff08;ML&#xff09;应用的面貌。这些模型&#xff0c;包括OpenAI的GPT-4o和Google的gem…

kafka(一)原理(2)组件

一、broker 1、介绍 kafka服务器的官方名字&#xff0c;一个集群由多个broker组成&#xff0c;一个broker可以容纳多个topic。 2、工作流程 3、重要参数 参数名称 描述 replica.lag.time.max.ms ISR中&#xff0c;如果Follower长时间未向Leader发送通信请求或同步数据&a…

计算机图形学笔记----矩阵

矩阵和标量的运算 ,则 矩阵与矩阵相乘 的矩阵A&#xff0c;的矩阵B。两矩阵&#xff0c;结果为的矩阵&#xff0c;第一个矩阵的列数必须和第二个矩阵的行数相同&#xff0c;否则不能相乘 &#xff0c;中的每个元素等于A的第i行所对应的矢量和B的第j列所对应的矢量进行矢量点…

【滚动哈希】2156. 查找给定哈希值的子串

本文涉及知识点 滚动哈希 LeetCode2156. 查找给定哈希值的子串 给定整数 p 和 m &#xff0c;一个长度为 k 且下标从 0 开始的字符串 s 的哈希值按照如下函数计算&#xff1a; hash(s, p, m) (val(s[0]) * p0 val(s[1]) * p1 … val(s[k-1]) * pk-1) mod m. 其中 val(s[…

015、HBase分布式数据库与传统数据库的深度对比

目录 HBase分布式数据库与传统数据库的深度对比 1. 数据模型 1.1 传统关系型数据库 1.2 HBase 2. 扩展性 2.1 传统关系型数据库 2.2 HBase 3. 查询语言 3.1 传统关系型数据库 3.2 HBase 4. 事务支持 4.1 传统关系型数据库 4.2 HBase 5. 数据一致性 5.1 传统关系型…