当前位置: 首页 > news >正文

[机器学习] 监督学习之线性回归与逻辑回归

这里写目录标题

    • 一、监督学习概述
    • 二、线性回归
      • (一)模型表示
      • (二)损失函数
      • (三)梯度下降算法
      • 导入所需库
      • 生成模拟数据(可替换为真实数据)
      • 初始化参数并进行训练
      • 可视化损失函数随迭代次数的变化情况(可选,用于查看训练效果)
      • 使用训练好的模型进行预测(示例预测新的样本,这里可根据实际需求调整)
    • 三、逻辑回归
      • (一)模型表示
      • (二)损失函数
      • (三)梯度下降与参数更新
    • 四、模型评估指标
      • (一)回归问题评估指标
      • (二)分类问题评估指标
    • 五、过拟合与欠拟合
    • 六、正则化

一、监督学习概述

监督学习是利用有标记的数据进行模型训练,使模型能够对未知数据进行预测。训练数据包含输入特征(通常用 (x) 表示)和对应的输出标签(通常用 (y) 表示)。其主要任务可分为回归(预测连续值)和分类(预测离散类别)。

二、线性回归

(超爽中英!) 2024公认最好的【吴恩达机器学习】教程!附课件代码 Machine Learning Specialization

(一)模型表示

单变量线性回归模型: h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_{0}+\theta_{1}x hθ(x)=θ0+θ1x,其中 θ 0 \theta_{0} θ0 为截距, θ 1 \theta_{1} θ1 为斜率。

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt# 生成模拟数据(这里简单地使用线性关系加一些噪声来模拟)
np.random.seed(0)
x = np.linspace(0, 10, 100).reshape(-1, 1)  # 生成100个在0到10之间均匀分布的x值,并转换为列向量
theta_0_true = 2  # 真实的截距
theta_1_true = 3  # 真实的斜率
y_true = theta_0_true + theta_1_true * x
y = y_true + np.random.normal(0, 2, size=(100, 1))  # 添加一些正态分布的噪声模拟实际观测值# 创建线性回归模型对象并拟合数据
model = LinearRegression()
model.fit(x, y)# 获取拟合的参数
theta_0_fit = model.intercept_[0]
theta_1_fit = model.coef_[0][0]# 定义预测函数(其实可以直接使用model.predict方法进行预测,这里只是为了形式统一展示)
def h_theta(x, theta_0, theta_1):"""根据拟合的参数进行预测"""return theta_0 + theta_1 * x# 使用拟合的模型进行预测
y_pred = h_theta(x, theta_0_fit, theta_1_fit)# 可视化数据和拟合的直线
plt.scatter(x, y, label='Observed Data')
plt.plot(x, y_pred, color='r', label='Fitted Line')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Linear Regression')
plt.legend()
plt.show()

代码中,使用了 sklearn 库中的 LinearRegression 类来拟合线性回归模型,它内部已经实现了高效的最小二乘法计算等逻辑,通过调用 fit 方法传入输入特征 x 和目标值 y 就可以完成模型的拟合,然后可以通过 intercept_ 属性获取截距(对应 theta_0),通过 coef_ 属性获取系数(对应 theta_1)
在这里插入图片描述

多变量线性回归模型: h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T x h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\cdots+\theta_{n}x_{n}=\theta^{T}x hθ(x)=θ0+θ1x1+θ2x2++θnxn=θTx,这里 x = [ 1 x 1 x 2 ⋮ x n ] x = \begin{bmatrix} 1 \\ x_{1} \\ x_{2} \\ \vdots \\ x_{n} \end{bmatrix} x= 1x1x2xn , θ = [ θ 0 θ 1 θ 2 ⋮ θ n ] \theta = \begin{bmatrix} \theta_{0} \\ \theta_{1} \\ \theta_{2} \\ \vdots \\ \theta_{n} \end{bmatrix} θ= θ0θ1θ2θn

(二)损失函数

损失函数衡量了当前模型预测值与真实目标值之间的差异程度。

均方误差损失函数: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2} J(θ)=2m1i=1m(hθ(x(i))y(i))2,其中 (m) 为训练样本数量, x ( i ) x^{(i)} x(i) y ( i ) y^{(i)} y(i) 分别是第 (i) 个训练样本的特征和标签。

