julia语言中的决策树

  决策树(Decision Tree)是一种基本的分类与回归方法,它呈现出一种树形结构,可以直观地展示决策的过程和结果。在决策树中,每个内部节点表示一个属性上的判断条件,每个分支代表一个可能的属性值,每个叶节点代表一个类别或者具体的数值。决策树的主要优点是模型具有可读性,分类速度快。

主要算法

构建决策树的主要算法有ID3、C4.5、CART等。这些算法的主要区别在于如何选择最优划分属性。

ID3算法

  以信息增益为准则来选择划分属性。信息增益表示得知特征A的信息而使得类Y的信息不确定性减少的程度。

C4.5算法

  是ID3算法的改进,采用信息增益比来选择划分属性,克服了ID3算法偏向选择取值多的属性的缺点。

CART算法

  既可以用于分类也可以用于回归。CART分类时,使用基尼指数(Gini index)最小化准则来选择划分属性;CART回归时,使用平方误差最小化准则来选择划分属性。

算法公式 

信息熵(Entropy)

  信息熵是度量样本集合纯度最常用的一种指标。它表示随机变量不确定性的度量,也就是数据的混乱程度。信息熵越大,数据的混乱程度越高;信息熵越小,数据的纯度越高。

公式:Ent(S) = -\sum_{k=1}^{n} p_k \log_{2} p_{k}

S是当前样本集合。

p_{k}是集合中第 k类样本所占的比例。

n是类别的总数。

信息熵是通过计算每个类别的概率与其对应的信息量-\log_{2} p_{k}的加权和来得到的。如果所有样本都属于同一类别,则信息熵为0,表示数据完全纯净。

信息增益(Information Gain)

  信息增益表示在得知特征A的信息后,使得类y的信息不确定性减少的程度,它衡量了使用某个特征进行划分后,数据的混乱程度降低了多少,正确的信息增益基于特征 A对数据集 S进行划分后,集合 S的信息熵与划分后各子集信息熵的加权和之差。

公式:Gain(A) = Ent(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} Ent(S_v)

A是待考察的特征。

Values(A)是特征 A所有可能取值的集合。

S_{v}是集合 S 中特征 A 取值为 v 的子集。

|S_{v}| 和 |S|分别表示集合 S_v 和 S 的元素数量。

信息增益比(Information Gain Ratio)

  信息增益比是为了校正信息增益容易偏向于选择取值较多的特征的问题而提出的。它通过引入一个称为分裂信息熵的项来惩罚取值较多的特征。

SplitEntropy(A) = -\sum_{v \in Values(A)} \frac{|S_v|}{|S|} \log_{2} \frac{|S_v|}{|S|}

信息增益比则是信息增益与分裂信息熵的比值:

GainRatio(A) = \frac{Gain(A)}{SplitEntropy(A)}

分裂信息熵衡量了按照特征 A进行划分时产生的信息量的多少。将其与信息增益结合使用,可以平衡特征取值多少对选择的影响。

基尼指数(Gini Index)

  基尼指数是另一种度量数据混乱程度的指标。与信息熵类似,基尼指数越小,数据的纯度越高。

Gini(S) = 1 - \sum_{k=1}^{n} p_k^2

基尼指数通过从1中减去每个类别的概率的平方和来计算。当所有样本都属于同一类别时,基尼指数为0。当类别分布均匀时,基尼指数达到最大值1 - \frac{1}{n}对于 n个类。因此,基尼指数越小,表示集合中被选中的样本被分错的概率越小,即集合的纯度越高。

 构建决策树

决策树的构建通常包括以下几个步骤:

特征选择

  从训练数据的特征集合中选择一个特征作为当前节点的划分标准。按照所选特征的每一个取值,将训练数据集划分为若干子集,使得每个子集在当前特征上具有相同的取值。

决策树生成

  根据所选特征评估标准(如信息增益、信息增益比、基尼指数等),从根节点开始,递归地生成子节点。直到满足停止条件(如达到最大深度、所有样本属于同一类别、划分后的样本数小于预设阈值等)。

