【机器学习(二)】分类和回归任务-决策树算法-Sentosa_DSML社区版

文章目录

  • 一、算法概念
  • 二、算法原理
    • (一)树的构造
    • (二)划分选择
      • 1、信息增益
      • 2、基尼指数
      • 3、卡方检验
    • (三)停止标准
    • (四)剪枝处理
      • 1、预剪枝
      • 2、后剪枝
  • 三、决策树的优缺点
  • 四、决策树分类任务实现对比
    • (一)数据加载
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (二)样本分区
      • 2、Sentosa_DSML社区版
    • (三)模型训练
      • 1、Python代码
      • 2)Sentosa_DSML社区版
    • (四)模型评估
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (五)模型可视化
      • 1、Python代码
      • 2、Sentosa_DSML社区版
  • 五、决策树回归任务实现对比
    • (一)数据加载和样本分区
      • 1、Python代码
    • (二)模型训练
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (三)模型评估
      • 1、Python代码
      • 2、Sentosa_DSML社区版
    • (四)模型可视化
      • 1、Python代码
      • 2、Sentosa_DSML社区版
  • 六、总结

一、算法概念

  首先,我们需要了解,什么是决策树?
  开发一个简单的算法来对三个元素A、B和C进行排序,需要把这个问题拆解成更小的子问题。首先,考虑A是否小于B。接下来,如果B小于C,那么事情会变得有趣:如果A<B且B<C,那么显然A<B<C。但如果B不小于C,第三个问题就变得关键:A是否小于C?这个问题也许用图形的方式来解决问题会更好。
  于是,我们可以为每个问题画一个节点,为每个答案画一条边,所有的叶子节点都代表一种可能的正确排序。下图展示了我们绘制的决策树图:
在这里插入图片描述

  这是我们创建的第一个决策树。为了做出正确的决定,需要两到三个if语句,因此,算法流程如下所示:
在这里插入图片描述
  排序代码:

def sort2(A, B, C):
if (A < B) and (B < C) : return [A, B, C]
if (A < B) and not (B < C) and (A < C): return [A, C, B]
if (A < B) and not (B < C) and not (A < C): return [C, A, B]
if not (A < B) and (B < C) and (A < C): return [B, A, C]
if not (A < B) and (B < C) and not (A < C): return [B, C, A]
if not (A < B) and not (B < C) : return [C, B, A]

  正如预期的那样,排序问题给我们提供了6条规则,对应于6种不同的排列组合,最终结果与决策树算法一致。这个简单的例子展示了决策树的四个重要特点:
  1、非常适合用于分类和数据挖掘。
  2、直观且易于理解。
  3、实现起来相对简单。
  4、适用于不同人群。
  这进一步证明了决策树在处理简单排序或分类问题时的高效性和易用性。
树(tree)是一种具有一个根节点的有向连通图。每个其他节点都有一个前任节点(父节点),没有或多个后继节点(子节点)。没有后继的节点称为叶子。所有节点都通过边连接。节点的深度是到根的路径上的边数。整棵树的高度是从根到任意叶子的最长路径上的边数。
决策树是一种树形结构,其元素的对应关系如下:

树形结构决策树中的对应元素
根节点初始决策节点
节点用于测试属性的内部决策节点
需要遵循的规则
叶子节点表示结果分类的终端节点

  机器学习算法的输入由一组实例(例如行、示例或观察)组成。每个实例都由固定数量的属性(即列)和一个称为类的标签(在分类任务的情况下)来描述,这些属性被假定为名义或数字。所有实例的集合称为数据集。
  根据这个定义,我们得到一个包含数据集的表:每个决策都成为一个属性(所有二元关系),所有叶子都是类,而每一行代表数据集的一个实例。如下图所示:
在这里插入图片描述
  数据以表格形式(例如数据库)收集,并且必须生成决策树。现在有八个而不是六个类的原因很简单:对于实例1、2和7、8来说,无论A<B与否,都没有关系,结果是同一个。这种删除树上不相关分支的效果称为剪枝。

二、算法原理