def compute_loss(x, y, theta):"""计算均方误差损失函数。参数:x: 特征矩阵,形状为 (m, n+1),m是样本数量,n是特征数量(包含常数项1对应的列)y: 目标值向量,形状为 (m, 1)theta: 参数向量,形状为 (n+1, 1)返回:loss: 计算得到的均方误差损失值"""m = x.shape[0]predictions = np.dot(x, theta)loss = np.sum((predictions - y) ** 2) / (2 * m)return loss

(三)梯度下降算法

梯度下降算法,在每次迭代中,根据当前参数下预测值与真实值的误差来计算梯度,进而按照学习率alpha更新参数theta,同时记录每次迭代的损失值到loss_history列表中,这样可以后续查看损失函数的收敛情况。

参数更新公式: θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_{j}:=\theta_{j}-\alpha\frac{\partial J(\theta)}{\partial\theta_{j}} θj:=θjαθjJ(θ)

对于单变量线性回归:
∂ J ( θ ) ∂ θ 0 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) \frac{\partial J(\theta)}{\partial\theta_{0}}=\frac{1}{m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)}) θ0J(θ)=m1i=1m(hθ(x(i))y(i))
∂ J ( θ ) ∂ θ 1 = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x ( i ) \frac{\partial J(\theta)}{\partial\theta_{1}}=\frac{1}{m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)} θ1J(θ)=m1i=1m(hθ(x(i))y(i))x(i)

对于多变量线性回归:
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial\theta_{j}}=\frac{1}{m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i) j = 0 , 1 , ⋯ , n j = 0, 1,\cdots,n j=0,1,,n,其中 α \alpha α为学习率,控制每次参数更新的步长。

定义梯度下降训练函数(多变量)

def gradient_descent(x, y, theta, alpha, num_iters):"""使用梯度下降算法来更新线性回归的参数theta。参数:x: 特征矩阵,形状为 (m, n+1),m是样本数量,n是特征数量(包含常数项1对应的列)y: 目标值向量,形状为 (m, 1)theta: 参数向量,初始值,形状为 (n+1, 1)alpha: 学习率,控制每次更新的步长num_iters: 迭代次数返回:theta: 经过多次迭代更新后的参数向量loss_history: 每次迭代对应的损失值历史记录,用于查看训练过程损失变化情况"""m = x.shape[0]loss_history = []for _ in range(num_iters):error = np.dot(x, theta) - ygradient = np.dot(x.T, error) / mtheta -= alpha * gradientloss = compute_loss(x, y, theta)loss_history.append(loss)return theta, loss_history

实践
以下是使用Python实践多变量线性回归模型(通过梯度下降法训练参数θ)的完整示例代码,包含了数据生成、模型训练以及预测的过程。

导入所需库

import numpy as np
import matplotlib.pyplot as plt

生成模拟数据(可替换为真实数据)

# 设置随机种子,保证结果可复现
np.random.seed(0)
# 样本数量
m = 100
# 特征数量(不包含截距项对应的特征,这里设为2个特征)
n = 2
# 生成特征矩阵,添加一列全为1的列作为截距项对应的特征
x = np.column_stack((np.ones(m), np.random.rand(m, n)))
# 真实的参数(用于生成模拟的目标值,实际中是未知的)
true_theta = np.array([[2], [3], [4]])
# 生成目标值,添加一些随机噪声模拟真实情况
y = np.dot(x, true_theta) + np.random.randn(m, 1) * 0.5

初始化参数并进行训练

# 初始化theta参数,初始化为全0向量(形状要与特征数量对应,包含截距项对应的参数)
theta_initial = np.zeros((n + 1, 1))
# 学习率
alpha = 0.01
# 迭代次数
num_iters = 1000
# 执行梯度下降训练
theta_trained, loss_history = gradient_descent(x, y, theta_initial, alpha, num_iters)

可视化损失函数随迭代次数的变化情况(可选,用于查看训练效果)

plt.plot(loss_history)
plt.xlabel('Iterations')
plt.ylabel('Loss')
plt.title('Loss Function Convergence')
plt.show()

在这里插入图片描述
迭代次数达到一个值后, 预测值与真实目标值之间的差异程度出现拐点。后面的迭代没有什么成效了。

