【机器学习-08】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之决策树算法实战分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页:@一伦明悦-CSDN博客

✍🏻 作者简介: C++软件开发、Python机器学习爱好者

🗣️ 互动与支持💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

目录

前言                    

正文

01-决策树简介

02-决策树一维回归实战分析

03-多输出决策树回归实战分析

04-在iris数据集上绘制决策树的决策面

05-具有成本复杂度的后剪枝决策树

总结                    


前言                    

         决策树是一种基于树结构的分类和回归方法,通过一系列的决策节点和叶节点来对数据进行分类或预测。 决策树的每个非叶节点表示一个特征属性测试,每个分支代表测试结果的一个输出,每个叶节点代表一个类别或回归。

  

正文

01-决策树简介

       sklearn.tree 模块是 Scikit-learn 中用于实现决策树算法的模块,提供了多种决策树相关的类和函数。以下是关于 sklearn.tree 模块中决策树的详细介绍:

  1. 主要算法

    • DecisionTreeClassifier:用于分类问题的决策树算法。
    • DecisionTreeRegressor:用于回归问题的决策树算法。
  2. 重要参数

    • criterion:用于衡量特征选择的标准,常见的有基尼系数(gini)和信息增益(entropy)。
    • max_depth:决策树的最大深度,用于控制树的复杂度和防止过拟合。
    • min_samples_split:内部节点再划分所需的最小样本数。
    • min_samples_leaf:叶子节点所需的最小样本数。
    • max_features:寻找最佳分割时考虑的最大特征数。
  3. 重要方法

    • fit(X, y):用于训练模型,其中 X 是特征数据,y 是目标数据。
    • predict(X):用于预测新数据的分类或回归结果。
    • score(X, y):用于评估模型在测试数据上的准确率或 R^2 得分。
  4. 特点与应用

    • 决策树易于理解和解释,可视化效果好,适合处理高维数据和非线性关系。
    • 但决策树容易过拟合,对数据噪声敏感,需要进行剪枝等参数调优。
    • 在实际应用中,决策树常用于分类和回归问题的解决,如金融风险评估、医学诊断、客户分类等领域。

       通过 sklearn.tree 模块提供的决策树算法,可以方便地构建、训练和应用决策树模型,实现数据分类和回归的任务。这些算法提供了丰富的参数和方法,可以根据实际需求进行灵活配置和使用。

02-决策树一维回归实战分析

       决策树在 Scikit-learn 中的回归模型通常由 DecisionTreeRegressor 实现。下面详细分析决策树回归的主要特点、原理、参数以及应用场景:

决策树回归的主要特点:

  1. 非参数模型:决策树回归是一种非参数学习方法,不对数据分布做出任何假设,可以适应复杂的数据关系。

  2. 简单解释:生成的决策树易于解释和理解,可以通过树结构直观地展示特征之间的关系。

  3. 处理非线性问题:适用于处理非线性关系的回归问题,不需要对数据进行线性化处理。

  4. 对异常值敏感:决策树回归对数据中的异常值比较敏感,可能导致过拟合。

决策树回归的原理:

  • 决策树回归通过特征的分裂来递归地划分数据空间,构建树结构,每个叶节点代表一个预测值。划分时通常选择使得数据方差最小的特征进行分裂。

决策树回归常用参数:

  1. criterion:用于衡量特征重要性的评价标准,常见的有均方误差(mse)和绝对值误差(mae)。

  2. max_depth:决策树的最大深度,用于控制树的复杂度和防止过拟合。

  3. min_samples_split:内部节点再划分所需的最小样本数。

  4. min_samples_leaf:叶子节点所需的最小样本数。

  5. max_features:寻找最佳分割时考虑的最大特征数。

