【吴恩达机器学习-week2】多个变量的特征缩放和学习率问题

news2024/11/17 4:33:49

特征缩放和学习率(多变量)

目标

  • 利用上一个实验中开发的多变量例程
  • 在具有多个特征的数据集上运行梯度下降
  • 探索学习率对梯度下降的影响
  • 通过 Z 分数归一化进行特征缩放,提高梯度下降的性能
import numpy as np
np.set_printoptions(precision=2)
import matplotlib.pyplot as plt
dlblue = '#0096ff'; dlorange = '#FF9300'; dldarkred='#C00000'; dlmagenta='#FF40FF'; dlpurple='#7030A0'; 
plt.style.use('./deeplearning.mplstyle')
from lab_utils_multi import  load_house_data, compute_cost, run_gradient_descent 
from lab_utils_multi import  norm_plot, plt_contour_multi, plt_equal_scale, plot_cost_i_w
  • 解释一下:np.set_printoptions(precision=2)

    np.set_printoptions(precision=2) 是 NumPy 中的函数,用于设置打印数组时的精度。通过设置 precision 参数为 2,它会将浮点数数组的打印精度限制为小数点后两位。这样可以使输出更加整洁和易读,尤其是在处理大型数组时。

问题陈述

与之前的实验类似,你将使用房价预测的示例。训练数据集包含许多具有 4 个特征(面积、卧室数、楼层数和房龄)的示例,如下表所示。请注意,在本实验中,大小特征是以平方英尺为单位的,而之前的实验中使用的是 1000 平方英尺。这个数据集比之前的实验数据集要大。

我们希望使用这些值构建一个线性回归模型,以便我们可以预测其他房屋的价格 - 比如,一所面积为 1200 平方英尺,有 3 间卧室,1 层,40 年房龄的房屋的价格。

数据集:

大小(平方英尺)卧室数楼层数房龄价格(1000美元)
9522165271.5
12443264232
19473217509.8
# load the dataset
X_train, y_train = load_house_data()
X_features = ['size(sqft)','bedrooms','floors','age']
  • 解释一下:X_train, y_train = load_house_data()

    def load_house_data():
        data = np.loadtxt("./data/houses.txt", delimiter=',', skiprows=1)
        X = data[:,:4]
        y = data[:,4]
        return X, y
    

    这段代码定义了一个名为 load_house_data 的函数,用于加载房屋数据集。

    函数的主要步骤如下:

    1. 使用 NumPy 的 loadtxt 函数从指定路径的文件中加载数据集。加载的文件是一个以逗号分隔的文本文件,其中第一行是列标题,因此我们通过 skiprows=1 参数跳过第一行
    2. 将加载的数据集分成特征矩阵 X 和目标向量 y。特征矩阵 X 包含所有行的前四列,而目标向量 y 包含所有行的第五列
    3. 最后,函数返回特征矩阵 X 和目标向量 y

    通过这个函数,我们可以方便地加载房屋数据集,并将其用于训练线性回归模型。

    • data[:,:4] 的含义

      是对二维数组 data 进行的切片操作。

      在二维数组中,使用逗号分隔的切片操作是针对行和列进行切片的。第一个 : 表示对行进行切片,第二个 :4 表示对列进行切片。

      因此,data[:,:4] 返回的是二维数组 data 的所有行和前四列的子数组,即一个二维的切片。

让我们通过绘制每个特征与价格的关系来查看数据集及其特征。

fig,ax=plt.subplots(1, 4, figsize=(12, 3), sharey=True)
for i in range(len(ax)):
    ax[i].scatter(X_train[:,i],y_train)
    ax[i].set_xlabel(X_features[i])