使用训练好的模型进行预测(示例预测新的样本,这里可根据实际需求调整)

# 生成新的样本数据(这里简单示例,可按需修改)
new_x = np.array([[1, 0.5, 0.6]])
# 进行预测
prediction = np.dot(new_x, theta_trained)
print("预测结果:", prediction)

预测结果: [[5.78208147]]

在上述代码中:

  1. 首先通过numpy库生成了模拟的特征矩阵x和对应的目标值y,模拟了一个多变量线性回归的数据场景,其中真实的参数true_theta是我们自己设定的,但实际应用中是未知的,需要通过训练去估计。
  2. 接着定义了计算损失函数(均方误差)的函数compute_loss,它衡量了当前模型预测值与真实目标值之间的差异程度,是评估模型好坏以及指导梯度下降训练的重要指标。
  3. 然后定义了gradient_descent函数,它实现了梯度下降算法,在每次迭代中,根据当前参数下预测值与真实值的误差来计算梯度,进而按照学习率alpha更新参数theta,同时记录每次迭代的损失值到loss_history列表中,这样可以后续查看损失函数的收敛情况。
  4. 之后初始化了参数theta,设定了学习率和迭代次数,调用gradient_descent函数进行训练,得到训练好的参数theta_trained以及损失值的变化记录loss_history,并通过matplotlib库可视化了损失值随迭代次数的变化,直观查看训练的收敛效果。
  5. 最后,使用训练好的模型对新的样本数据进行预测,展示了模型的应用过程。

三、逻辑回归

(一)模型表示

逻辑回归用于二分类问题,模型假设函数: h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x)=\frac{1}{1 + e^{-\theta^{T}x}} hθ(x)=1+eθTx1,其输出值表示样本属于正类的概率。

(二)损失函数

对数损失函数: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) ln ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) ln ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1}{m}\sum_{i = 1}^{m}[y^{(i)}\ln(h_{\theta}(x^{(i)}))+(1 - y^{(i)})\ln(1 - h_{\theta}(x^{(i)}))] J(θ)=m1i=1m[y(i)ln(hθ(x(i)))+(1y(i))ln(1hθ(x(i)))]

(三)梯度下降与参数更新

参数更新同样使用梯度下降算法,其梯度计算为:
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial\theta_{j}}=\frac{1}{m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)),然后按照 θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_{j}:=\theta_{j}-\alpha\frac{\partial J(\theta)}{\partial\theta_{j}} θj:=θjαθjJ(θ) 更新参数。

四、模型评估指标

(一)回归问题评估指标

  • 均方误差(MSE) M S E = 1 m ∑ i = 1 m ( y p r e d ( i ) − y ( i ) ) 2 MSE=\frac{1}{m}\sum_{i = 1}^{m}(y_{pred}^{(i)}-y^{(i)})^{2} MSE=m1i=1m(ypred(i)y(i))2
  • 均方根误差(RMSE) R M S E = 1 m ∑ i = 1 m ( y p r e d ( i ) − y ( i ) ) 2 RMSE=\sqrt{\frac{1}{m}\sum_{i = 1}^{m}(y_{pred}^{(i)}-y^{(i)})^{2}} RMSE=m1i=1m(ypred(i)y(i))2
  • 平均绝对误差(MAE) M A E = 1 m ∑ i = 1 m ∣ y p r e d ( i ) − y ( i ) ∣ MAE=\frac{1}{m}\sum_{i = 1}^{m}\vert y_{pred}^{(i)}-y^{(i)}\vert MAE=m1i=1mypred(i)y(i)
  • (R^{2}) 分数 R 2 = 1 − ∑ i = 1 m ( y p r e d ( i ) − y ( i ) ) 2 ∑ i = 1 m ( y ( i ) − y ˉ ) 2 R^{2}=1-\frac{\sum_{i = 1}^{m}(y_{pred}^{(i)}-y^{(i)})^{2}}{\sum_{i = 1}^{m}(y^{(i)}-\bar{y})^{2}} R2=1i=1m(y(i)yˉ)2i=1m(ypred(i)y(i))2,其中 y ˉ \bar{y} yˉ y ( i ) y^{(i)} y(i) 的均值。