(一)树的构造

  基于树的分类方法的核心思想源自于一种概念学习系统。接下来将介绍的一系列算法,都基于一个简单但非常强大的算法,叫做TDIDT,代表“自上而下归纳决策树”。该算法的框架包含两种主要方法:决策树的生长和修剪。这两种方法将会在接下来的两个伪代码中详细展示,它们遵循分而治之的思想。
  通过递归分裂特征空间,创建复杂的决策树,使其在训练数据上取得较高的拟合度。其目的是最大化在训练数据上的准确性。决策树的构建过程:
在这里插入图片描述
  通过剪掉不必要的节点来简化树结构,防止过拟合,目的是提高模型对新数据的泛化能力。决策树的修建过程:在这里插入图片描述

(二)划分选择

  在构建决策树的过程中,划分选择(也叫做分裂选择)是决定如何根据数据的特征来划分节点的关键步骤。这个过程涉及选择一个特征以及相应的分割阈值或类别,使得数据集在该节点被分割为尽可能纯净的子集。不同的划分选择方法使用不同的准则来衡量数据分割的质量。设N个训练样本为:
在这里插入图片描述

1、信息增益

  熵和信息增益信息增益的思想基于 Claude Elwood Shannon于1948年提出的信息论。信息增益基于熵的概念。熵是衡量数据集不确定性或混乱度的一种度量。信息增益的目标是通过划分数据减少这种不确定性。
  熵的定义如下:
在这里插入图片描述
  信息增益是划分前后的熵的减少量:
在这里插入图片描述
  其中,第一项是熵,第二项是子节点的加权熵。因此,该差异反映了熵的减少或从使用属性获得的信息。

2、基尼指数

  基尼指数衡量目标属性值的概率分布之间的差异,定义如下:
在这里插入图片描述
  目标是找到一个最“纯粹”的节点,即具有单个类的实例。与基于信息增益的标准中使用的熵和增益信息的减少类似,所选择的属性是杂质减少最多的属性。

3、卡方检验

  卡方统计 (χ2) 标准基于将由于分裂而获得的类别频率值与该类别的先验频率进行比较。χ2 值的计算公式为:
在这里插入图片描述
  其中,在这里插入图片描述
  是k中样本N的先验频率。χ2值越大,表明分割越均匀,即来自某个类的实例的频率更高。通过χ2的最大值选择属性。
  划分选择的好坏直接影响决策树的性能。选择恰当的划分标准有助于生成更优的决策树,提高模型的预测准确性,减少过拟合的风险。在实际应用中,信息增益和基尼指数是最常见的选择,具体使用哪种方法往往取决于任务的类型(分类或回归)和数据的性质。

(三)停止标准

  在构建决策树的过程中,停止标准(Stopping Criteria)决定了什么时候应该停止继续分裂节点。合理的停止标准可以防止决策树过度拟合数据,生成过于复杂的树结构,同时也有助于提升模型的泛化能力。以下是决策树常用的几种停止标准:

  • 训练集中的所有实例都属于单个y值。

  • 已达到最大树深度。

  • 终端节点中的事例数小于父节点的最小事例数。

  • 如果节点被拆分,则一个或多个子节点中的事例数将小于子节点的最小事例数。

  • 最佳分割标准不大于某个阈值。

(四)剪枝处理

  使用严格的停止标准往往会创建小型且不合适的决策树。另一方面,使用松散停止标准往往会生成过度拟合训练集的大型决策树。为了避免这两个极端,人们提出了剪枝的想法:使用宽松的停止标准,在生长阶段之后,通过删除对泛化精度没有贡献的子分支,将过度拟合的树剪回较小的树。

1、预剪枝

  预剪枝是在决策树构建过程中,提前停止分裂节点的过程。当某些停止条件满足时,不再进一步分裂节点,这种方法防止了树的过度生长。常见的预剪枝策略包括:

  1. 最大深度限制:预设树的最大深度,一旦树达到该深度,即停止继续分裂。
  2. 最小样本数限制:每个叶节点中必须包含的最小样本数量,当节点中的样本数量低于该阈值时停止分裂。
  3. 最小信息增益或基尼增益限制:如果分裂带来的信息增益或基尼增益低于某个阈值,则停止分裂。
  4. 叶节点的纯度阈值:如果节点中某一类别占比超过某个预设的阈值,停止分裂,并将节点作为叶节点。

  预剪枝的优点:
  计算效率高:由于是在决策树生成过程中进行剪枝,可以减少不必要的分裂,从而加速模型训练。
  减少过拟合:通过提前停止分裂,预剪枝可以有效防止决策树过度拟合训练数据。

  预剪枝的缺点:
  欠拟合风险:预剪枝可能会过早停止分裂,导致决策树没有充分学习数据中的模式,进而出现欠拟合问题。

