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

news/2024/9/17 18:50:46/ 标签: 机器学习, 低代码, 决策树

文章目录

  • 一、算法概念
  • 二、算法原理
    • (一)树的构造
    • (二)划分选择
      • 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.ppmy.cn/news/1525219.html

相关文章

centos下nvme over rdma 环境配置

nvme over rdma 环境配置 本文主要介绍NVMe over RDMA的安装和配置。关于什么是NVMe over Fabrics,什么是NVMe over RDMA&#xff0c;本文就不做介绍了&#xff0c;网上资料一大堆。 可以看看什么是NVMe over Fabrics&#xff1f; RDMA&#xff08;全称&#xff1a;Remote Dir…

DevOps -CI/CD 与自动化部署

DevOps - CI/CD 与自动化部署详解 DevOps 是一种结合开发&#xff08;Development&#xff09;与运维&#xff08;Operations&#xff09;的方法论&#xff0c;旨在通过工具和文化变革&#xff0c;促进软件开发和运维之间的协作&#xff0c;提升软件交付的效率、质量和稳定性。…

Golang | Leetcode Golang题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; func canCross(stones []int) bool {n : len(stones)dp : make([][]bool, n)for i : range dp {dp[i] make([]bool, n)}dp[0][0] truefor i : 1; i < n; i {if stones[i]-stones[i-1] > i {return false}}for i : 1; i < n; i {…

Qt_控件的QWidget属性介绍

目录 1、QWidget的核心属性 2、enabled 3、geometry 3.1 代码测试geometry 4、windowTitle 4.1 代码测试windowTitle 5、windowIcon 5.1 QIcon设置图标 5.2 qrc机制 5.3 代码测试windowIcon 6、windowOpacity 6.1 代码测试windowOpacity 7、cursor 7.1 代码测试…

自动化任务的错误处理:编写健壮的自动化脚本,处理Office应用中的错误和异常情况

目录 引言 一、自动化任务概述 二、自动化脚本编写基础 2.1 环境准备 2.2 脚本结构 2.3 示例代码 三、Office应用中的错误和异常情况处理 3.1 文件访问权限问题 3.2 文件格式不兼容 3.3 宏病毒和安全性问题 3.4 控件错误和插件问题 四、异常处理与日志记录 4.1 捕…

Apple M3编译OpenSSL安卓平台SO库

1.下载OpenSSL源码: https://github.com/openssl/openssl.git 2.配置NDK环境变量:vim ~/.zprofile 添加ANDROID_NDK_ROOT环境变量,iosdev改为你自己的用户名 export ANDROID_NDK_ROOT=/Users/iosdev/Library/Android/sdk/ndk/23.1.7779620 添加NDK下可执行文件路径到PATH环…

工具、环境等其他小问题归纳

此篇文章内容会不定期更新&#xff0c;仅作为学习过程中的笔记记录 一、查询Windows 10环境下python版本与安装路径 若电脑成功安装了python环境&#xff0c;不小心忘了版本。 I、查询版本 1、cmd窗口快捷查询 Win R 输入cmd 进入窗口&#xff1b; 直接输入 python --version …

华为 HCIP 认证费用和报名资格

在当今竞争激烈的信息技术领域&#xff0c;华为 HCIP认证备受关注。它不仅能提升个人的技术实力与职业竞争力&#xff0c;也为企业选拔优秀人才提供了重要依据。以下将详细介绍华为 HCIP 认证的费用和报名资格。 一、HCIP 认证费用 华为HCIP认证的费用主要由考试费和培训费构成…

Linux 安装神州通用数据库 ShenTong7.0.8_342.92_linux64

Linux 安装神州通用数据库 ShenTong7.0.8_342.92_linux64 1、准备工作2、安装数据库3、启停数据库4、后续步骤 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux环境下安装神州通用数据库&#xff08;ShenTong&#xff09;是一个相对直…

Go中更安全的枚举

iota Go让你用iota来使用枚举。 const (Guest iotaMemberModeratorAdmin )虽然Go是明确的&#xff0c;但iota似乎相对模糊。如果你以任何其他方式对const组进行排序&#xff0c;你会引入副作用。在上面的例子中&#xff0c;你仅仅对第一个参数Guest赋值了。你可以显式地给每…

【前端】vue+html+js 实现table表格展示,以及分页按钮添加

一. 问题描述 数据条数太多显示到页面上时可能会渲染较慢&#xff0c;因此需要截取数据进行展示。 二. 代码写法 思路&#xff1a;按照上述图示思路&#xff0c;需要有两个数据列表&#xff0c;一个存储的是所有的列表数据&#xff0c;一个存储的是展示的数据列表&#xff0c…

jQuery UI API 文档

关于《jQuery UI API 文档》&#xff0c;我找到了一些有用的信息。jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题。如果您是 jQuery 新手&#xff0c;建议您先查看 jQuery 教程。目前&#xff0c;我找到的资料主要是关于 jQuery UI 1.10 版…

【加密社】深入理解TON智能合约 (FunC语法)

king: 摘要&#xff1a;在TON&#xff08;TheOpenNetwork&#xff09;区块链平台中&#xff0c;智能合约扮演着举足轻重的角色。本文将通过分析一段TON智能合约代码 带领读者学习dict&#xff08;字典&#xff09;和list&#xff08;列表&#xff09;在FunC语言中的用法&#x…

LeetCode_sql_day24(1212.查询球队积分)

描述 表: Teams ------------------------- | Column Name | Type | ------------------------- | team_id | int | | team_name | varchar | ------------------------- team_id 是该表具有唯一值的列。 表中的每一行都代表一支独立足球队。表: Matches…

人工智能 | 搭建企业内部的大语言模型系统

大纲 开源大语言模型大语言模型管理私有大语言模型服务部署方案 开源大语言模型 担心安全与隐私&#xff1f;可私有部署的开源大模型 商业大模型&#xff0c;不支持私有部署 ChatGPTClaudeGoogle Gemini百度问心一言 开源大模型&#xff0c;支持私有部署 MistralMeta Llama…

【LeetCode】:面试题 16.05. 阶乘尾数

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 好久没有写文章了&#xff0c;今天碰见了一道有趣的题目&#xff0c;写下来分享一下。 &#x1f3c6;1.问题描…

【QT】系统-上

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;QT 目录 &#x1f449;&#x1f3fb;事件QWidget中常见的事件 &#x1f449;&#x1f3fb;处理鼠标事件&#xff1a;leaveEvent和enterEvent&#x1f449;&a…

简单代码实现视频转图片_py

目录 1.安装OpenCV 环境要求 安装命令 验证安装 2. OpenCV用法 3.实现程序 博主最近在研究深度学习&#xff0c;需要收集数据集进行处理&#xff0c;但一张张拍照真是太麻烦了 就想着&#xff0c;哎&#xff0c;能不能写一个程序&#xff0c;把视频转成图片不就行了&am…

tabBar设置底部导航栏

如果应用是一个多 tab 应用&#xff0c;可以通过 tabBar 配置项指定一级导航栏&#xff0c;以及 tab 切换时显示的对应页&#xff0c;简单来说就是像美团外卖下面的导航栏一样可以任意切换 1.首先创建三个页面&#xff0c;在页面里面可以写一些东西或者放一张图片方便区分。 2.…

http网络请求与下载进度

Http_request 目录 一、XMLHttpRequest 在使用 Fetch API 进行网络请求时&#xff0c;原生的 Fetch API 并不直接支持获取下载进度的功能&#xff0c;因为 Fetch API 主要是基于 Promise 的&#xff0c;它主要关注于请求的成功或失败&#xff0c;以及响应数据的处理&#xff…