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

news2024/11/18 16:36:13

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

📜 个人主页:@一伦明悦-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 plt

from 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 features
    X = iris.data[:, pair]
    y = iris.target

    # Train
    clf = DecisionTreeClassifier().fit(X, y)

    # Plot the decision boundary
    plt.subplot(2, 3, pairidx + 1)

    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.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 points
    for 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 DecisionTreeClassifier

X, 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.impurities

fig, 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.coloradmin.cn/o/1687566.html

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

相关文章

[猫头虎分享21天微信小程序基础入门教程] 第12天:小程序的自定义组件开发

[猫头虎分享21天微信小程序基础入门教程] 第12天:小程序的自定义组件开发 第12天:小程序的自定义组件开发 🛠️ 自我介绍 大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了…

两数交换,数组查找奇数个数的数(位运算)

文章目录 一、异或运算:1.1 Demo1.2 面试题 一、异或运算: 1.1 Demo 0和N进行异或运算都等于N 任何一个数和自己异或运算都等于0 且异或运算满足交换率 a^b b^a eg: a 甲 , b 已 那么则有 a a^b ​ b a^b ​ a a^b 故有&am…

MySQL进阶 日志结尾以及8.0新特性

日志结尾 前面我们聊了mysql的undo日志,redo日志,binlog等等,也从一条update语句来分析了一下日志的执行思路以及版本控制是怎么回事,四大特性是怎么实现的等等 今天我们来说说最后一个错误日志 其实用处不大 因为对我们开发人员来说基本上是没有权限来查看错误日志的 一般…

爬虫工程师---如何用charles把scrapy的爬虫监控起来调试

前言: 想法是,通过charles挂上魔法工具,然后跑代码的时候,实时监控每一个访问的请求状态和返回是个啥? 原理其实和挂手机等一样的;但是,我想说的,让scrapy挂上charles... 之前写过关于fiddler挂代理的路子,还有关于fiddler和charles的证书的文章,不明白的可以去查看 手机模拟器…

Unity Miscellaneous入门

概述 在Unity中有非常多好用的组件,也是Unity为我们提供的方便的开发工具,它的功能可能不是主流的内容,比如渲染,音乐,视频等等,所有Unity把这些内容统一归到了一个杂项文件组中。 Unity组件入门篇总目录-…

Centos 7 上安装【Docker】

安装Docker(Centos 7) 1.1.卸载(可选) 如果之前安装过旧版本的Docker,可以使用下面命令卸载: ***注意:***若提示[您需要 root 权限 执行此命令]需要在命令前加上sudo yum remove docker \do…

2. C++服务器编程-信号

什么是信号 其实信号就是一个中断。就是在执行程序的时候突然来了一个信号,然后我们去执行这个新来的程序了,这就是中断。 处理方法 信号的处理方式∶忽略、捕获、默认处理 linux中都有那些信号 man7 signal 比如说kill -9 安装man中文手册 自己百…

数据挖掘实战-基于内容协同过滤算法的电影推荐系统

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

[JAVASE] 类和对象(五) -- 抽象类和接口

目录 一. 抽象类 1.1 抽象类的定义 1.2 抽象类的实现 1.3 抽象类的作用 1.4 抽象类注意事项 二. 接口 2.1 接口的定义 2.2 接口的实现 2.3 接口的作用 2.4 接口注意事项 三. 总结 一. 抽象类 1.1 抽象类的定义 如果一个类中没有包含足够的信息来描绘一个具体的对象, 那么…

Apache无法确定服务器的完全合格域名(FQDN)报错解决方法

文章目录 一、apache语法检查报错二、报错原因分析三、报错解决办法 一、apache语法检查报错 当我们在进行apache配置时,需要检查配置是否存在语法错误: sudo apache2ctl configtestAH00558: apache2: Could not reliably determine the servers fully…

图解CPU、内存、硬盘的工作原理

1、简要概括 硬件作用cpu 负责执行计算机程序的指令内存用于临时存储程序和数据。硬盘将数据从硬盘读取到内存或将数据从内存写入硬盘的过程。联系三者协同工作,CPU执行程序指令,将需要的数据从硬盘读取到内存,进行计算后再将结果写回内存或…

JDBC访问数据库

JDBC学习笔记代码jar包等连接 链接:https://pan.baidu.com/s/1NqgMucUk7JjoSZXEkA-PPQ?pwd60kv 提取码:60kv –来自百度网盘超级会员V3的分享 下载驱动 不管是连接mysql还是sqlserver都需要Java的一个驱动包,及XXX.jar包,这个包…

扩散模型学习1

DDPM 总体训练原理 https://www.bilibili.com/video/BV1nB4y1h7CN/?spm_id_from333.337.search-card.all.click&vd_sourcef745c116402814185ab0e8636c993d8f 讲得很好:每次都是输入t和noise-x的图像,预测noise之后得到和加入的noise比较&#xff1b…

如何搭建springBoot项目中的全局异常处理和自定义异常处理

目录 1 什么是异常 2 异常的种类 3 解决异常的方式 4 全局异常处理器和自定义异常处理器 5 测试异常处理 1 什么是异常 异常(Exception)是在程序执行过程中出现的一种特殊情况或错误。它可以是由于程序逻辑错误、运行环境问题、用户输入错误等原因…

Unity中计数器的实现

Unity中计数器的实现 一、前言二、效果与逻辑(一) 实现效果(二)功能逻辑 三、功能代码四、应用实现五、结语 一、前言 最近在开发中用到计数器,但是unity自带的UI组件中没有,所以只好自己手撸了一个&#x…

亚马逊云科技介绍

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、亚马逊云科技云计算1.1 云计算的优势 二、领先的云平台三、亚马逊云科技区域的全球网络…

1Panel应用推荐:code-server

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

Redis常见数据类型(3)-String, Hash

目录 String 命令小结 内部编码 典型的使用场景 缓存功能 计数功能 共享会话 手机验证码 Hash 哈希 命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat String 上一篇中介绍了了String里的基本命令, 接下来总结一…

XV4001系列陀螺仪传感器广泛用于车载导航系统

随着汽车电子化趋势的加速,越来越多的汽车配备一系列先进的车载导航系统,这些导航系统功能的实现都依赖于精确的传感器数据(位置、车速、转向角度、车轮转速等)。传感器作为这些系统的核心组件,其准确性和可靠性直接影响到整个导航系统的性能…

OSPF问题

.ospf 选路 域内 --- 1类,2类LSA 域间 --- 3类LSA 域外 --- 5类,7类LSA --- 根据开销值的计算规则不同,还分为类型1和类型2 ospf 防环机制 区域内防环:在同一OSPF区域内,所有路由器通过交换链路状态通告&#xff…