2、后剪枝

  后剪枝是指先构建出一棵完整的决策树,然后再对树进行简化。后剪枝的过程是从最底层的叶节点开始,逐层向上评估是否可以删除某些子树或分支,并将其替换为叶节点。常见的后剪枝方法包括:

  1. 子树替换(Subtree Replacement):当发现某一子树的分支对模型的预测贡献不大时,将该子树替换为叶节点,即直接使用该子树中的多数类作为分类结果。
  2. 子树升高(Subtree Raising):通过将子树的一部分提升到其父节点来简化树结构。具体来说,若子树中某一节点的子节点可以代替该节点的父节点,则将其提升。
  3. 成本复杂度剪枝(Cost Complexity Pruning):该方法通过增加一个正则化参数,权衡树的复杂性和模型的预测误差。在实际操作中,会对剪枝后的决策树进行交叉验证,选择使得预测误差最小的子树。

  后剪枝的优点:
  更有效的泛化能力:通过后剪枝,可以显著减少过拟合,使模型在新数据上的预测能力更强。
  保留更多的信息:由于后剪枝是在生成完整决策树后进行的,可以确保模型尽可能地利用数据中的信息,减少过早终止分裂的风险。
  后剪枝的缺点:
  计算成本高:后剪枝通常需要先生成一棵完全生长的决策树,这会增加计算成本,特别是当数据集较大时。
  复杂性较高:后剪枝的剪枝策略和评估准则通常比预剪枝复杂,可能需要更多的调参和计算。
  剪枝的具体算法

  1. 贪心剪枝:根据子树的预测误差决定是否剪枝,比较剪枝前后的性能,保留更优的结构。
  2. CART 剪枝算法:基于成本复杂度的剪枝算法,结合树的复杂度和误差表现。通过交叉验证找出最优的剪枝深度。
  3. Reduced Error Pruning(减少错误剪枝):从完全生长的树开始,测试每个节点的剪枝效果,如果剪枝不会增加误差率,则保留剪枝后的结构。

三、决策树的优缺点

优点:

  1. 直观易懂,可以转换为一组规则,便于快速解释、理解和实现:从根节点到叶节点的路径即为分类的解释,叶节点代表最终的分类结果。
  2. 能够处理标称(分类)和数值型输入数据。
  3. 可以处理含有缺失值的数据集。
  4. 作为一种非参数方法,它不依赖于数据的空间分布或分类器的结构假设。

缺点:

  1. 决策树对训练集中的噪声、不相关的属性过于敏感。
  2. 要求目标属性由离散值组成。
  3. 当属性之间高度相关时,决策树通常表现良好,因为它采用分而治之的方法;但当存在许多复杂的相互作用时,决策树的表现就不如预期那么理想。

四、决策树分类任务实现对比

  主要根据模型搭建的流程,对比传统代码方式和利用Sentosa_DSML社区版完成机器学习算法时的区别。

(一)数据加载

1、Python代码

import pandas as pd#读取样本数据
data = pd.read_csv('./TestData/iris.csv')
from sklearn import datasets# 读取iris数据集
iris = datasets.load_iris()
x = iris.data
y = iris.target

2、Sentosa_DSML社区版

  拖拽数据读入算子,选择数据文件路径,选择读取格式等,点击应用读入数据。
在这里插入图片描述

(二)样本分区

1、Python代码