ax[0].set_ylabel("Price (1000's)")
plt.show()
  • 解释一下:sharey=True

    sharey=True指定了子图共享y轴。这意味着子图将共享相同的 y 轴范围,使得它们在垂直方向上对齐,并且更容易进行比较。

  • ax 是什么

    在Matplotlib中,ax 通常是指代图形中的坐标轴对象。在这个例子中,ax是一个包含四个子图坐标轴对象的数组。每个子图都可以在对应的坐标轴对象上进行绘图。

  • 解释一下:ax[i].scatter(X_train[:,i],y_train)

    • ax[i].scatter(X_train[:,i],y_train):这在第 i 个子图(ax[i])上绘制了一个散点图,其中 X_train[:,i] 表示训练数据中所有行的第 i 个特征的值,而 y_train 表示目标变量(通常是价格)。它显示了每个特征与目标变量之间的个别关系。
  • 解释一下:ax[i].set_xlabel(X_features[i])

    ax[i].set_xlabel(X_features[i]):这将第 i 个子图的 x 轴标签设置为第 i 个特征的名称X_features[i])。这有助于识别哪个特征正在被绘制。

  • 解释一下:ax[0].set_ylabel("Price (1000's)")

    这将第一个子图(因为 Python 的索引从0开始)的 y 轴标签设置为“价格(以千为单位)”。这表明目标变量表示价格,可能以千为单位。PS:因为 sharey=True ,所以只用设置一个子图的 y 轴标签

在这里插入图片描述

绘制每个特征与目标变量价格的图表,可以提供一些关于哪些特征对价格影响最大的线索。从上面的结果可以看出,房屋尺寸增加也会增加价格。卧室数量和楼层数似乎对价格影响不大。新房比旧房价格更高。

多变量梯度下降

以下是你在上一个实验室中开发的多变量梯度下降的方程式:

重复执行直到收敛:    {    w j : = w j − α ∂ J ( w , b ) ∂ w j    对于 j = 0..n-1 b    : = b − α ∂ J ( w , b ) ∂ b } \begin{align*} \text{重复执行直到收敛:} \; \lbrace \newline\; & w_j := w_j - \alpha \frac{\partial J(\mathbf{w},b)}{\partial w_j} \tag{1} \; & \text{对于 j = 0..n-1}\newline & b\ \ := b - \alpha \frac{\partial J(\mathbf{w},b)}{\partial b} \newline \rbrace \end{align*} 重复执行直到收敛:{}wj:=wjαwjJ(w,b)b  :=bαbJ(w,b)对于 j = 0..n-1(1)

其中, n n n 是特征数量,参数 w j w_j wj b b b 同时更新,并且

∂ J ( w , b ) ∂ w j = 1 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) x j ( i ) ∂ J ( w , b ) ∂ b = 1 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) \begin{align} \frac{\partial J(\mathbf{w},b)}{\partial w_j} &= \frac{1}{m} \sum\limits_{i = 0}^{m-1} (f_{\mathbf{w},b}(\mathbf{x}^{(i)}) - y^{(i)})x_{j}^{(i)} \tag{2} \\ \frac{\partial J(\mathbf{w},b)}{\partial b} &= \frac{1}{m} \sum\limits_{i = 0}^{m-1} (f_{\mathbf{w},b}(\mathbf{x}^{(i)}) - y^{(i)}) \tag{3} \end{align} wjJ(w,b)bJ(w,b)=m1i=0m1(fw,b(x(i))y(i))xj(i)=m1i=0m1(fw,b(x(i))y(i))(2)(3)

  • m m m 是数据集中的训练样本数量
  • f w , b ( x ( i ) ) f_{\mathbf{w},b}(\mathbf{x}^{(i)}) fw,b(x(i))是模型的预测值,而 y ( i ) y^{(i)} y(i) 是目标值

学习率

在讲座中讨论了一些与设置学习率 α \alpha α 相关的问题。学习率控制了参数更新的大小。参见上面的方程 ( 1 ) (1) 1。学习率是所有参数共享的。

让我们运行梯度下降算法,并尝试在我们的数据集上尝试几种 α \alpha α 的设置。