决策树回归的应用场景:

  1. 房价预测:根据房屋特征如面积、地理位置等进行价格预测。

  2. 销量预测:根据历史销售数据和市场因素预测未来产品销量。

  3. 金融风险评估:根据个人信息和信用记录预测贷款风险。

  4. 医学数据分析:根据病人的生理指标和病史数据进行疾病预测。

       决策树回归是一种常用的机器学习方法,适用于处理各种回归问题。通过调整参数和优化模型,可以构建出高效准确的回归模型,广泛应用于实际数据分析和预测任务中。

        下面给出具体代码分析回归过程应用分析:这段代码实现了一个简单的决策树回归模型,并使用 matplotlib 库将结果可视化。让我来为你解释:

  1. 首先,通过 import numpy as np 导入 NumPy 库,用于处理数组和矩阵数据;通过 from sklearn.tree import DecisionTreeRegressor 导入 Scikit-learn 库中的决策树回归器。

  2. 然后,通过 import matplotlib.pyplot as plt 导入 Matplotlib 库,用于绘制图形。

  3. 接着,创建一个随机数据集 X 和 y,其中 X 是一个一维数组,y 是根据 X 生成的正弦函数值,加上一些噪声。

  4. 使用 DecisionTreeRegressor 分别初始化两个决策树回归器 regr_1 和 regr_2,并分别设置最大深度为 2 和 5。

  5. 调用 fit() 方法分别对两个回归器进行训练,用随机数据集 X 和 y 进行拟合。

  6. 构造测试数据集 X_test,并使用 predict() 方法分别预测两个回归器在测试数据上的输出结果 y_1 和 y_2

  7. 最后,使用 Matplotlib 绘制散点图表示原始数据,以及两条曲线表示两个不同深度的决策树回归模型在测试数据上的预测结果。

  8. 图像的横轴是数据特征,纵轴是目标值。散点图中的黑色点表示原始数据点,蓝色曲线表示最大深度为 2 的决策树回归模型的预测结果,绿色曲线表示最大深度为 5 的决策树回归模型的预测结果。

  9. 从图像中可以看出,最大深度为 2 的模型相对简单,对数据的拟合不够灵活,出现了欠拟合;而最大深度为 5 的模型更复杂,对训练数据的拟合更好,但也可能出现了过拟合。

  10. 通过调整决策树的最大深度,可以控制模型的复杂度,从而平衡欠拟合和过拟合之间的关系,获得更好的泛化性能。