import pandas as pd from sklearn.model_selection # 特征和标签分离 
x = data.drop('species', axis=1) 
y = data['species']# 分割数据集,测试集比例是 20%,训练集比例是 80% 
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2) # 输出训练集和测试集的样本数 
print("训练集样本数:", len(x_train)) 
print("测试集样本数:", len(x_test))
train_test_split()参数说明x 表示特征数据
y 表示目标变量train_test_split()参数说明
test_size 表示测试集的大小,如0.2表示20%的数据用于测试,在这段代码中,train_test_split() 函数将数据集 x 和 y 按照 80% 的训练集和 20% 的测试集比例进行分割。
random_state 表示随机参数种子,用于控制数据集的随机划分过程,保证每次划分的结果都一样,在这段代码中,train_test_split() 函数并没有指定 random_state 参数,因此默认情况下,random_state 是 None。
train_test_split函数的返回值包括:训练集的特征数据x_train、测试集的特征数据x_test、训练集的目标变量y_train、测试集的目标变量y_test

2、Sentosa_DSML社区版

  连接类型和样本分区算子,划分训练集和测试集数据。
  首先,连接样本分区算子可以选择数据训练集和测试集划分比例。
在这里插入图片描述
  右键预览可以看到数据划分结果。
在这里插入图片描述
  其次,连接类型算子将Species列的模型类型设为Label标签列。
在这里插入图片描述

(三)模型训练

1、Python代码

from sklearn.tree import DecisionTreeClassifier# 实例化决策树分类器,并指定一些参数
clf = DecisionTreeClassifier(criterion='entropy',       # 'entropy' 表示使用信息增益来衡量分裂质量,选择信息增益最大的特征进行分裂max_depth=5,               # 限制决策树的最大深度为5,以防止过拟合(树不允许深度超过5层)min_samples_split=10,      # 内部节点分裂所需的最小样本数,至少需要10个样本才能分裂该节点random_state=42            # 固定随机种子,保证每次运行代码时得到的决策树模型相同(可复现)
)# 使用训练数据拟合模型
clf.fit(x_train, y_train)      # 使用训练数据 x_train(特征) 和 y_train(目标变量) 来训练决策树模型# 在测试集上进行预测
y_pred = clf.predict(x_test)

2)Sentosa_DSML社区版

  样本分区完成后,连接决策树分类算子,双击在右侧进行模型属性配置。
在这里插入图片描述
  右键执行,训练完成后得到决策树分类模型。
在这里插入图片描述

(四)模型评估

1、Python代码

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import confusion_matrix# 计算并输出模型评估指标
accuracy = accuracy_score(y_test, y_pred)                            # 准确率
precision = precision_score(y_test, y_pred, average='weighted')      # 加权精度
recall = recall_score(y_test, y_pred, average='weighted')            # 加权召回率
f1 = f1_score(y_test, y_pred, average='weighted')                    # 加权F1分数# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(cm)# 计算每个类别的 ROC 曲线和 AUC 值
y_score = clf.predict_proba(x_test)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(3):  fpr[i], tpr[i], _ = roc_curve(y_test, y_score[:, i], pos_label=i)roc_auc[i] = auc(fpr[i], tpr[i])# 绘制每个类别的 ROC 曲线
plt.figure()
for i in range(3):plt.plot(fpr[i], tpr[i], label='ROC curve for class {0} (area = {1:0.2f})'.format(i, roc_auc[i]))
plt.plot([0, 1], [0, 1], 'k--')  # 绘制对角线
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc='lower right')
plt.show()# 输出评估结果
print(f"Accuracy: {accuracy:.4f}")    # 输出准确率
print(f"Precision: {precision:.4f}")  # 输出加权精度
print(f"Recall: {recall:.4f}")        # 输出加权召回率
print(f"F1 Score: {f1:.4f}")          # 输出加权F1分数

2、Sentosa_DSML社区版

  利用评估算子对模型进行评估
在这里插入图片描述
  训练集评估结果
在这里插入图片描述
  测试集评估结果在这里插入图片描述
  利用混淆矩阵评估算子对模型进行评估
在这里插入图片描述
  训练集评估结果:
在这里插入图片描述
  测试集评估结果:
在这里插入图片描述
  利用ROC-AUC算子对模型进行评估
在这里插入图片描述
  ROC-AUC算子评估结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(五)模型可视化

1、Python代码

import matplotlib.pyplot as plt# 显示重要特征
plot_importance(clf)
plt.title('Feature Importance')
plt.show()

2、Sentosa_DSML社区版

  右键决策树分类模型即可查看模型信息,模型特征重要性、混淆矩阵和决策树可视化如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、决策树回归任务实现对比