(二)分类问题评估指标

  • 准确率(Accuracy) A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP + TN}{TP + TN + FP + FN} Accuracy=TP+TN+FP+FNTP+TN,其中 T P TP TP(True Positive)为真阳性, T N TN TN(True Negative)为真阴性,(FP)(False Positive)为假阳性,(FN)(False Negative)为假阴性。
  • 精确率(Precision) P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP + FP} Precision=TP+FPTP
  • 召回率(Recall) R e c a l l = T P T P + F N Recall=\frac{TP}{TP + FN} Recall=TP+FNTP
  • (F1) 分数 F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2\times Precision\times Recall}{Precision + Recall} F1=Precision+Recall2×Precision×Recall
  • ROC 曲线与 AUC 值:ROC 曲线以假阳性率( F P R = F P T N + F P FPR=\frac{FP}{TN + FP} FPR=TN+FPFP)为横轴,真阳性率( T P R = T P T P + F N TPR=\frac{TP}{TP + FN} TPR=TP+FNTP)为纵轴绘制。AUC(Area Under the Curve)值是 ROC 曲线下的面积,AUC 值越大,模型分类性能越好。

五、过拟合与欠拟合

  • 过拟合:模型过于复杂,在训练数据上表现很好,但在测试数据上表现不佳,泛化能力差,可能是对训练数据中的噪声和细节过度拟合。
  • 欠拟合:模型过于简单,无法捕捉数据中的模式和规律,在训练数据上表现就不理想。

六、正则化

  • L1 正则化 J ( θ ) = J 0 ( θ ) + λ ∑ j = 1 n ∣ θ j ∣ J(\theta)=J_{0}(\theta)+\lambda\sum_{j = 1}^{n}\vert\theta_{j}\vert J(θ)=J0(θ)+λj=1nθj,其中 J 0 ( θ ) J_{0}(\theta) J0(θ) 是原始损失函数, λ \lambda λ 为正则化参数。L1 正则化可导致部分参数为 0,实现特征选择,使模型稀疏。
  • L2 正则化(岭回归) J ( θ ) = J 0 ( θ ) + λ ∑ j = 1 n θ j 2 J(\theta)=J_{0}(\theta)+\lambda\sum_{j = 1}^{n}\theta_{j}^{2} J(θ)=J0(θ)+λj=1nθj2。L2 正则化能防止过拟合,使参数值相对较小,模型更平滑。

正则化后的梯度下降更新公式,对于 L1 正则化:
θ j : = θ j − α ( 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m sgn ( θ j ) ) \theta_{j}:=\theta_{j}-\alpha\left(\frac{1}{m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}+\frac{\lambda}{m}\text{sgn}(\theta_{j})\right) θj:=θjα(m1i=1m(hθ(x(i))y(i))xj(i)+mλsgn(θj)) sgn ( θ j ) \text{sgn}(\theta_{j}) sgn(θj) θ j \theta_{j} θj 的符号函数。

对于 L2 正则化:
θ j : = θ j − α ( 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) + 2 λ m θ j ) \theta_{j}:=\theta_{j}-\alpha\left(\frac{1}{m}\sum_{i = 1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}+\frac{2\lambda}{m}\theta_{j}\right) θj:=θjα(m1i=1m(hθ(x(i))y(i))xj(i)+m2λθj)

相关文章:

[机器学习] 监督学习之线性回归与逻辑回归

这里写目录标题 一、监督学习概述二、线性回归(一)模型表示(二)损失函数(三)梯度下降算法导入所需库生成模拟数据(可替换为真实数据)初始化参数并进行训练可视化损失函数随迭代次数的…...

十五、全局搜索正则表达式

一.grep简介 grep 全程Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特 定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep和egrep 二.grep的工作…...

kali Linux 安装配置教程(图文详解)

目录 一、下载安装VMware二、下载kali镜像三、安装kali到虚拟机 一、下载安装VMware 点我查看 二、下载kali镜像 官网下载:https://www.kali.org/get-kali/#kali-platforms 演示下载的为下图左边的,实际我们直接下载右侧虚拟机的直接使用就行 右侧下…...

QT QTableWidget::setModel”: 无法访问 private成员