决策树剪枝

  为了避免过拟合,可以对决策树进行剪枝。剪枝分为预剪枝(在决策树生成过程中进行)和后剪枝(在决策树生成后进行)。通过剪枝,可以删除一些不必要的分支,使决策树更加简洁和高效。

分类与回归

  使用生成的决策树对新的数据进行分类或回归预测。从根节点开始,根据新数据的特征值,沿着决策树向下遍历,直到到达某个叶节点,该叶节点所代表的类别或数值即为预测结果。

 

使用Julia语言实现

  以下代码于 DecisionTree包  官方示例有进行修改,在使用前需安装DecisionTree包和ScikitLearn包、KnetMetrics包

# 加载 DecisionTree 软件包
using DecisionTree

分离 Fisher 的 Iris 数据集要素和标注

features, labels = load_data("iris")    # 同样可以查看 "adult" 和 "digits" 数据集  
  
# 加载的数据类型是 Array{Any}  
# 为了获得更好的性能,将它们转换为具体的类型  
features = float.(features)  
labels   = string.(labels)
修剪树分类器
# 训练一个深度受限的分类器  
model = DecisionTreeClassifier(max_depth=2)  
fit!(model, features, labels)  
# 以美观的格式打印决策树,深度为 5 个节点(可选)  
print_tree(model, 5)  
# 应用已训练的模型  
predict(model, [5.9,3.0,5.1,1.9])  
# 获取每个标签的概率  
predict_proba(model, [5.9,3.0,5.1,1.9])  
println(get_classes(model)) # 返回 predict_proba 输出中的列顺序  
# 在 3 折交叉验证上运行  
# 请查看 ScikitLearn.jl 了解安装说明  
using ScikitLearn.CrossValidation: cross_val_score  
accuracy = cross_val_score(model, features, labels, cv=3)

 输出决策树

原生API

决策树分类器
using KnetMetrics
using DecisionTree

features, labels = load_data("iris")    # 同样可以查看 "adult" 和 "digits" 数据集  
  
# 加载的数据类型是 Array{Any}  
# 为了获得更好的性能,将它们转换为具体的类型  
features = float.(features)  
labels   = string.(labels)

# 训练完整的决策树分类器  
model = build_tree(labels, features)  
  
# 修剪决策树:合并纯度大于等于90%的叶子节点(默认值为100%)  
# 这里的纯度指的是节点中样本属于同一类别的比例  
model = prune_tree(model, 0.9)  
  
# 以美观的格式打印决策树,深度为5个节点(可选)  
# 这有助于我们可视化决策树的结构和决策过程  
print_tree(model, 5)  
  
# 应用已训练的模型进行预测  
apply_tree(model, [5.9,3.0,5.1,1.9])  
  
# 将模型应用于所有样本,得到预测结果  
preds = apply_tree(model, features)  
  
# 生成混淆矩阵,以及准确率和Kappa分数  
# 混淆矩阵可以帮助我们了解模型的分类性能  
confusion_matrix(labels, preds)  
  
# 获取每个标签的概率  
# 这对于需要了解分类置信度的场景很有用  
apply_tree_proba(model, [5.9,3.0,5.1,1.9], ["Iris-setosa", "Iris-versicolor", "Iris-virginica"])  
  
# 对修剪后的决策树进行3折交叉验证  
# 交叉验证是一种评估模型性能的方法,可以帮助我们了解模型在未知数据上的表现  
n_folds = 3  
accuracy = nfoldCV_tree(labels, features, n_folds)  
  