(一)数据加载和样本分区

  数据加载和样本分区同上

1、Python代码

# 读取数据
data = pd.read_csv('./TestData/winequality.csv')
#特征和标签分离
x = data.drop('quality', axis=1)
y = data['quality']
#分割数据集,测试集比例是 20%,训练集比例是 80%
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
# 输出训练集和测试集的样本数 
print("训练集样本数:", len(x_train)) 
print("测试集样本数:", len(x_test))

b)Sentosa_DSML社区版
在这里插入图片描述

(二)模型训练

1、Python代码

from sklearn.tree import DecisionTreeRegressor# 实例化决策树回归模型
regressor = DecisionTreeRegressor(criterion='mse',         # 损失函数使用均方误差(MSE)max_depth=5,             # 限制回归树的最大深度为 5,以防止过拟合min_samples_split=10,    # 内部节点分裂所需的最小样本数random_state=42          # 固定随机种子,保证每次运行代码时得到的回归树模型相同
)# 使用训练数据拟合模型
regressor.fit(x_train, y_train)# 在测试集上进行预测 
y_pred = regressor.predict(x_test)

2、Sentosa_DSML社区版

  样本分区完成后,连接决策树回归算子,进行模型属性配置并执行,得到决策树回归模型。
在这里插入图片描述

(三)模型评估

1、Python代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
import numpy as np# 预测结果
y_pred = regressor.predict(x_test)
# 计算 R^2
r2 = r2_score(y_test, y_pred)
# 计算 MSE(均方误差)
mse = mean_squared_error(y_test, y_pred)
# 计算 RMSE(均方根误差)
rmse = np.sqrt(mse)
# 计算 MAE(平均绝对误差)
mae = mean_absolute_error(y_test, y_pred)
# 计算 MAPE(平均绝对百分比误差)
mape = np.mean(np.abs((y_test - y_pred) / y_test)) * 100
# 计算 SMAPE(对称平均绝对百分比误差)
smape = np.mean(2 * np.abs(y_pred - y_test) / (np.abs(y_pred) + np.abs(y_test))) * 100# 输出评估结果
print(f"R²: {r2:.4f}")
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAE: {mae:.4f}")
print(f"MAPE: {mape:.4f}%")
print(f"SMAPE: {smape:.4f}%")

2、Sentosa_DSML社区版

  利用评估算子对模型进行评估
在这里插入图片描述

  训练集评估结果
在这里插入图片描述
  测试集评估结果
在这里插入图片描述

(四)模型可视化

1、Python代码

#可视化特征重要性
plot_importance(regressor)
plt.title('Feature Importance')
plt.show()

2、Sentosa_DSML社区版

  右键决策树回归模型即可查看模型信息:
在这里插入图片描述
在这里插入图片描述

六、总结

  相比传统代码方式,利用Sentosa_DSML社区版完成机器学习算法的流程更加高效和自动化,传统方式需要手动编写大量代码来处理数据清洗、特征工程、模型训练与评估,而在Sentosa_DSML社区版中,这些步骤可以通过可视化界面、预构建模块和自动化流程来简化,有效的降低了技术门槛,非专业开发者也能通过拖拽和配置的方式开发应用,减少了对专业开发人员的依赖。
  Sentosa_DSML社区版提供了易于配置的算子流,减少了编写和调试代码的时间,并提升了模型开发和部署的效率,由于应用的结构更清晰,维护和更新变得更加容易,且平台通常会提供版本控制和更新功能,使得应用的持续改进更为便捷。

  为了非商业用途的科研学者、研究人员及开发者提供学习、交流及实践机器学习技术,推出了一款轻量化且完全免费的Sentosa_DSML社区版。以轻量化一键安装、平台免费使用、视频教学和社区论坛服务为主要特点,能够与其他数据科学家和机器学习爱好者交流心得,分享经验和解决问题。文章最后附上官网链接,感兴趣工具的可以直接下载使用
Sentosa_DSML社区版官网

在这里插入图片描述

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

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

相关文章

ai扩图使用什么软件?无损扩图用这5个