//严重性代码说明项目文件行禁止显示状态 //错误C2248 “QTableWidget::setModel”: 无法访问 private 成员(在“QTableWidget”类中声明) QSqlQueryModel* sql_model; ui.tableView_database->setModel(sql_model); //ok ui.tableWidget_database->setModel(sql_model)…...

C#怎么判断电脑是否联网

在 C# 中,可以通过几种方法检测计算机是否联网。以下是几种常用的方式: 1. 使用 System.Net.NetworkInformation.Ping 类 通过发送一个 Ping 请求到公共 DNS 服务器(如 Google 的 DNS 8.8.8.8)来检测是否联网。这是最常见的一种…...

丢垃圾视频时间检测 -- 基于状态机的实现

文章目录 OverviewKey PointsPseudo-code Overview 需要考虑的方面 状态定义和转换条件时序约束空间约束异常处理 状态机的设计需要考虑的场景: 没有人人进入人携带垃圾人离开但垃圾留下垃圾消失异常情况(检测失败、多人多垃圾等) Key P…...

EEG2Rep自监督脑电大模型文献阅读

原文网址: EEG2Rep: Enhancing Self-supervised EEG Representation... - Google 学术搜索https://scholar.google.com/scholar?hlzh-CN&as_sdt0%2C5&qEEG2Rep%3AEnhancingSelf-supervisedEEGRepresentationThroughInformativeMaskedInputs&btnG 1.文…...

【前端知识】React简单入门

React语法介绍 概述一、产生背景与发展历程二、主要特点三、技术细节四、应用场景与优势五、学习与实践 JSX语法一、JSX的基本概念二、JSX的基本使用三、JSX中的JavaScript表达式四、JSX的条件渲染五、JSX的列表渲染六、JSX的样式处理七、JSX的其他注意事项 基础语法一、基础概…...

高通---Camera调试流程及常见问题分析

文章目录 一、概述二、Camera配置的整体流程三、Camera的代码架构图四、Camera数据流的传递五、camera debug FAQ 一、概述 在调试camera过程中,经常会遇到各种状况,本篇文章对camera调试的流程进行梳理。对常见问题的提供一些解题思路。 二、Camera配…...

电压电流声音信号采集与分析系统

基于Labview的电压电流与声音信号采集与分析系统可以同时采集:电压、电流与振动信号。该系统部件可以采集传感器的真实数据,而且可以对采集的信号进行时域与频域分析,并可以实时显示历史数据,保存历史数据。具体的功能如下&#x…...

MongoDB语法及MongoTemplate用法

文章目录 概念操作数据库语法数据库及文档操作文档操作 整合springboot的MongoTemplate用法springboot配置插入删除更新查询 概念 1.MongoDB 是一个文档数据库,数据以 BSON 方式存储(类似于json) 2.文档(Document)&am…...

【git reset】本地下载特定历史提交哈希值的github文件【未联网服务器】进行git reset操作

本地电脑下载git文件,并进行git reset操作 问题描述:解决方法:方法1:直接下载特定版本的github压缩包。方法二: 在本地windows电脑上安装git工具进行git reset版本回退,之后上传相应版本的压缩包到服务器上…...

【开源安全保护】如何安装JumpServer堡垒机

【开源安全保护】如何安装JumpServer堡垒机 什么是堡垒机 大家好,我是星哥,今天我以前来认识堡垒机 堡垒机(Bastion Host),也称为跳板机(Jump Server),是指在计算机网络中&#x…...

log4j漏洞复现--vulhub靶场

声明:学习过程参考了同站的B1g0rang大佬的文章 Web网络安全-----Log4j高危漏洞原理及修复(B1g0rang) CVE-2021-44228 RCE漏洞 Log4j 即 log for java(java的日志) ,是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输…...

K8s面试系列:K8s常用 API 资源总结速记

写在前面 博文内容为 K8s 中常用的API 资源简单总结适合对K8s 有基本认知,温习,面试准备的小伙伴内容涉及:API 资源组成 ,SSA 和 CSA 资源操作方式,以及下面资源类别简单描述 工作负载:Deployments,StatefulSets,HorizontalPodAutoscaler (HPA)…服务: Service,Ingress,E…...