# 设置分类参数及其默认值  
# 这些参数可以控制决策树的构建和修剪过程,从而影响模型的性能  
# pruning_purity: 用于后修剪的纯度阈值(默认值:1.0,不进行修剪)  
# max_depth: 决策树的最大深度(默认值:-1,没有最大深度限制)  
# min_samples_leaf: 每个叶子节点所需的最小样本数(默认值:1)  
# min_samples_split: 进行分裂所需的最小样本数(默认值:2)  
# min_purity_increase: 分裂所需的最小纯度增加量(默认值:0.0)  
# n_subfeatures: 随机选择的特征数(默认值:0,保留所有特征)  
# rng: 使用的随机数生成器或种子(默认值:Random.GLOBAL_RNG)  
n_subfeatures = 0; max_depth = -1; min_samples_leaf = 1; min_samples_split = 2  
min_purity_increase = 0.0; pruning_purity = 1.0; seed = 3  
  
# 使用指定的参数构建决策树分类器  
model = build_tree(labels, features,  
                   n_subfeatures,  
                   max_depth,  
                   min_samples_leaf,  
                   min_samples_split,  
                   min_purity_increase;  
                   rng = seed)  
  
# 使用指定的参数进行n折交叉验证,并返回准确率  
# verbose参数设置为true可以打印出详细的验证过程信息  
accuracy = nfoldCV_tree(labels, features,  
                        n_folds,  
                        pruning_purity,  
                        max_depth,  
                        min_samples_leaf,  
                        min_samples_split,  
                        min_purity_increase;  
                        verbose = true,  
                        rng = seed)

输出模型

Feature 3 < 2.45 ?
├─ Iris-setosa : 50/50
└─ Feature 4 < 1.75 ?
    ├─ Feature 3 < 4.95 ?
        ├─ Iris-versicolor : 47/48
        └─ Feature 4 < 1.55 ?
            ├─ Iris-virginica : 3/3
            └─ Feature 1 < 6.95 ?
                ├─ Iris-versicolor : 2/2
                └─ Iris-virginica : 1/1
    └─ Feature 3 < 4.85 ?
        ├─ Feature 1 < 5.95 ?
            ├─ Iris-versicolor : 1/1
            └─ Iris-virginica : 2/2
        └─ Iris-virginica : 43/43
Fold 1
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 16   0   0
  0  14   0
  0   1  19
Accuracy: 0.98
Kappa:    0.9697702539298669

Fold 2
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 18   0   0
  0  12   3
  0   3  14
Accuracy: 0.88
Kappa:    0.819494584837545

Fold 3
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 16   0   0
  0  19   2
  0   0  13
Accuracy: 0.96
Kappa:    0.9393939393939393

Mean Accuracy: 0.94

Fold 1
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 19   0   0
  0  15   2
  0   2  12
Accuracy: 0.92
Kappa:    0.8790810157194682

Fold 2
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 16   0   0
  0  14   2
  0   1  17
Accuracy: 0.94
Kappa:    0.9097472924187725

Fold 3
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 15   0   0
  0  17   0
  0   0  18
Accuracy: 1.0
Kappa:    1.0

Mean Accuracy: 0.9533333333333333
 随机森林分类器 
# 训练随机森林分类器  
# 使用2个随机特征,10棵树,每棵树使用0.5的样本比例,最大树深度为6  
model = build_forest(labels, features, 2, 10, 0.5, 6)  
  
# 应用已学习的模型  
apply_forest(model, [5.9,3.0,5.1,1.9])  
  
# 获取每个标签的概率  
apply_forest_proba(model, [5.9,3.0,5.1,1.9], ["Iris-setosa", "Iris-versicolor", "Iris-virginica"])  
  
# 对森林进行3折交叉验证,每次分割使用2个随机特征  
n_folds=3; n_subfeatures=2  
accuracy = nfoldCV_forest(labels, features, n_folds, n_subfeatures)  
  