你们知道ai扩图是什么吗&#xff1f;其实就是利用人工智能技术对图片进行无损放大处理&#xff0c;让低分辨率的图片变得清晰。通常在图像处理、设计和摄影领域尤为实用。 那么&#xff0c;你们知道ai扩图在线工具怎么选吗&#xff1f;别急&#xff0c;下面这篇文章分享5个超好…

11Python的Pandas:可视化

Pandas本身并没有直接的可视化功能&#xff0c;但它与其他Python库&#xff08;如Matplotlib和Seaborn&#xff09;无缝集成&#xff0c;允许你快速创建各种图表和可视化。这里是一些使用Pandas数据进行可视化的常见方法&#xff1a; 1. 使用Matplotlib Pandas中的plot()方法…

品读 Java 经典巨著《Effective Java》90条编程法则,第4条:通过私有构造器强化不可实例化的能力

文章目录 【前言】欢迎订阅【品读《Effective Java》】系列专栏java.lang.Math 类的设计经验总结 【前言】欢迎订阅【品读《Effective Java》】系列专栏 《Effective Java》是 Java 开发领域的经典著作&#xff0c;作者 Joshua Bloch 以丰富的经验和深入的知识&#xff0c;全面…

【软件文档】软件系统应急处理方案(word原件)

1 总则   1.1 目的 1.2 工作原则   2 应急工作小组机构及职责 3 预警和预防机制 3.1 系统监测及报告   3.2 预警 3.3 预警支持系统 3.4 预防机制 4 应急处理程序 4.1 系统突发事件分类分级的说明 4.2 系统应急预案启动 4.3 现场应急处理 5 保障措施   5.1 应急演练 5.2…

时间复杂度计算 递归

我们先拿出 2021 csp-s 程序题中一道看着就头大的程序题&#xff0c;要求分析 solve1 的复杂度。 设 T(n) ⁡ \operatorname{T(n)} T(n) 表示数组长度为 n n n 时的复杂度&#xff08;即 m − h 1 n m-h1n m−h1n&#xff09;。 T ( 1 ) 1 T(1)1 T(1)1&#xff0c;根据…

R语言机器学习算法实战系列(一):XGBoost算法(eXtreme Gradient Boosting)

介绍 XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升决策树(GBDT)的优化算法,它在处理大规模数据集和复杂模型时表现出色,同时在防止过拟合和提高泛化能力方面也有很好的表现。以下是XGBoost算法的原理和应用方向的详细介绍: 算法原理 目标函数:XGBoost的目标…

华为ensp中vlan与静态路由技术的实现

vlan 同一网段的设备&#xff0c;可以互通&#xff1b; 虚拟局域网&#xff1a;将局域网从逻辑上划分为多个局域网&#xff0c;不同通过vlan编号区分&#xff1b; 实现网络隔离。提高了网络安全性&#xff1b; vlan编号为12位&#xff1b; 范围1-4094可以用来配置 默认处于…

pytorch-AutoEncoders实战

目录 1. AutoEncoders回顾2. 实现网络结构3. 实现main函数 1. AutoEncoders回顾 如下图&#xff1a;AutoEncoders实际上就是重建自己的过程 2. 实现网络结构 创建类继承自nn.Model&#xff0c;并实现init和forward函数&#xff0c;init中实现encoder、decoder 直接上代码&a…

代码随想录算法训练营第13天|二叉树基础知识、递归遍历、迭代遍历、层序遍历、116. 填充每个节点的下一个右侧节点指针

目录 二叉树基础深度和高度满二叉树和完全二叉树二叉搜索树和平衡二叉搜索树二叉树节点定义前中后序遍历 递归遍历前序递归遍历—144. 二叉树的前序遍历 迭代遍历层序遍历116. 填充每个节点的下一个右侧节点指针1、题目描述2、思路3、code 二叉树基础 深度和高度 满二叉树和完…

XSS跨站脚本攻击及防护

什么是XSS攻击&#xff1f; XSS(Cross-Site Scripting,跨站脚本攻击)是一种代码注入攻击。攻击者在目标网站上注入恶意代码&#xff0c;当用户(被攻击者)登录网站时就会执行这些恶意代码&#xff0c;通过这些脚本可以读取cookie,session tokens&#xff0c;或者网站其他敏感的网…