汽车免拆案例 | 2007款宝马650i车发动机偶尔无法起动

故障现象 一辆2007款宝马650i车,搭载N62B48B发动机,累计行驶里程约为26万km。车主反映,发动机偶尔无法起动,故障频率较低,十几天出现1 次,且故障出现时起动机不工作。 故障诊断  接车后试车,…...

前端(三)html标签(2)

html标签(2) 文章目录 html标签(2)一、列表标签二、表格三、form表单 一、列表标签 html中的列表分为无序列表、有序列表和自定义列表。 <!--无序列表的使用--> <!--pycharm中可以用ul>li*3tab的快捷键快速生成无序列表--> <ul><li>秒杀</li&g…...

D91【python 接口自动化学习】- pytest基础用法

day91 pytest的setup&#xff0c;setdown详解&#xff08;三&#xff09; 学习日期&#xff1a;20241207 学习目标&#xff1a;pytest基础用法 -- pytest的setup&#xff0c;setdown详解&#xff08;三&#xff09; 学习笔记&#xff1a; setup、teardown详解&#xff08;三…...

云桌面:云计算桌面

目录 云桌面的定义和核心概念 技术架构详解 主流架构详解 管理成本分析 安全性措施 应用场景详解 云桌面的定义和核心概念 云桌面是一种通过云计算技术提供的虚拟桌面服务&#xff0c;它允许用户通过网络访问远程服务器上的虚拟机&#xff0c;这些虚拟机为用户提供了一个…...

Word处理表格的一些宏

目录 1、表格首行居中2、表格内容靠左上下居中&#xff08;排除首行&#xff09; 1、表格首行居中 说明&#xff1a; 遇到错误将进行捕获&#xff0c;然后继续处理下一个表格 宏&#xff1a; Sub 表格首行居中()Dim tbl As tableOn Error Resume Next 错误时继续执行下一个…...

Linux网络编程---本地套接字

1.概述 本地套接字 1&#xff1a;作用:本地的进程间通信 2.有关系的进程间通信 3.没有关系的进程间的通信 本地套结字实现流程和网络套结字实现相似&#xff0c;一般采用tcp 二.通信流程 本地套结字通信的流程:1.服务器端:1.1 int fd socket(AF_UNIX/AF_LOCAL,…...

C#自动验证发票真假的程序

C#自动验证发票真假的程序 using Microsoft.Azure.CognitiveServices.Vision.ComputerVision; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models; using System; using System.IO; using System.Threading.Tasks;namespace InvoiceValidation {class Pr…...

后端技术进阶知识总结

前端开发、后端开发、AI算法与应用等技术进阶知识总结 前言1.前端开发2.后端开发3.AI算法3.1 Studio级别的AI工具使用 前言 本文不记录基础性问题和详细解决方案。只记录key idea。 1.前端开发 2.后端开发 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&…...

opencv复习

目录 1.core 1.图像变换 1.1 affine仿射变换 1.2 透视变换 2.四元数&#xff08;旋转&#xff09; 2.1 轴角转四元数 2.2 旋转矩阵转四元数 2.3 欧拉角转旋转矩阵 2.4 四元数转旋转矩阵 2.5 四元数用eigen用的比较多 2. imgproc. Image Processing 2.1 bilateralF…...

【Unity高级】在编辑器中如何让物体围绕一个点旋转固定角度

本文介绍如何在编辑器里让物体围绕一个点旋转固定角度&#xff0c;比如上图里的Cube是围绕白色圆盘的中心旋转45度的。 目标&#xff1a; 创建一个在 Unity 编辑器中使用的旋转工具&#xff0c;使开发者能够在编辑模式下快速旋转一个物体。 实现思路&#xff1a; 编辑模式下…...

通过IP远程连接MySQL服务时不允许连接到这个MySQL服务器

当你在连接Mysql时报这个错误时 is not allowed to connect to this MySQL server&#xff0c;意思是 MySQL 服务器不允许来自 IP 地址的连接。这通常是由于 MySQL 服务器的访问控制列表&#xff08;ACL&#xff09;限制了特定主机的连接。 要解决这个问题&#xff0c;你需要授…...

试题转excel;pdf转excel;试卷转Excel,word试题转excel