α = 9.9 e − 7 \alpha = 9.9e-7 α=9.9e7

#set alpha to 9.9e-7
_, _, hist = run_gradient_descent(X_train, y_train, 10, alpha = 9.9e-7)
  • run_gradient_descent 的实现:

    def run_gradient_descent(X,y,iterations=1000, alpha = 1e-6):
    
        m,n = X.shape # m 是训练集的个数,n 是特征值的个数(w 的个数)
        # initialize parameters
        initial_w = np.zeros(n)
        initial_b = 0
        # run gradient descent
        w_out, b_out, hist_out = gradient_descent_houses(X ,y, initial_w, initial_b,
                                                   compute_cost, compute_gradient_matrix, alpha, iterations)
        print(f"w,b found by gradient descent: w: {w_out}, b: {b_out:0.2f}")
        
        return(w_out, b_out, hist_out)
    

此时学习率太高了。解决方案没有收敛。成本增加而不是减少。让我们绘制结果:

plot_cost_i_w(X_train, y_train, hist)

在这里插入图片描述

右边的图显示了其中一个参数的值。在每次迭代中,它都会超过最优值,结果导致成本增加而不是接近最小值。请注意,这不是一个完全准确的图像,因为每次迭代都会修改4个参数,而不仅仅是一个参数。此图仅显示了其中一个参数的值,而其他参数保持在良好的值。在这个和后面的图中,你可能会注意到蓝线和橙线略微偏离。

α = 1 e − 7 \alpha = 1e-7 α=1e7

在这里插入图片描述

特征缩放

  • 为什么要进行特征缩放

    进行特征缩放的主要原因是确保不同特征具有相似的范围和尺度。这在机器学习中是很重要的,因为许多机器学习算法都假设输入特征具有相似的尺度。特征缩放有几个重要的原因:

    1. 加速收敛速度:在梯度下降等优化算法中,特征缩放可以使目标函数更快地收敛。如果特征具有不同的范围和尺度,那么梯度下降算法可能会在某些方向上进行更大的更新,而在其他方向上进行更小的更新,导致收敛速度变慢。
    2. 避免算法偏向:如果某些特征具有较大的范围,那么它们对目标函数的影响可能会比其他特征更大。这可能会导致算法更倾向于关注那些范围较大的特征,而忽略其他特征。通过进行特征缩放,可以确保所有特征对目标函数的影响是相似的,避免算法偏向。
    3. 提高模型性能:在某些情况下,特征缩放可以提高模型的性能。例如,在基于距离的模型(如 K 近邻算法)中,特征的尺度可以影响距离的计算。如果某些特征具有较大的尺度,那么它们可能会对距离的计算产生更大的影响,从而导致模型性能下降。通过特征缩放,可以确保所有特征对距离的计算影响相似,提高模型的性能。

三种不同的技术:

  1. 特征缩放,基本上是将每个特征除以用户选择的值,以使其范围介于 -1 和 1 之间
  2. 均值归一化 x i : = x i − μ i m a x − m i n x_i := \dfrac{x_i - \mu_i}{max - min} xi:=maxminxiμi
  3. Z 分数归一化

Z 分数归一化

经过 Z 分数归一化后,所有特征的均值将为 0,标准差为 1

要实现 Z 分数归一化,调整输入值如下所示的公式:

x j ( i ) = x j ( i ) − μ j σ j (4) x^{(i)}_j = \dfrac{x^{(i)}_j - \mu_j}{\sigma_j} \tag{4} xj(i)=σjxj(i)μj(4)

其中, j j j 是矩阵 X X X 中的一个特征或列

µ j µ_j µj 是特征 ( j ) (j) j所有值的均值

∗ σ j *\sigma_j σj 是特征 ( j ) (j) j的**标准差。***