Ubuntu WSL使用技巧

0 Preface/Foreword 1 默认为root用户 当下载完成Ubuntu之后&#xff0c;首次登录&#xff0c;当完成初始化后&#xff0c;提示输入新的用户名时候&#xff0c;直接点击右上角的X按钮&#xff0c;再重新登陆&#xff0c;系统会默认使用root权限登录。 2 root用户和普通用户切换…

阿里云社区领积分自动打卡Selenium IDE脚本

脚本 感觉打卡比较麻烦&#xff0c;要点开点按钮这种机械化的操作。 所以就自己整了个脚本&#xff1a; { “id”: “f9999777-9ad6-40e0-9435-4f105919c982”, “version”: “2.0”, “name”: “aliyun”, “url”: “https://developer.aliyun.com”, “tests”: [{ “id”…

ubuntu22安装docker

1、查看服务器系统信息 uname -a&#xff1a;显示内核名称、主机名、内核版本、处理器类型等信息。 lsb_release -a&#xff1a;显示有关 Ubuntu 发行版的详细信息&#xff0c;包括版本号、代号等。 free -h&#xff1a;查看系统内存使用情况。 df -h&#xff1a;查看磁盘空间使…

Vue2时间轴组件(TimeLine/分页、自动顺序播放、暂停、换肤功能、时间选择,鼠标快速滑动)

目录 1介绍背景 2实现原理 3组件介绍 4代码 5其他说明 1介绍背景 项目背景是 一天的时间轴 10分钟为一间隔 一天被划分成144个节点 一页面12个节点 代码介绍的很详细 可参考或者借鉴 2实现原理 对Element-plus滑块组件的二次封装 基于Vue2&#xff08;2.6.14&#x…

Vue3 : ref 与 reactive

目录 一.ref 二.reactive 三.ref与reactive的区别 四.总结 一.ref 在 Vue 3 中&#xff0c;ref 是一个用于创建可读写且支持数据跟踪的响应式引用对象。它主要用于在组件内部创建响应式数据&#xff0c;这些数据可以是基本类型&#xff08;如 number、string、boolean&…

深入理解全连接层:从线性代数到 PyTorch 中的 nn.Linear 和 nn.Parameter

文章目录 数学概念&#xff08;全连接层&#xff0c;线性层&#xff09;nn.Linear()nn.Parameter()Q1. 为什么 self.weight 的权重矩阵 shape 使用 ( out_features , in_features ) (\text{out\_features}, \text{in\_features}) (out_features,in_features)而不是 ( in_featur…

Vue的缓存组件 | 详解KeepAlive

引言 在Vue开发中&#xff0c;我们经常需要处理大量的组件渲染和销毁操作&#xff0c;这可能会影响应用的性能和用户体验。而Vue的KeepAlive组件提供了一种简便的方式来优化组件的渲染和销毁流程&#xff0c;通过缓存已经渲染的组件来提升应用的性能。 本文将详细介绍Vue的Ke…

即插即用篇 | YOLOv10 引入矩形自校准模块RCM | ECCV 2024

本改进已同步到YOLO-Magic框架! 语义分割是许多应用的重要任务,但要在有限的计算成本下实现先进性能仍然非常具有挑战性。在本文中,我们提出了CGRSeg,一个基于上下文引导的空间特征重建的高效且具有竞争力的分割框架。我们精心设计了一个矩形自校准模块,用于空间特征重建和…

经典RNA-seq分析流程1

RNA-seq分析有很多流程&#xff0c; 一般都是上游linux工具获取表达矩阵数据&#xff0c;然后就可以使用下游R包进行处理了&#xff0c;要么是差异DEG表达gene等分析&#xff1b; 因为下游分析其实R包是明确的&#xff0c;毕竟有很多生信分析教程&#xff0c;但是上游的linux…

无人机之处理器篇

无人机的处理器是无人机系统的核心部件之一&#xff0c;它负责控制无人机的飞行、数据处理、任务执行等多个关键功能。以下是对无人机处理器的详细解析&#xff1a; 一、处理器类型 无人机中使用的处理器主要包括以下几种类型&#xff1a; CPU处理器&#xff1a;CPU是无人机的…