import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt# Create a random dataset
rng = np.random.RandomState(1)
X = np.sort(5 * rng.rand(80, 1), axis=0)
y = np.sin(X).ravel()
y[::5] += 3 * (0.5 - rng.rand(16))# Fit regression model
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)# Predict
X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)# Plot the results
plt.figure()
plt.scatter(X, y, s=20, edgecolor="black",c="darkorange", label="data")
plt.plot(X_test, y_1, color="cornflowerblue",label="max_depth=2", linewidth=2)
plt.plot(X_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Decision Tree Regression")
plt.legend()
plt.savefig("../3.png", dpi=500)
plt.show()

        实例运行结果如下图所示:

  1. 散点数据

    • 散点图中的黑色点表示原始数据集的数据点,其中 x 轴表示特征数据,y 轴表示目标数值。数据点分布在正弦函数曲线附近,但由于添加了一些随机噪声,使得数据具有一定的波动性。
  2. 决策树回归曲线

    • 蓝色曲线(max_depth=2):这条曲线代表了最大深度为 2 的决策树回归模型在测试数据上的预测结果。可以看到,该模型对数据的拟合较为简单,出现了一定程度的欠拟合,未能很好地捕捉数据的复杂性。
    • 绿色曲线(max_depth=5):这条曲线代表了最大深度为 5 的决策树回归模型在测试数据上的预测结果。相比于深度为 2 的模型,这个模型更加复杂,能够更好地拟合数据,但也可能存在一定程度的过拟合。
  3. 横轴和纵轴

    • 横轴(data):表示特征数据的取值范围,即 X 轴,代表了输入数据的特征。
    • 纵轴(target):表示目标数值的取值范围,即 y 轴,代表了模型预测的目标数值。

  

03-多输出决策树回归实战分析

       多输出决策树回归是一种可以同时预测多个目标变量的回归方法,通常用于处理具有多个目标的复杂数据。在 Scikit-learn 中,多输出决策树回归模型通常由 DecisionTreeRegressor 的多输出版本 MultiOutputRegressor 实现。下面详细分析多输出决策树回归的主要特点、原理、参数以及应用场景:

多输出决策树回归的主要特点:

  1. 同时预测多个目标:能够有效地处理具有多个目标变量的回归问题,每个目标变量都可以单独地预测。

  2. 灵活性:与单输出模型类似,多输出决策树回归具有灵活性和解释性,易于理解和解释。

  3. 适应复杂数据:能够适应复杂的数据关系和多维特征空间。

  4. 对异常值敏感:与单输出决策树回归相似,对异常值比较敏感,可能导致过拟合。

多输出决策树回归的原理:

  • 多输出决策树回归原理与单输出类似,通过特征的分裂递归地划分数据空间,构建多个决策树结构,每个叶节点代表一个多维目标向量。划分时通常选择使得数据方差最小的特征进行分裂。

多输出决策树回归常用参数:

  1. base_estimator:用于指定基础的回归器,默认为 DecisionTreeRegressor

  2. n_estimators:用于指定子模型的数量,即决策树的数量。

  3. bootstrap:是否使用自助采样法进行数据采样。

  4. max_samples:用于指定自助采样法中每棵子树使用的样本数量。

多输出决策树回归的应用场景:

  1. 气象预测:同时预测多个气象变量,如温度、湿度、风速等。

  2. 环境监测:预测多个环境指标,如空气质量、水质等。

  3. 生态系统建模:预测多个生态系统参数,如植被覆盖、土壤湿度等。

  4. 金融市场分析:同时预测多个金融指标,如股票价格、汇率等。

  5. 医疗诊断:预测多个医疗指标,如患者病情等级、疾病风险等。

  多输出决策树回归能够处理多目标变量的回归问题,在实际应用中具有广泛的应用前景。

        下面给出具体代码分析回归过程应用分析:这段代码实现了一个多输出决策树回归模型,并使用 matplotlib 库将结果可视化。解释如下:

  1. 导入必要的库:代码中导入了 NumPy 库用于数值计算、Matplotlib 库用于可视化、以及 Scikit-learn 中的 DecisionTreeRegressor 用于构建决策树回归模型。

  2. 创建随机数据集:通过随机数生成器创建了一个包含两个目标变量的随机数据集 X 和目标数据集 y。其中 y 由 X 计算得到正弦和余弦值,并加入一些随机噪声。

  3. 初始化并训练决策树模型:分别初始化了三个不同 max_depth 的决策树回归器 regr_1、regr_2 和 regr_3,并使用训练数据 X 和 y 对它们进行训练。

  4. 进行预测:生成测试数据集 X_test,并分别利用三个决策树模型进行预测,得到预测结果 y_1、y_2 和 y_3。

  5. 绘制图像:利用 Matplotlib 绘制散点图,展示了原始数据集 y 的两个目标变量之间的关系,以及三个决策树模型在测试数据上的预测结果。不同深度的模型用不同颜色的散点表示,同时展示原始数据点。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor# Create a random dataset
rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(100, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y[::5, :] += (0.5 - rng.rand(20, 2))# Fit regression model
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_3 = DecisionTreeRegressor(max_depth=8)
regr_1.fit(X, y)
regr_2.fit(X, y)
regr_3.fit(X, y)# Predict
X_test = np.arange(-100.0, 100.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
y_3 = regr_3.predict(X_test)# Plot the results
plt.figure()
s = 25
plt.scatter(y[:, 0], y[:, 1], c="navy", s=s,edgecolor="black", label="data")
plt.scatter(y_1[:, 0], y_1[:, 1], c="cornflowerblue", s=s,edgecolor="black", label="max_depth=2")
plt.scatter(y_2[:, 0], y_2[:, 1], c="red", s=s,edgecolor="black", label="max_depth=5")
plt.scatter(y_3[:, 0], y_3[:, 1], c="orange", s=s,edgecolor="black", label="max_depth=8")
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("Multi-output Decision Tree Regression")
plt.legend(loc="best")
plt.savefig("../3.png", dpi=500)
plt.show()

         实例运行结果如下图所示:

        横轴是第一个目标变量(target 1),纵轴是第二个目标变量(target 2)。

        蓝色散点表示 max_depth=2 的模型预测结果,红色散点表示 max_depth=5 的模型预测结果,橙色散点表示 max_depth=8 的模型预测结果。

  

04-在iris数据集上绘制决策树的决策面

       要在 iris 数据集上绘制决策树的决策面,我们首先需要加载 iris 数据集,并使用决策树算法训练模型。下面是一份 Python 代码示例来实现这一目标:

       这段代码实现了在 iris 数据集上训练决策树分类器,并绘制了决策边界以及决策树的结构图。

  1. 加载数据和设置参数:使用 load_iris() 加载 iris 数据集,并设置了绘图所需的参数,如类别数量、颜色等。

  2. 循环绘制决策边界:通过循环遍历不同特征组合,对每一组特征训练决策树模型,并绘制对应的决策边界。在每个子图中,数据点的颜色表示其所属类别,决策边界由不同颜色的填充区域表示。

  3. 绘制决策树结构图:在另外一个图中,使用 plot_tree 函数绘制了整个决策树的结构图。

import numpy as np
import matplotlib.pyplot as pltfrom sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree# Parameters
n_classes = 3
plot_colors = "ryb"
plot_step = 0.02# Load data
iris = load_iris()for pairidx, pair in enumerate([[0, 1], [0, 2], [0, 3],[1, 2], [1, 3], [2, 3]]):# We only take the two corresponding featuresX = iris.data[:, pair]y = iris.target# Trainclf = DecisionTreeClassifier().fit(X, y)# Plot the decision boundaryplt.subplot(2, 3, pairidx + 1)x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),np.arange(y_min, y_max, plot_step))plt.tight_layout(h_pad=0.5, w_pad=0.5, pad=2.5)Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)cs = plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu)plt.xlabel(iris.feature_names[pair[0]])plt.ylabel(iris.feature_names[pair[1]])# Plot the training pointsfor i, color in zip(range(n_classes), plot_colors):idx = np.where(y == i)plt.scatter(X[idx, 0], X[idx, 1], c=color, label=iris.target_names[i],cmap=plt.cm.RdYlBu, edgecolor='black', s=15)plt.suptitle("Decision surface of a decision tree using paired features")
plt.legend(loc='lower right', borderpad=0, handletextpad=0)
plt.axis("tight")
plt.savefig("../3.png", dpi=500)
plt.figure()
clf = DecisionTreeClassifier().fit(iris.data, iris.target)
plot_tree(clf, filled=True)
plt.savefig("../4.png", dpi=500)
plt.show()

      实例运行结果如下图所示: 

  • 决策边界图:每个子图表示不同特征组合下的决策边界,横轴和纵轴分别表示对应的两个特征,不同颜色的填充区域表示不同类别的决策面,散点表示数据点的分布。
  • 决策树结构图:展示了整个决策树的结构,每个节点表示一个特征及其分割阈值,颜色表示该节点对应的主要类别。

  

  

05-具有成本复杂度的后剪枝决策树

      成本复杂度的后剪枝是一种用于决策树的剪枝策略,通过对已生成的决策树进行修剪来提高泛化能力。具体步骤如下:

  1. 训练决策树:首先,我们使用训练数据训练一个决策树模型,通常会选择较大的树,以便更好地拟合训练数据。

  2. 对子树进行评估:从叶节点开始,自下而上逐层遍历决策树,对每个内部节点使用验证数据集(validation set)来评估剪枝后的性能。在评估过程中,可以计算成本复杂度(cost complexity)来衡量剪枝的代价,通常成本复杂度定义为节点总数的函数,包括树叶的数量、深度等。

  3. 计算成本复杂度参数:对每个内部节点,根据其错误率、节点深度等计算出一个成本复杂度参数。成本复杂度参数一般包含两部分:当前节点错误率(如交叉熵损失)和剪枝代价(如节点个数)。

  4. 后剪枝策略:选择一个合适的参数(如复杂度参数的阈值),对决策树进行剪枝。具体来说,对每个节点计算其子树的成本复杂度(包括该节点本身的错误率和剪枝代价),如果剪枝后整体成本复杂度减小,则进行剪枝操作。

  5. 重复剪枝:重复进行上述步骤,直到无法继续降低成本复杂度或达到一定条件为止。

       通过成本复杂度的后剪枝,可以使决策树在保持准确性的同时具备更强的泛化能力,避免过拟合。这种策略不仅可以提高模型的预测性能,还可以减小模型的复杂度,更易于理解和解释。

        这段代码展示了在乳腺癌数据集上使用决策树进行成本复杂度剪枝,并分析剪枝后的决策树性能。下面是对这段代码的分析以及对生成的图像的解释:

  1. 加载数据和拆分数据集:通过 load_breast_cancer 加载乳腺癌数据集,并使用 train_test_split 将数据集划分为训练集和测试集。

  2. 计算成本复杂度剪枝路径:使用 cost_complexity_pruning_path 方法计算决策树在不同成本复杂度(ccp_alpha)下的剪枝路径。得到 ccp_alphas 和 impurities

  3. 绘制总不纯度随有效 alpha 变化的图像:绘制了训练集上总不纯度随着有效 alpha 变化的曲线图,用于选择合适的 alpha 进行剪枝。这张图展示了剪枝对总不纯度的影响。

  4. 基于不同 alpha 训练剪枝后的决策树:根据不同的 ccp_alpha 值,训练了一系列剪枝后的决策树,并计算了各个子树的节点数量和深度。

  5. 绘制节点数量和树深度随 alpha 变化的图像:绘制了剪枝后的决策树节点数量和深度随着 alpha 变化的曲线图,用于分析剪枝对决策树结构的影响。

  6. 绘制训练集和测试集准确率随 alpha 变化的图像:通过绘制训练集和测试集准确率随着 alpha 变化的曲线图,可以观察不同剪枝策略对于模型泛化能力的影响。

       通过绘制这些图像,可以对成本复杂度剪枝后的决策树模型进行全面的分析,包括剪枝路径选择、树的结构变化以及模型性能的影响。这有助于找到最优的剪枝参数,提高模型泛化能力并减少过拟合的风险。

import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifierX, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)clf = DecisionTreeClassifier(random_state=0)
path = clf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas, impurities = path.ccp_alphas, path.impuritiesfig, ax = plt.subplots()
ax.plot(ccp_alphas[:-1], impurities[:-1], marker='o', drawstyle="steps-post")
ax.set_xlabel("effective alpha")
ax.set_ylabel("total impurity of leaves")
ax.set_title("Total Impurity vs effective alpha for training set")
plt.savefig("../3.png", dpi=500)clfs = []
for ccp_alpha in ccp_alphas:clf = DecisionTreeClassifier(random_state=0, ccp_alpha=ccp_alpha)clf.fit(X_train, y_train)clfs.append(clf)
print("Number of nodes in the last tree is: {} with ccp_alpha: {}".format(clfs[-1].tree_.node_count, ccp_alphas[-1]))clfs = clfs[:-1]
ccp_alphas = ccp_alphas[:-1]node_counts = [clf.tree_.node_count for clf in clfs]
depth = [clf.tree_.max_depth for clf in clfs]
fig, ax = plt.subplots(2, 1)
ax[0].plot(ccp_alphas, node_counts, marker='o', drawstyle="steps-post")
ax[0].set_xlabel("alpha")
ax[0].set_ylabel("number of nodes")
ax[0].set_title("Number of nodes vs alpha")
ax[1].plot(ccp_alphas, depth, marker='o', drawstyle="steps-post")
ax[1].set_xlabel("alpha")
ax[1].set_ylabel("depth of tree")
ax[1].set_title("Depth vs alpha")
fig.tight_layout()
plt.savefig("../4.png", dpi=500)train_scores = [clf.score(X_train, y_train) for clf in clfs]
test_scores = [clf.score(X_test, y_test) for clf in clfs]fig, ax = plt.subplots()
ax.set_xlabel("alpha")
ax.set_ylabel("accuracy")
ax.set_title("Accuracy vs alpha for training and testing sets")
ax.plot(ccp_alphas, train_scores, marker='o', label="train",drawstyle="steps-post")
ax.plot(ccp_alphas, test_scores, marker='o', label="test",drawstyle="steps-post")
ax.legend()
plt.savefig("../5.png", dpi=500)
plt.show()

      实例运行结果如下图所示: 

  

  

  

总结                    

        决策树算法是一类常用于分类和回归任务的监督学习方法。以下是关于决策树算法的总结:

  1. 原理简介

    • 决策树是一种树形结构,每个非叶节点表示一个特征属性测试,每个分支代表一个测试输出,每个叶节点代表一种类别或回归值。
    • 决策树的构建过程是基于特征属性的条件划分,目标是生成树结构使得数据集在各个子集上有最大的纯度或最小的不纯度。
  2. 常见算法

    • ID3(Iterative Dichotomiser 3):使用信息增益作为特征选择标准,适用于分类任务。
    • C4.5:ID3 的改进版本,使用信息增益比进行特征选择,支持缺失值处理和剪枝操作。
    • CART(Classification and Regression Trees):既可以用于分类也可以用于回归任务,树的构建基于基尼不纯度(分类)或均方误差(回归)。
    • CHAID(Chi-squared Automatic Interaction Detection):使用卡方检验作为特征选择标准,适用于分类任务。
  3. 优点

    • 简单直观,易于理解和解释。
    • 能够处理数值型和类别型数据。
    • 可以自动进行特征选择。
    • 鲁棒性较好,对数据的干扰性较小。
  4. 缺点

    • 容易过拟合,特别是对于高维、复杂数据集。
    • 忽略了特征之间的相关性。
    • 对于不平衡数据和噪声敏感。
    • 结果不稳定,数据微小变化可能导致树结构巨大变化。
  5. 改进方法

    • 剪枝操作:包括预剪枝和后剪枝,用于降低过拟合风险。
    • 集成方法:如随机森林、梯度提升树等集成决策树模型,通过组合多个决策树减少单棵树的过拟合风险。

      总的来说,决策树算法是一种常用、直观的机器学习方法,在一些情况下表现良好,但需要注意过拟合和数据质量对结果的影响。结合剪枝操作、集成方法等手段可以提高模型性能和稳定性。

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

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

相关文章

微信H5跳小程序 wx-open-launch-weapp ios显示且正常跳转,安卓不显示不报错解决方案

前提:在一切都正常(无报错,没有写法错误等)的情况下,出现这个问题: 去你的h5项目,用浏览器打开,在network随便找一个静态文件,在response响应标头中找找,是否有Content-Security-Policy这个头&…

服务高峰期gc,导致服务不可用

随着应用程序的复杂性和负载的不断增加,对JVM进行调优,也是保障系统稳定性的一个重要方向。 需要注意,调优并非首选方案,一般来说解决性能问题还是要从应用程序本身入手(业务日志,慢请求等)&am…

struct.unpack_from()学习笔记

struct.unpack_from(fmt,b_data,offset) 按照指定的格式fmt,从偏移位置offset,对b_data开始解包,返回数据格式是一个元组(v1,v2…) fmt可以有: _struct.py: The remaining chars indicate types of args and must match exactly;…

基于Vue的验证码实现

一、验证码核心实现 创建slide-verify.vue&#xff0c;代码如下&#xff1a; <template><divclass"slide-verify":style"{ width: w px }"id"slideVerify"onselectstart"return false;"><!-- 图片加载遮蔽罩 -->&…

java项目之图书管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的图书管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 系统主要分为管理员角色和用…

【Redis7】Redis持久化机制之RDB

文章目录 1.RDB简介2.RDB配置触发设置3.RDB的优缺点4.如何检查修复RDB文件5.如何禁用RDB6.RDB参数优化7.总结 1.RDB简介 Redis持久化机制中的RDB&#xff08;Redis Database&#xff09;是一种将Redis在某个时间点的数据以快照形式保存到磁盘上的方法。 原理&#xff1a;RDB通…

Node.js版本管理与npm镜像源管理

一、nvm —— node的版本管理工具 1.安装 nvm Windows 使用 nvm-windows点击跳转下载网站。 按照图示操作步骤下一步即可&#xff0c;对于下载位置推荐不要C盘任意即可 2.查看可用的 Node.js 版本&#xff1a; nvm list available #显示所有可以下载的版本3.安装特定的…

自动化证书管理|如何通过可管理的ACME为“90天SSL证书”做好准备?

SSL证书在保护组织的Web通信安全方面发挥着至关重要的作用。最近的趋势表明&#xff0c;在增强安全性诉求的推动下&#xff0c;SSL证书有效期逐渐缩短。这一变化需要组织耗费更多的时间和资源来进行证书更新工作&#xff0c;为了降低潜在风险并简化流程&#xff0c;自动化证书管…

windows、mac、linux中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换

文章目录 在工作中&#xff0c;我们可能同时在进行2个或者多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版本的NodeJS运行环境&#xff0c;这种情况下&#xff0c;对于维护多个版本的node将会是一件非常麻烦的事情&#xff0c;nvm就是…

python查找内容在文件中的第几行(利用了滑动窗口)

def find_multiline_content(file_path, multiline_content):with open(file_path, r) as file:# 文件内容file_lines file.readlines()# 待检测内容multiline_lines multiline_content.strip().split(\n)# 待检测内容总行数num_multiline_lines len(multiline_lines)matchi…

安装测缝计安装事项详解

在建筑和工程领域&#xff0c;测量缝隙和裂缝的准确性对于工程质量和安全性至关重要。测缝计作为一种专业的测量工具&#xff0c;能够帮助工程师和施工人员准确测量和监测建筑结构的缝隙情况&#xff0c;进而采取合适的修复和加固措施&#xff0c;保证建筑物的稳定性和安全性。…

PCIe协议之-Flow Control基础

✨前言&#xff1a; Flow Control即流量控制&#xff0c;这一概念起源于网络通信中。PCIe总线采用Flow Control的目的是&#xff0c;保证发送端的PCIe设备永远不会发送接收端的PCIe设备不能接收的TLP&#xff08;事务层包&#xff09;。也就是说&#xff0c;发送端在发送前可以…

Flat Ads获广东电视台报道!CEO林啸:助力更多企业实现业务全球化增长

近日,在广州举行的第四届全球产品与增长展会(PAGC2024)上,Flat Ads凭借其卓越的一站式全球化营销和创新的变现方案大放异彩,不仅吸引了众多业界目光,同时也在展会上斩获了备受瞩目的“金帆奖”,展现了其在全球化营销推广领域的卓越实力和专业服务。 在大会现场,Flat Ads的CEO林…

XMR交易所对接方案

交易所对接 XMR 充币 用户充币地址生成 使用 subaddress 即可 充币数据监测 monero-wallet-rpc 的API文档: https://web.getmonero.org/resources/developer-guides/wallet-rpc.html 步骤1 : 使用 monero-wallet-cli 的以下选项生成 incoming-only钱包: --generate-from-v…

# 全面解剖 消息中间件 RocketMQ-(2)

全面解剖 消息中间件 RocketMQ-&#xff08;2&#xff09; 一、RocketMQ – RocketMQ 各角色介绍 1、RocketMQ 各角色介绍 Producer : 消息的发送者; 举例:发信者。Consumer : 消息接收者; 举例:收信者。Broker : 暂存和传输消息; 举例:邮局。NameServer : 管理 Broker; 举例…

css动画之hamburgers

动效1 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div><label class"hamburger"><input type"checkbox"><…

BGP选路规则实验

实验拓扑及要求如下 注意&#xff1a; 在完成要求时&#xff0c;默认区域内IGP搭建完成&#xff0c;IBGP和EBGP的对等体关系建立完成 结果演示如下 IBGP内部搭建&#xff1a;使用OSPF IBGP与EBGP对等体建立 要求一&#xff1a;PreVal策略 PV属性默认值为0&#xff0c;规则是…

2024年ai知识库:特点、应用与搭建

随着科技的进步和企业的需要&#xff0c;ai知识库逐渐走进大众的视野并深受企业的青睐&#xff0c;掀起了搭建ai知识库的热潮。LookLook同学就来简单介绍一下关于ai知识库的特点、应用与发展趋势&#xff0c;带你了解2024年的ai知识库。 一、ai知识库的定义与特点 ai知识库是结…

CentOS7 部署单机版 elasticsearch

一、环境准备 1、准备一台系统为CentOS7的服务器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) 2、创建新用户&#xff0c;用于elasticsearch服务 # elastic不允许使用root账号启动服务 [rootlocalhost ~]# useradd elastic [rootlo…

SHA1获取

这里写目录标题 JDK获取uniapp开发Dcould获取 JDK获取 一、下载jdk 链接: http://www.oracle.com/ 二、安装直接下一步下一步 三、配置环境变量 先新增变量JAVA_HOME变量值为C:\devUtils\jdk (jdk安装路径位置)再配置Path(%JAVA_HOME%\bin) 四、创建SHA1安全证书 win r输入cmd…