【机器学习-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 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. 改进方法

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

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

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

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

相关文章

(3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)

目录 一、磁共振快速采集技术基础 1.K空间的基本特点 2.快速成像的理由: 3.快速成像的硬件要求: 二、磁共振快速采集技术 1.采集更少的相位编码线 2.平行采集技术PAT 3.其他与快速采集有关的技术 1)部分回波技术 2)频率…

四川音盛佳云电子商务有限公司正规吗?靠谱吗?

在数字化浪潮席卷全球的今天,电子商务已成为推动经济发展的重要引擎。四川音盛佳云电子商务有限公司,作为抖音电商服务的佼佼者,正以其独特的视角和创新的策略,引领着抖音电商的新潮流,开启着电商服务的新篇章。 四川…

单例模式中的 双判断锁 问题、单例模式的资源问题

》》》Lazy 不存在高并发问题,lazy已经解决了。 CLR 类执行的顺序 静态变量初始化 1次静态构造函数 1次实例变量初始化基类静态变量初始化 1次基类静态构造函数 1次基类实例变量初始化基类实例构造函数实例构造函数 》》》 创建单例模式 好多种 1,静态…

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP(EFI) 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …

4.双指针+递归

一、双指针编程技巧 方法参数传递数组 将数组通过方法参数传递,方法操作的数组和main方法中的数组指向同一块内存区域,意味着方法操作数组,同时会引起main方法中数组的改变以引用的方式作为方法参数进行传递的 元素交换 定义临时变量temp&a…

代码随想录算法训练营第16天 |● 104.二叉树的最大深度 559.n叉树的最大深度 ● 111.二叉树的最小深度 ● 222.完全二叉树的节点个数

文章目录 前言104.二叉树的最大深度思路知识点 方法一 递归法方法二 迭代法 559. n叉树的最大深度111.二叉树的最小深度思路方法一 后向遍历递归法方法二 迭代法 222.完全二叉树的节点个数思路方法一 当成普通二叉树来做方法二 利用完全二叉树的特性 总结 前言 所有的题目一刷…

带你玩转OpenHarmony AI:打造智能语音子系统

简介 AI时代,智者当先,判断一个终端设备是否智能,语音能力是必不可缺的。智能家居、智慧厨房、智能汽车等等,一切衣食住行都在往智能方向发展,那我们该如何在OpenAtom OpenHarmony(简称“OpenHarmony”&am…

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

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

c++读取文本文件出现乱码问题

else if (type 2) { //教师身份验证 int fId; //从文件中获取的id号 string fName; //从文件中获取的姓名 string fPwd; //从文件中获取的密码 while (ifs >> fId && ifs >> fName && ifs >> fPwd) { cout…

windows Oracle 11g服务器端和客户端安装 SQLark连接ORACLE

1 从ORACLE官网下载数据库安装包 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 2:安装数据库 注意:在加载组件的这一步,如果你的电脑里面有杀毒软件,首先把安装目录加入白名单,要不然可能会一直加载组件失败。…

面向对象的理解

1.结构化程序设计(面向过程) 结构化程序主张按功能来分析系统需求,结构化的主要原则: 自顶向下 逐步求精 模块化设计 结构化程序会按功能把程序分为一个个的单独的文件,例如:让灯亮这个功能,就会由多个函数构成一…

银行总部文件自动下发,如何保证不影响专线网络使用?

银行在我国金融体系中占据重要地位,是我国市场经济的重要组成部分。我国商业银行随着自身不断发展,规模日益扩大,形成了“总行-分行-支行-营业网点”的典型层级管理模式。在日常中,银行总部存在文件下发的场景: 银行总…

c4d云渲染是工程文件会暴露吗?

在数字创意产业飞速发展的今天,C4D云渲染因其高效便捷而备受欢迎。然而,随着技术应用的深入,人们开始关注一个核心问题:在享受云渲染带来的便利的同时,C4D工程文件安全吗?是否会有暴露的风险?下…

常见的字符编码

字符:各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等 字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同 字符编码:字符集只是规定了有哪些字符&a…

openlayers绘制经纬网格,有添加或者移除功能

项目需要在地图中添加经纬网格,然后看了一下官网有相关的介绍 官网 我的项目是vue写的,当点击多选框显示隐藏经纬网格,下面直接写代码 这是绘制经纬网格方法 //引入 import TileArcGISRest from ol/source/TileArcGISRest import "ol/o…

k近邻和kd树

K近邻 选取k值的时候可以采用交叉验证的方法 一般采用欧氏距离 kd树 采用树这个特殊的数据结构来实现k近邻算法 先假设是二维的情况 下面讲解kd树的完整构造过程 找这个中位数是按照每棵子树来创建的 前提是已经有了一棵kd树,然后来一个实例点

Ai编码的助手,现在我用这个

给你分享一个AI编码助手—百度Comate! https://comate.baidu.com/zh/shopping?inviteCodeaz5z518a 记得在你的vscode 或 jetbrains编码工具里体验体验哦

Python UDP编程简单实例

TCP是建立可靠的连接,并且通信双方都可以以流的形式发送数据。 相对于TCP,UDP则是面向无连接的协议,不需要建立连接,只需要知道对方IP地址和端口号,就可以直接发送数据包。但是只管发送不保证到达。 虽然UDP传输数据…

新定义RD8T36P48点亮LED--汇编

其实汇编和C语言差不多,简单的东西用汇编挺好,中等及以上复杂度的程序还是C语言更灵活 直接在keil新建好工程,选好芯片型号和下载方式,再创建一个.asm文件并添加到工程, 工程创建完如图 工程配置 代码 ORG 0000HL…

U-Mail邮件系统取得多项适配认证,全面支持国产化信创环境

随着信息技术的发展,信息化建设越来越深入到社会各个领域,成为驱动经济社会发展的重要力量。在此背景下,我国正加快构建国家信息安全保障体系,实现自主可控,形成安全可靠的信息技术体系。这正是我们所说的“信创”&…