# 分类参数及其默认值设置  
# n_subfeatures: 每次分割要考虑的随机特征数(默认值:-1,即特征数的平方根)  
# n_trees: 要训练的树的数量(默认值:10)  
# partial_sampling: 每棵树训练所需的样本比例(默认值:0.7)  
# max_depth: 决策树的最大深度(默认值:无最大限制)  
# min_samples_leaf: 每个叶子节点所需的最小样本数(默认值:5)  
# min_samples_split: 分割所需的最小样本数(默认值:2)  
# min_purity_increase: 分割所需的最小纯度增加量(默认值:0.0)  
# 关键字 rng: 使用的随机数生成器或种子(默认值:Random.GLOBAL_RNG)  
#              多线程森林必须使用Int类型的种子  
n_subfeatures=-1; n_trees=10; partial_sampling=0.7; max_depth=-1  
min_samples_leaf=5; min_samples_split=2; min_purity_increase=0.0; seed=3  
  
model = build_forest(labels, features,  
                     n_subfeatures,  
                     n_trees,  
                     partial_sampling,  
                     max_depth,  
                     min_samples_leaf,  
                     min_samples_split,  
                     min_purity_increase;  
                     rng = seed)  
  
accuracy = nfoldCV_forest(labels, features,  
                          n_folds,  
                          n_subfeatures,  
                          n_trees,  
                          partial_sampling,  
                          max_depth,  
                          min_samples_leaf,  
                          min_samples_split,  
                          min_purity_increase;  
                          verbose = true,  
                          rng = seed)

输出结果

Fold 1
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 15   0   0
  0  18   1
  0   1  15
Accuracy: 0.96
Kappa:    0.9396863691194209

Fold 2
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 15   0   0
  0  12   2
  0   2  19
Accuracy: 0.92
Kappa:    0.877899877899878

Fold 3
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 20   0   0
  0  14   3
  0   1  12
Accuracy: 0.92
Kappa:    0.878787878787879

Mean Accuracy: 0.9333333333333332

Fold 1
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 19   0   0
  0  15   2
  0   2  12
Accuracy: 0.92
Kappa:    0.8790810157194682

Fold 2
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 16   0   0
  0  13   3
  0   1  17
Accuracy: 0.92
Kappa:    0.8795180722891568

Fold 3
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 15   0   0
  0  17   0
  0   3  15
Accuracy: 0.94
Kappa:    0.9099099099099098

Mean Accuracy: 0.9266666666666667
 自适应增强决策树桩分类器
# train adaptive-boosted stumps, using 7 iterations
model, coeffs = build_adaboost_stumps(labels, features, 7);
# apply learned model
apply_adaboost_stumps(model, coeffs, [5.9,3.0,5.1,1.9])
# get the probability of each label
apply_adaboost_stumps_proba(model, coeffs, [5.9,3.0,5.1,1.9], ["Iris-setosa", "Iris-versicolor", "Iris-virginica"])
# 对boosted stumps进行3折交叉验证,使用7次迭代
n_iterations=7; n_folds=3
accuracy = nfoldCV_stumps(labels, features,
                          n_folds,
                          n_iterations;
                          verbose = true)

输出结果

old 1
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 18   0   0
  0  15   0
  0   4  13
Accuracy: 0.92
Kappa:    0.880239520958084

Fold 2
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 17   0   0
  0  17   2
  0   0  14
Accuracy: 0.96
Kappa:    0.9399038461538461

Fold 3
Classes:  ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
Matrix:   3×3 Matrix{Int64}:
 15   0   0
  0  15   1
  0   4  15
Accuracy: 0.9
Kappa:    0.8500299940011996

Mean Accuracy: 0.9266666666666666

 

回归示例 
n, m = 10^3, 5
features = randn(n, m)
weights = rand(-2:2, m)
labels = features * weights

 回归树 

using DecisionTree

features, labels = load_data("iris")    # also see "adult" and "digits" datasets

n, m = 10^3, 5
features = randn(n, m)
weights = rand(-2:2, m)
labels = features * weights

# 训练回归树  
model = build_tree(labels, features)  
# 应用已学习的模型  
apply_tree(model, [-0.9,3.0,5.1,1.9,0.0])  
# 运行3折交叉验证,返回决定系数(R^2)的数组  
n_folds = 3  
r2 = nfoldCV_tree(labels, features, n_folds)  
  