μ j = 1 m ∑ i = 0 m − 1 x j ( i ) σ j 2 = 1 m ∑ i = 0 m − 1 ( x j ( i ) − μ j ) 2 \begin{align} \mu_j &= \frac{1}{m} \sum_{i=0}^{m-1} x^{(i)}_j \tag{5}\\ \sigma^2_j &= \frac{1}{m} \sum_{i=0}^{m-1} (x^{(i)}_j - \mu_j)^2 \tag{6} \end{align} μjσj2=m1i=0m1xj(i)=m1i=0m1(xj(i)μj)2(5)(6)

实现注意: 当对特征进行归一化时,重要的是存储用于归一化的值 - 均值标准差用于计算。在从模型中学习参数后,我们通常希望预测之前未见过的房屋价格。给定一个新的 x 值(客厅面积和卧室数量),我们必须首先使用之前从训练集中计算得到的均值和标准差来归一化 x。

实现

def zscore_normalize_features(X):
		
		# 计算每个特征的均值
    mu = np.mean(X, axis=0)                 # mu will have shape (n,)
    
    # 计算每个特征的标准差
    sigma  = np.std(X, axis=0)                  # sigma will have shape (n,)
    
    # 进行归一化操作
    X_norm = (X - mu) / sigma      

    return (X_norm, mu, sigma)
 
#check our work
#from sklearn.preprocessing import scale
#scale(X_orig, axis=0, with_mean=True, with_std=True, copy=True)
  • 解释一下:scale(X_orig, axis=0, with_mean=True, with_std=True, copy=True)

    这段代码使用了 scikit-learn 中的 scale 函数,该函数用于对输入数据进行标准化处理。下面是对该函数的参数进行解释:

    • X_orig:要进行标准化处理的输入数据。通常是一个二维数组,其中每一行代表一个样本,每一列代表一个特征。
    • axis:标准化处理的轴向。默认值为 0,表示对每一列进行标准化处理,即计算每个特征的均值和标准差,并将数据标准化为均值为 0、标准差为 1 的分布。如果设置为 1,表示对每一行进行标准化处理。
    • with_mean:是否对数据进行均值归一化。默认值为 True,表示将数据减去均值,使得均值为 0。
    • with_std:是否对数据进行标准差归一化。默认值为 True,表示将数据除以标准差,使得标准差为 1。
    • copy:是否复制输入数据。默认值为 True,表示将原始数据进行复制,不修改原始数据。如果设置为 False,表示在原始数据上直接进行修改。

    综合起来,这段代码的作用是对输入数据进行标准化处理,使得每个特征的均值为 0,标准差为 1,以及可选择是否对数据进行均值归一化和标准差归一化。

下面的图显示了逐步的转换过程。

mu     = np.mean(X_train,axis=0)   
sigma  = np.std(X_train,axis=0) 
X_mean = (X_train - mu)
X_norm = (X_train - mu)/sigma      

fig,ax=plt.subplots(1, 3, figsize=(12, 3))
ax[0].scatter(X_train[:,0], X_train[:,3])
ax[0].set_xlabel(X_features[0]); ax[0].set_ylabel(X_features[3]);
ax[0].set_title("unnormalized")
ax[0].axis('equal')

ax[1].scatter(X_mean[:,0], X_mean[:,3])
ax[1].set_xlabel(X_features[0]); ax[0].set_ylabel(X_features[3]);
ax[1].set_title(r"X - $\mu$")
ax[1].axis('equal')

ax[2].scatter(X_norm[:,0], X_norm[:,3])
ax[2].set_xlabel(X_features[0]); ax[0].set_ylabel(X_features[3]);
ax[2].set_title(r"Z-score normalized")
ax[2].axis('equal')
plt.tight_layout(rect=[0, 0.03, 1, 0.95])
fig.suptitle("distribution of features before, during, after normalization")
plt.show()

在这里插入图片描述