一、问题描述 一名教师朋友&#xff0c;偶尔会需要整理一些高质量的题目到excel中 以往都是手动复制搬运&#xff0c;几百道题几乎需要一个下午的时间 关键这些事&#xff0c;枯燥无聊费眼睛&#xff0c;实在是看起来就很蠢的工作 就想着做一个工具&#xff0c;可以自动处理…...

wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库

wordpress网站使用Linux宝塔面板添加mysql数据库&#xff0c;使用phpMyAdmin工具导入sql数据库文件&#xff0c;会有最大限制50M。即使把sql数据库文件压缩为gzip或zip压缩包&#xff0c;压缩包也超过50M&#xff0c;该怎么办&#xff1f;怎样导入超过50M数据库呢&#xff1f; …...

VCP-CLIP A visual context prompting modelfor zero-shot anomaly segmentation

GitHub - xiaozhen228/VCP-CLIP: (ECCV 2024) VCP-CLIP: A visual context prompting model for zero-shot anomaly segmentation 需要构建正样本&#xff0c;异常样本&#xff0c;以及对应的Mask...

【原生js案例】webApp实现鼠标移入移出相册放大缩小动画

图片相册这种动画效果也很常见&#xff0c;在我们的网站上。鼠标滑入放大图片&#xff0c;滑出就恢复原来的大小。现在我们使用运动定时器来实现这种滑动效果。 感兴趣的可以关注下我的系列课程【webApp之h5端实战】&#xff0c;里面有大量的css3动画效果制作原生知识分析&…...

杂谈随笔-关于unity开发游戏

最近有在做unity的游戏开发&#xff0c;都是自学&#xff0c;甚至没有完整的课程体系…… 在犹豫要不要出系列教程&#xff0c;帮助新手快速入门的同时算是巩固一下基础知识。 那这篇文章先谈谈我对于引擎开发游戏的一些小观点&#xff0c;算是做了这么十几个星期的微不足道的…...

base64转file文件对象

1.base64转file文件对象 //将base64转换为文件 dataURLtoFile(dataurl, filename) { var arr dataurl.split(,),mime arr[0].match(/:(.*?);/)[1],bstr atob(arr[1]),n bstr.length,u8arr new Uint8Array(n);while (n--) {u8arr[n] bstr.charCodeAt(n);}return new Fil…...

【jvm】为什么要有GC

目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存&#xff0c;这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理&#xff0c;降低了内存泄漏和内存溢出等问…...

开发指南085-大号版elementUI

ElementUI有些地方显示实在太小&#xff0c;不方便操作&#xff0c;需要放大&#xff1a; 1、el-dialog的标题栏那个关闭符号 使用如下方法放大 ::v-deep .el-dialog__headerbtn { font-size: 40px; font-weight: 700; top: 0px; } 2、el-table-column 设置sor…...

#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(下)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

使用WebStorm开发Vue3项目

记录一下使用WebStorm开发Vu3项目时的配置 现在WebStorm可以个人免费使用啦&#xff01;?? 基本配置 打包工具&#xff1a;Vite 前端框架&#xff1a;ElementPlus 开发语言&#xff1a;Vue3、TypeScript、Sass 代码检查&#xff1a;ESLint、Prettier IDE&#xff1a;WebSt…...

Mac 录制电脑系统内的声音的具体方法?

1.第一步&#xff1a;下载BlackHole 软件 方式1&#xff1a;BlackHole官方下载地址 方式2&#xff1a; 百度云下载 提取码: n5dp 2.第二步&#xff1a;安装BlackHole 双击下载好的BlackHole安装包&#xff0c;安装默认提示安装。 3.第三步&#xff1a;在应用程序中找到音频…...

计算机网络

1.网络协议是什么&#xff1f; 在计算机网络要做到有条不紊地交换数据&#xff0c;就必须遵守一些约定好的规则&#xff0c;比如交换数据地格式&#xff0c;是否需要发送一个应答信息。这些规则被称为网络协议。 分层结构 应用层&#xff1a;为计算机用户提供服务表示层&…...

爬取某市KFC餐厅信息(POST请求+PYMYSQL)