# 回归参数集及其相应的默认值  
# pruning_purity: 用于后剪枝的纯度阈值(默认:1.0,不剪枝)  
# max_depth: 决策树的最大深度(默认:-1,无最大值)  
# min_samples_leaf: 每个叶子所需的最小样本数(默认:5)  
# min_samples_split: 分裂所需的最小样本数(默认:2)  
# min_purity_increase: 分裂所需的最小纯度(默认:0.0)  
# n_subfeatures: 随机选择的特征数(默认:0,保留所有)  
# 关键字 rng: 要使用的随机数生成器或种子(默认 Random.GLOBAL_RNG)  
n_subfeatures = 0; max_depth = -1; min_samples_leaf = 5  
min_samples_split = 2; min_purity_increase = 0.0; pruning_purity = 1.0 ; seed=3  
  
model = build_tree(labels, features,  
                   n_subfeatures,  
                   max_depth,  
                   min_samples_leaf,  
                   min_samples_split,  
                   min_purity_increase;  
                   rng = seed)  
  
r2 =  nfoldCV_tree(labels, features,  
                   n_folds,  
                   pruning_purity,  
                   max_depth,  
                   min_samples_leaf,  
                   min_samples_split,  
                   min_purity_increase;  
                   verbose = true,  
                   rng = seed)

输出结果

Fold 1
Mean Squared Error:     1.1192402911257475
Correlation Coeff:      0.9472838062763782
Coeff of Determination: 0.8971356247350447

Fold 2
Mean Squared Error:     1.111874839232273
Correlation Coeff:      0.9348375925443003
Coeff of Determination: 0.8736744843129887

Fold 3
Mean Squared Error:     1.183298319862818
Correlation Coeff:      0.9341422313248625
Coeff of Determination: 0.8705440012888646

Mean Coeff of Determination: 0.8804513701122992

Fold 1
Mean Squared Error:     1.0323579387631954
Correlation Coeff:      0.9422656678561453
Coeff of Determination: 0.8862358467110852

Fold 2
Mean Squared Error:     1.0151297530543415
Correlation Coeff:      0.9447969369155476
Coeff of Determination: 0.8926327449004646

Fold 3
Mean Squared Error:     1.085847261851617
Correlation Coeff:      0.9460144474841884
Coeff of Determination: 0.894208955983675

Mean Coeff of Determination: 0.8910258491984083
 回归随机森林 
# 训练回归森林,使用2个随机特征,10棵树,
# 每个叶子平均5个样本,每棵树使用0.7的样本比例
model = build_forest(labels, features, 2, 10, 0.7, 5)
# apply learned model
apply_forest(model, [-0.9,3.0,5.1,1.9,0.0])
# run 3-fold cross validation on regression forest, using 2 random features per split
n_subfeatures=2; n_folds=3
r2 = nfoldCV_forest(labels, features, n_folds, n_subfeatures)

#=
build_forest()函数的回归参数集及其相应的默认值
n_subfeatures: 每次分割要考虑的随机特征数(默认:-1,即特征数的平方根)
n_trees: 要训练的树的数量(默认:10)
partial_sampling: 每棵树训练所需的样本比例(默认:0.7)
max_depth: 决策树的最大深度(默认:无最大值)
min_samples_leaf: 每个叶子所需的最小样本数(默认:5)
min_samples_split: 分裂所需的最小样本数(默认:2)
min_purity_increase: 分裂所需的最小纯度(默认:0.0)
关键字 rng: 要使用的随机数生成器或种子(默认:Random.GLOBAL_RNG)
多线程森林必须使用Int类型的种子
=#

n_subfeatures=-1; n_trees=10; partial_sampling=0.7; max_depth=-1
min_samples_leaf=5; min_samples_split=2; min_purity_increase=0.0; seed=3