上面的图显示了训练集中两个参数之间的关系,“age” 和 “sqft”。这些图绘制的比例相等

  • 左侧:未归一化:‘size(sqft)’ 特征的值范围或方差远大于 ‘age’ 特征的值范围或方差。
  • 中间:第一步去除了每个特征的平均值或均值。这使得特征围绕零中心。很难看出 ‘age’ 特征的差异,但 ‘size(sqft)’ 明显围绕零中心。
  • 右侧:第二步除以方差。这使得两个特征都围绕零中心,并且具有相似的尺度。

让我们对数据进行归一化,并将其与原始数据进行比较。

# normalize the original features
X_norm, X_mu, X_sigma = zscore_normalize_features(X_train)
print(f"X_mu = {X_mu}, \nX_sigma = {X_sigma}")
print(f"Peak to Peak range by column in Raw        X:{np.ptp(X_train,axis=0)}")   
print(f"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}")

通过归一化,每列的峰值范围从数千的因子减少到 2-3 的因子。

fig,ax=plt.subplots(1, 4, figsize=(12, 3))

# 对第 i 列的特征进行归一化,并绘图
for i in range(len(ax)):
    norm_plot(ax[i],X_train[:,i],)
    ax[i].set_xlabel(X_features[i])
    
ax[0].set_ylabel("count");
fig.suptitle("distribution of features before normalization")
plt.show()

在这里插入图片描述

请注意,上面归一化后的数据范围围绕零中心,大致在 +/- 1 范围内。最重要的是,每个特征的范围相似。

让我们使用归一化后的数据重新运行梯度下降算法。请注意学习率 α \alpha α 的值大大增加了。这将加速下降过程。

w_norm, b_norm, hist = run_gradient_descent(X_norm, y_train, 1000, 1.0e-1, )

通过归一化后的特征,我们可以在更快的时间内获得非常准确的结果!请注意,在这个相当短的运行过程结束时,每个参数的梯度都变得非常小。对于使用归一化特征的回归问题,学习率 0.1 是一个很好的起点。

让我们绘制我们的预测值与目标值的对比图。请注意,预测是使用归一化后的特征进行的,而绘图是使用原始特征值进行的。

# 用归一化后的特征得到的预测值
m = X_norm.shape[0] # m 是数据量
yp = np.zeros(m) # yp 是预测的价格

# 使用归一化后的特征 X_norm[i] 与归一化后的权重 w_norm 进行点乘,再加上归一化后的偏置 b_norm,得到预测的价格。
for i in range(m):
    yp[i] = np.dot(X_norm[i], w_norm) + b_norm

# 将原始特征值与预测值绘制在同一图表中,用于对比    
fig,ax=plt.subplots(1,4,figsize=(12, 3),sharey=True)
for i in range(len(ax)):
    ax[i].scatter(X_train[:,i],y_train, label = 'target')
    ax[i].set_xlabel(X_features[i])
    ax[i].scatter(X_train[:,i],yp,color=dlorange, label = 'predict')
ax[0].set_ylabel("Price"); ax[0].legend();
fig.suptitle("target versus prediction using z-score normalized model")
plt.show()

在这里插入图片描述

结果看起来不错。需要注意几点:

  • 当使用多个特征时,我们不能再使用单个图表显示结果与特征的关系。
  • 在生成图表时,使用了归一化后的特征。任何使用从归一化训练集学习到的参数进行的预测都必须使用归一化的特征。

**预测:**生成我们的模型的目的是使用它来预测不在数据集中的房屋价格。让我们预测一间具有 1200 平方英尺、3 间卧室、1 层、40 年历史的房屋的价格。请记住,在使用模型进行预测之前,必须使用训练数据归一化时得到的均值和标准差对数据进行归一化处理。

# 首先,归一化需要预测的样本
x_house = np.array([1200, 3, 1, 40])
x_house_norm = (x_house - X_mu) / X_sigma
print(x_house_norm)
x_house_predict = np.dot(x_house_norm, w_norm) + b_norm
print(f" predicted price of a house with 1200 sqft, 3 bedrooms, 1 floor, 40 years old = ${x_house_predict*1000:0.0f}")