# 简介 本教程将指导您如何使用Python爬取石家庄市的KFC门店信息&#xff0c;并将这些信息存储到MySQL数据库中。我们将使用requests库来发送网络请求&#xff0c;pymysql库来操作MySQL数据库。 环境准备 在开始之前&#xff0c;请确保您已经安装了以下Python库&#xff1a…...

109.【C语言】数据结构之二叉树层序遍历

目录 1.知识回顾 2.代码实现 准备工作 LevelOrder函数 代码框架 关键代码 3.执行结果 1.知识回顾 层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章 截取的部分内容 定义:按层的方式遍历(,设n为树的深度,h1-->h2-->h3-->...-->hn) 以下面…...

Java转C之内存管理

从 Java 转向 C 语言开发&#xff0c;内存管理和指针是两个核心且关键的概念。这些概念在 Java 中被抽象和自动化处理&#xff0c;而在 C 语言中则需要开发者手动管理和操作。 目录 内存管理概述指针基础 指针的定义与初始化地址运算符 & 和解引用运算符 *指针运算 动态内…...

共享内存和信号量

一、共享内存原理 1、基础前提 共享内存是为了进程之间通信服务的。进程间的通信的核心是要让两个不同的进程看到同一份资源。之前的匿名管道通过父子进程继承的关系&#xff0c;让父子进程看到同一份资源&#xff0c;进而进行通信&#xff1b;命名管道则是通过唯一的路径让两…...

SED命令

基本用法&#xff1a; sed命令具体应用&#xff1a; 1.删除第2-5行 nl regular_express.txt | sed 2d结果&#xff1a; 2.在第二行之后新增两行&#xff0c;分别为"drink tea…" 和"drink beer?" nl regular_express.txt | sed 2 a\ drink tea...\…...

洛谷 P6368 [COCI2006-2007#6] MAGIJA C语言

题目&#xff1a;https://www.luogu.com.cn/problem/P6368 题目背景 知名魔术师 AlDimi Kartimi 需要你帮助他来设计他扑克牌的背面图案。 题目描述 众所周知&#xff0c;扑克牌的背面是一个矩形&#xff0c;通过做两边的中垂线可以将矩形分成相等的四部分。 AlDimi Karti…...

TDesign:Picker 选择器

Picker 选择器 API文档地址 单列选择器用法 /// view onTap:(){TDPicker.showMultiPicker(context,data: [controller.coinList],title: ,rightTextStyle: TextStyle(color: AppColors.ColorMain),onConfirm: (selected) {controller.onTapCoin(selected);Navigator.of(contex…...

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略

LLMs之Agent之Lares&#xff1a;Lares的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇博文介绍了 Lares&#xff0c;一个由简单的 AI 代理驱动的智能家居助手模拟器&#xff0c;它展现出令人惊讶的解决问题能力。 >> 背景痛点&#xff1a;每天都有新的…...

实验3-实时数据流处理-Flink

1.前期准备 &#xff08;1&#xff09;Flink基础环境安装 参考文章&#xff1a; 利用docker-compose来搭建flink集群-CSDN博客 显示为这样就成功了 &#xff08;2&#xff09;把docker&#xff0c;docker-compose&#xff0c;kafka集群安装配置好 参考文章&#xff1a; …...

axios笔记

一、axios是什么 前端最流行的ajax请求库 二、json-server json-server可以帮助我们搭建http服务 为什么要搭建http服务&#xff1f; &#xff1a;是因为我们用axios的时候&#xff0c;需要向服务端发送请求 我们需要服务端这样一个角色&#xff0c;来与axios结合做实践 1.…...

python拆分Excel文件

按Sheet拆分Excel 或 按照某一列的不同值拆分Excel。文档样式如下&#xff1a; 结果&#xff1a;红色是按照Sheet名拆出的&#xff0c;蓝色和橙色是某个Sheet按照某列的不同值拆分的。 代码&#xff1a; # -*- coding: utf-8 -*- """ 拆分excel文件——按照…...

使用IntelliJ IDEA开发Gradle插件并发布到本地

博主所用软件版本为&#xff1a; IntelliJ IDEA 2024.1.4 (Community Edition) Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1 1、制作gradle插件&#xff08;IntelliJ IDEA 2024.1.4&#xff09; 新建groovy工程&#xff0c;File–>New–>Project… 右键点…...