model = build_forest(labels, features,
                     n_subfeatures,
                     n_trees,
                     partial_sampling,
                     max_depth,
                     min_samples_leaf,
                     min_samples_split,
                     min_purity_increase;
                     rng = seed)

r2 =  nfoldCV_forest(labels, features,
                     n_folds,
                     n_subfeatures,
                     n_trees,
                     partial_sampling,
                     max_depth,
                     min_samples_leaf,
                     min_samples_split,
                     min_purity_increase;
                     verbose = true,
                     rng = seed)

输出结果

Fold 1
Mean Squared Error:     1.3599903131498468
Correlation Coeff:      0.9515587356817066
Coeff of Determination: 0.8663047566031118

Fold 2
Mean Squared Error:     1.3831299735363378
Correlation Coeff:      0.9477732726231708
Coeff of Determination: 0.8548766665136407

Fold 3
Mean Squared Error:     1.3108585932358423
Correlation Coeff:      0.9444344709074005
Coeff of Determination: 0.856713400894658

Mean Coeff of Determination: 0.8592982746704702

Fold 1
Mean Squared Error:     1.3542680364781128
Correlation Coeff:      0.9470579766572528
Coeff of Determination: 0.8566121773382684

Fold 2
Mean Squared Error:     1.3027839706551103
Correlation Coeff:      0.9472514130926669
Coeff of Determination: 0.8685137573058215

Fold 3
Mean Squared Error:     1.0809211711553741
Correlation Coeff:      0.9587274410123069
Coeff of Determination: 0.8851291475337838

Mean Coeff of Determination: 0.8700850273926246
 保存模型

模型可以保存到磁盘,并使用 JLD2.jl 包重新加载。 

using JLD2
@save "model_file.jld2" model

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

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

相关文章

使用IDEA进行Scala编程相关安装步骤

一、相关安装包&#xff08;jdk最好用1.8版本&#xff0c;其他不做要求&#xff09; IDEA安装包 jdk-8u101-windows-x64.exe scala-2.12.19 二、安装顺序 在安装IDEA之前&#xff0c;首先要安装好java和scala环境&#xff0c;以便后续配置 三、jdk和scala安装要求 1.jdk安…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

【Kubernetes】k8s删除master节点后重新加入集群

目录 前言一、思路二、实战1.安装etcdctl指令2.重置旧节点的k8s3.旧节点的的 etcd 从 etcd 集群删除4.在 master03 上&#xff0c;创建存放证书目录5.把其他控制节点的证书拷贝到 master01 上6.把 master03 加入到集群7.验证 master03 是否加入到 k8s 集群&#xff0c;检查业务…

Docker 安装 LogStash

关于LogStash Logstash&#xff0c;作为Elastic Stack家族中的核心成员之一&#xff0c;是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据&#xff0c;并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集…

【LabVIEW FPGA入门】浮点数类型支持

如今&#xff0c;使用浮点运算来设计嵌入式系统的需求变得越来越普遍。随着 FPGA 因其固有的大规模并行性而在浮点性能方面继续超越微处理器&#xff0c;这种情况正在加剧。线性代数和数字信号处理 (DSP) 等高级算法可以受益于浮点数据类型的高动态范围精度。LabVIEW FPGA 通过…

【全开源】JAVA语聊大厅+陪玩系统语音聊天APP系统源码

我们技术使用后台服务 springbootmybatisplusmysql用户端 uniapp&#xff08;vue语法&#xff09;管理后台 vueelementUi 一、功能介绍 动态列表、发布动态、精准分类 创建语聊房间、房间玩法、违规公示、聊天显示 赠送礼物、上麦功能、房间管理、礼物中心、我的接单 我的技…

大话设计模式——8.原型模式(Prototype Pattern)

1.介绍 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。属于创建型模式。 UML图&#xff1a; 1&#xff09;浅拷贝&#xff1a; 指创建一个新的对象&#xff0c;然后将原始对象的字段值复制到新对象中。如果字段是基本类型&#xff0c;直接复制…