代价轮廓

另一种观察特征缩放的方式是通过代价轮廓。当特征的尺度不匹配时,在轮廓图中绘制的代价与参数之间的关系是不对称的。

在下面的图中,参数的尺度是匹配的。左图是在归一化特征之前对房屋面积 w[0] 与卧室数量 w[1] 的代价轮廓图。由于不对称,完成轮廓的曲线并不可见。相比之下,当特征归一化时,代价轮廓更加对称。结果是在梯度下降过程中,参数的更新可以使每个参数取得相同的进展。

plt_equal_scale(X_train, X_norm, y_train)

在这里插入图片描述

小结

  • 利用之前实验中开发的具有多个特征的线性回归例程
  • 探索学习率 α \alpha α 对收敛性的影响
  • 发现使用 Z 分数归一化进行特征缩放在加速收敛方面的价值

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Appwrite 1.5 已在云端发布 - 四月产品更新

Hello, Appwriters👋 以下是四月份的产品更新和一个令人兴奋的消息: Appwrite 1.5 已在 Appwrite Cloud 上发布。这个版本备受期待,我们很高兴终于能与大家分享这个好消息。 为了让您快速复习,您现在可以开始使用云计算平台上的…

视频资源汇聚平台常见的几种接入方式

视频资源汇聚平台 视频汇聚平台可以实现海量资源的接入、汇聚、存储、处理、分析、运维等,平台具备轻量化接入能力,可支持多协议方式接入,包括主流标准协议GB28181、RTSP、ONVIF、RTMP、FLV、WEBSOCKET等,以及厂家私有协议与SDK接…

人脸识别之bbox【det_10g】-ncnn(c++)

模型描述 det_10g是insightface 人脸框图和人脸关键点的分类,最终能够得到人脸框图bbox,分值还有人脸五官(眼x2、鼻子x1、嘴巴x2) 由于我这里没有采用最终结果,通过onnx转换为ncnn,所以后面的步骤结果丢弃…

桌面怎么分类便签 桌面分类便签设置方法

桌面便签,一直是我工作和学习的好帮手。每当灵感闪现或是有待办事项,我都会随手记录在便签上,它们就像我桌面上的小助手,时刻提醒我不要遗漏任何重要事务。 但便签一多,管理就成了问题。一张张五颜六色的便签贴满了我…

autolabor(ROS开发笔记)__1