将FastSAM中的TextPrompt迁移到MobileSAM中

本博文简单介绍了SAM、FastSAM与MobileSAM,主要关注于TextPrompt功能的使用。从性能上看MobileSAM是最实用的,但其没有提供TextPrompt功能,故而参考FastSAM中的实现,在MobileSAM中嵌入TextPrompt类。并将TextPrompt能力嵌入到MobileSAM官方项目提供的gradio.py部署代码中,…

阿里云下载安装centos

这里以centos7.x版本下载安装为例 : 网址 : 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 点击centos : 再点击下载地址 : 找到 7/ 并点击 : 找到isos/并点击 : 点击x86_64 : 找到4.4G的文件点击下载 ; 点击创建新的虚拟机 , 然后选择典型 &#xff0c; 然后点击下一…

HarmonyOS(鸿蒙)ArcUI组件

方舟开发框架&#xff08;简称ArkUI&#xff09;为HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面…

Centos yum报错‘Connection timed out after 30002 milliseconds‘) 正在尝试其它镜像。解决办法

修改源后更新报错 我有两个Centos 一个7 一个8&#xff0c;疏忽在7上面配置了8的源后报错&#xff0c;通过下面的报错发现提示的是Centos7的源找不到&#xff0c;才意识到是不是配置错了源。 报错信息&#xff1a; http://mirrors.aliyun.com/centos/7/AppStream/x86_64/os/r…

html5cssjs代码 023 公制计量单位进位与换算表

html5&css&js代码 023 公制计量单位进位与换算表 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;用于展示公制计量单位的进位与换算表。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"utf-8&quo…

Java代码审计安全篇-CSRF漏洞

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计和部分师傅审计思路以及webgoat靶场&#xff0c;记录…

【计算机视觉】二、图像形成——实验:2D变换编辑器2.0(Pygame)

文章目录 一、向量和矩阵的基本运算二、几何基元和变换1、几何基元(Geometric Primitives)2、几何变换(Geometric Transformations)2D变换编辑器0. 项目结构1. Package: guibutton.pywindow.py1. __init__(self, width, height, title)2. add_buttons(self)3. clear(self)4. dr…

数据结构和算法:哈希表

哈希表 哈希表&#xff08;hash table&#xff09;&#xff0c;又称散列表&#xff0c;它通过建立键 key 与值 value 之间的映射&#xff0c;实现高效的元素查询。具体而言&#xff0c;向哈希表中输入一个键 key &#xff0c;则可以在 &#x1d442;(1) 时间内获取对应的值 va…

Jenkins安装部署

目录 一、CI/CD介绍 二、持续集成与持续交付 持续集成&#xff08;CI&#xff09; 持续交付&#xff08;CD&#xff09; 持续集成的组成要素 持续集成的好处 持续集成的流程 三、Gitlab简介与特点 四、Gitlab CI/CD工作原理 五、Gitlab的部署与安装 安装依赖环境 G…

uniapp,实时获取系统时间(动态显示)

在开发中&#xff0c;如果涉及到时间有关的&#xff0c;有可能需要把系统的时间以动态的形式展示出来。 一、页面效果 后面的秒钟是会变的&#xff0c;一秒改变一下&#xff0c;也就是说这个就是与系统时间一致的。 二、思路 我们通过new date对象&#xff0c;获取系统的时间…

鸿蒙开发实战:【Faultloggerd部件】

theme: z-blue 简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native In…

javaweb数据相应以及格式控制

莫道桑榆晚&#xff0c;为霞尚满天&#xff0c;友友们好今天更新的是相应数据格式 响应介绍 前面我们所见得都是数据请求&#xff0c;通过修改对应的路径参数&#xff0c;我们就可以进行必要的访问&#xff0c;但是对于数据的响应并没有太多的介绍&#xff0c;并且我们知道数…

基于背景差法的运动目标检测(车辆检测),Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…