视频链接:ROS机器人 chapter 1 ROS概述与环境搭建 学习步骤: 1.了解该模块的相关概念 是什么,为什么学,前世今生,发展前景 2.安装官方软件包 具备基本的开发环境,简陋notepad 3.搭建集成开发环境(IDE,Int…

信息检索(35):LEXMAE: LEXICON-BOTTLENECKED PRETRAINING FOR LARGE-SCALE RETRIEVAL

LEXMAE: LEXICON-BOTTLENECKED PRETRAINING FOR LARGE-SCALE RETRIEVAL 标题摘要1 引言2 相关工作3 LEXMAE:词典瓶颈屏蔽自动编码器3.1 语言建模编码器3.2 词典瓶颈模块3.3 弱化掩蔽式解码器3.4 词汇加权检索器的预训练目标和微调 4 实验4.1 主要评估4.2 效率分析与…

[算法][单调栈] [leetcode]316. 去除重复字母

去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的 字典序最小(要求不能打乱其他字符的相对位置)。 字典序最小: 考虑字符串 a 与 字符串 b,如果字…

JavaWeb:VsCode创建Web项目

一、Tomcat 先在官网上下载tomcat,解压到自己设定的文件夹。 配置环境变量 path变量配置 系统变量配置 验证服务器开机 二、Maven Maven 是一个基于 Java 的项目管理工具,可以对 Java 项目进行构建、依赖管理,可以自动下载所需要的包&#x…

关于各类软件下载及使用

文章目录 一、VS Code1、下载2、安装3、使用 二、Dev-C1、下载2、安装3、使用 三、VS20191、下载2、安装3、使用 四、IDEA1、下载2、安装3、使用 五、Fiddler1、下载1.1 官网下载1.2 文件下载 2、安装3、使用 一、VS Code 1、下载 2、安装 3、使用 二、Dev-C 1、下载 2、…

【蚂蚁笔试题汇总】2024-05-11-蚂蚁春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新蚂蚁近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&#x1f49…

《超越代码生成:Agentic Reasoning探索研发智能化》——【研发效能·创享大会】

【研发效能创享大会】是由IDCF社区独家举办,这个会议主要聚焦于技术和研发管理,旨在为社区成员提供一个学习与交流的平台,分享技术经验,交流行业见解,促进技术合作与创新,发现并培养人才,推动软…

新能源汽车动力电池浸没式冷却方案介绍与未来趋势

前言 新能源汽车的兴起标志着汽车工业的一次革命,其中动力电池的设计与性能成为了关键。浸没式冷却方案作为一种新兴的技术,为动力电池系统提供了有效的散热解决方案,其在未来的发展趋势备受关注。 一 动力电池浸没式冷却方案介绍 首先&am…

攻防世界-web-command_execution

题目: 原理: | 的作用为将前一个命令的结果传递给后一个命令作为输入 &&的作用是前一条命令执行成功时,才执行后一条命令 方法一: 第一步: 1.打开浏览器,在文本框内输入127.0.0.1 | find / -name…

Qt : 一个超高人气的Node编辑器

真的是很不错的Node编辑器开源项目,基于Qt的图元/场景/视图框架,能做点啥不用我多说。 git地址:https://github.com/paceholder/nodeeditor

分布式链路追踪 Zipkin+Sleuth(8)

项目的源码地址 Spring Cloud Alibaba 工程搭建(1) Spring Cloud Alibaba 工程搭建连接数据库(2) Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 与 Feign 实现负载调用(3) Spring Cloud Alibaba Ribbo…

前端笔记-day02

文章目录 01-无序列表02-有序列表03-定义列表04-表格06-表格-合并单元格07-表单-input08-表单-input占位文本09-表单-单选框10-表单-上传多个文件11-表单-多选框12-表单-下拉菜单13-表单-文本域14-表单-label标签15-表单-按钮16-无语义-span和div17-字体实体19-注册登录页面 01…

每日10亿数据的日志分析系统OOM

背景 一个每日10亿数据的日志清洗系统,主要工作就是从消息队列中消费各种各样的日志,然后对日志进行清洗,例如:用户敏感信息(姓名、手机号、身份证)进行脱敏处理,然后把清理完的数据交付给其他系统使用。 我们项目中,…

有奖调查!!!!!

老子云平台https://www.laozicloud.com/ 如果老子云3D可视化综合服务平台的AMRT展示框架(包含SDK、模型优化处理API)免费开放给大家,大家愿意。。。。。。。 填写调查问卷,注册老子云账号,调查结束后您将获得100元平台…

2024HW Linux应急响应基础学习

首先展示关于Linux的关键目录,这是应急响应查看的关键: 常用命令 top //查看进程资源的占用情况 ps -aux //查看进程 直接写ps aux也可以 netstat -antpl //查看网络连接 ls -alh /proc/pid //查看某个pid对应的可执行程序 pid记得修改 lsof /…

检测服务器环境,实现快速部署。适用于CRMEB_PRO/多店

运行效果如图: 最近被好多人问,本来运行的好好的,突然swoole就启动不了了。 本工具为爱发电,如果工具正好解决了您的需求。我会很开心 代码如下: """本脚本为爱发电by:网前雨刮器 """…