决策树学习

news2024/12/22 23:40:56

决策树学习

  • 决策树
    • 决策树基础
      • 适用决策树学习的经典目标问题
      • 样本的表示
      • 训练样本
      • 决策树的概念
      • 发展历史
    • 经典决策树算法
      • ID3算法
      • CART (分类和回归树)
    • 过拟合问题(over-fitting)
    • 如何避免过拟合
        • 类型 I.
          • 何时停止分裂(1) :基于样本数
          • 何时停止分裂(2):基于信息增益的阈值
        • 避免过拟合: 类型 II
          • 后剪枝 (1): 错误降低剪枝
            • 剪枝后新的叶节点的标签赋值策略
            • 错误降低剪枝的效果
          • 后剪枝 (2): 规则后剪枝
            • 为什么在剪枝前将决策树转化为规则?
    • 扩展: 现实场景中的决策树学习•问题 & 改进
      • 1. 连续属性值
      • 2. 具有过多取值的属性
      • 3. 未知属性值
      • 4. 有代价的属性
      • 其他信息
    • 小结
    • 归纳学习假设

决策树

决策树基础

在这里插入图片描述

适用决策树学习的经典目标问题

  • 带有非数值特征的分类问题(主要是非连续)
  • 离散特征
  • 没有相似度概念(没有明确相似度概念)
  • 特征无序

另一个例子: 水果

  • 颜色:红色、绿色、黄色……
  • 大小:小、中、大
  • 形状:球形、细长
  • 味道:甜、酸

样本的表示

  • 属性的列表而非数值向量
  • 例如享受运动的例子:
    • 6值属性:天气、温度、湿度、风、水温、预测天气
    • 某一天的天气实例:{晴、暖、一般、强、暖、不变}
  • 例如水果的例子:
    • 4值元组:颜色、大小、形状、味道
    • 某个水果的实例: {红、球形、小、甜}

训练样本

训练样本就是在样本表达的基础上加上目标取值C(x), 如西瓜
在这里插入图片描述

决策树的概念


天生带有可解释性。

发展历史

  • 1966,由Hunt首先提出
  • 1970’s~1980’s
    • CART 由Friedman, Breiman提出
    • ID3 由 Quinlan 提出
  • 自1990’s以来
    • 对比研究、算法改进(Mingers, Dietterich, Quinlan, etc.)
    • 最广泛使用的决策树算法:C4.5 由 Quinlan 在 1993 年提出
  • C5.0

经典决策树算法

ID3算法

  • 自顶向下,贪心搜索
  • 递归算法
  • 核心循环:
    • A :下一步最佳 决策属性
    • 将 A 作为当前节点决策属性
    • 对属性A (vi)的每个值,创建与其对应的新的子节点
    • 根据属性值将训练样本分配到各个节点
    • 如果 训练样本被完美分类,则退出循环,否则继续下探分裂新的叶节点

训练样本被完美分类: 就是所有节点很好的分类了(比如所有叶子节点的标签都一样),看后面的 **ID3 Q2: 何时返回(停止分裂节点)?**内容
在这里插入图片描述

属性选择和节点混杂度(Impurity)

ID3 Q1: 哪个属性是最佳属性?

一共29个正例,35个负例,A1为最佳属性时,取True的有21个正例5个负例,A1取False的有8个正例30个负例;A2为最佳属性时,取True的有18个正例33个负例,A2取False的有11个正例2个负例
在这里插入图片描述
比如A1是湿度,湿度大还是正常,A 2是风,风是强还是正常

当前最佳属性节点选择
  • 基本原则: 简洁
    • 我们偏向于使用简洁的具有较少节点的树
      比如西瓜和柠檬,依据简洁原则,选择左边的,最佳属性color
      在这里插入图片描述
  • 基本原则: 简洁
    • 我们偏向于使用简洁的具有较少节点的树
    • 在每个节点N上,我们选择一个属性T,使得到达当前派生节点的数据尽可能“纯“(尽可能是同样分类的, 比如上面的颜色,左边就是西瓜,右边就是柠檬,如果是大小,右边既有西瓜,也有柠檬,就不太纯)
    • 纯度(purity)- 混杂度(impurity)

如何衡量混杂度?

熵(Entropy)(广泛使用)

E n t r o p y ( N ) = − ∑ j P ( w j ) l o g 2 P ( w j ) Entropy(N) = -\sum\limits_j P(w_j)log_2P(w_j) Entropy(N)=jP(wj)log2P(wj)

(比如节点是size, 那w1就是大,w2就是小)

  • 定义: 0log0 = 0(可能某个节点是没取值,那概率P(wj)可能是0,因log原因,需要这样定义,否则无意义)
  • 在信息理论中,熵度量了信息的纯度/复杂度,或者信息的不确定性
  • 正态分布 - 具有最大的熵值

横坐标为取正的概率,如果正的概率为0,则熵为0,取负的概率为100%;正例的概率为0.5时,熵值最大
在这里插入图片描述

如果只有两个,熵 = 正例的 − P ( w j ) l o g 2 P ( w j ) -P(w_j)log_2P(w_j) P(wj)log2P(wj) + 负例的 − P ( w j ) l o g 2 P ( w j ) -P(w_j)log_2P(w_j) P(wj)log2P(wj)
0.993已经很接近1, 说明熵很大
在这里插入图片描述

除了熵以外的其它混杂度度量

  • Gini混杂度(Duda 倾向于使用Gini混杂度) 基尼
    混杂度 i ( N ) = ∑ i ≠ j P ( w i ) P ( w j ) = 1 − ∑ j P 2 ( w j ) 混杂度i(N)=\sum\limits_{i \neq j} P(w_i)P(w_j)=1-\sum\limits_jP^2(w_j) 混杂度i(N)=i=jP(wi)P(wj)=1jP2(wj)
  • 错分类混杂度(miss-classification)
    混杂度 i ( N ) = 1 − max ⁡ j P ( w j ) 混杂度i(N)=1-\max\limits_jP(w_j) 混杂度i(N)=1jmaxP(wj)(所有中,j的概率最大)
混杂度(熵)

E n t r o p y ( N ) = − ∑ j P ( w j ) l o g 2 P ( w j ) Entropy(N) = -\sum\limits_j P(w_j)log_2P(w_j) Entropy(N)=jP(wj)log2P(wj)
下面坐标轴,依图例,蓝色纵坐标看右边,红色看左边
熵越来越大
在这里插入图片描述

混杂度(Gini)

i ( N ) = ∑ i ≠ j P ( w i ) P ( w j ) = 1 − ∑ j P 2 ( w j ) i(N)=\sum\limits_{i \neq j} P(w_i) P(w_j) = 1 - \sum\limits_jP^2(w_j) i(N)=i=jP(wi)P(wj)=1jP2(wj)

最大 Gini 混杂度 在 1 − n ∗ ( 1 / n ) 2 = 1 − 1 / n 1-n*(1/n)^2=1-1/n 1n(1/n)2=11/n 时取得

在这里插入图片描述

混杂度 (错分类)

i ( N ) = 1 − max ⁡ j P ( w j ) i(N) = 1 - \max\limits_jP(w_j) i(N)=1jmaxP(wj)

最大 Gini 混杂度 在 1 − n ∗ ( 1 / n ) 2 = 1 − 1 / n 1-n*(1/n)^2=1-1/n 1n(1/n)2=11/n时取得 (也就是均匀分布P(Wi) = 1/n)
在有n类时,最大错分类混杂度 = 最大Gini混杂度 1 − m a x { 1 / n } = 1 − 1 / n 1-max\{1/n\}=1-1/n 1max{1/n}=11/n

在这里插入图片描述

度量混杂度的变化 Δ I ( N ) ΔI(N) ΔI(N) — 信息增益(IG,Information Gain)

例如

  • 由于对A的排序整理带来的熵的期望减少量
    在这里插入图片描述
    根据公式计算,得 E n t r o p y ( s a 1 = t ) = − 21 26 ∗ l o g 2 21 26 − 5 26 ∗ l o g 2 5 6 = 0.706 Entropy(s_{a1=t}) = -\frac{21}{26}*log_2{\frac{21}{26}}-\frac{5}{26}*log_2{\frac{5}{6}}=0.706 Entropy(sa1=t)=2621log22621265log265=0.706,即下面最左叶子节点的熵。
    在这里插入图片描述
    在这里插入图片描述
    (21+5)/(29+35) = 26/64, 即上面最左叶子节点的重要性

因为 G a i n ( S , A 1 ) > G a i n ( S , A 2 ) Gain(S,A_1) > Gain(S, A_2) Gain(S,A1)>Gain(S,A2),所以选择A1节点(因为熵减少的更多,信息增益更大)

ID3 Q2: 何时返回(停止分裂节点)?
  • “如果训练样本被完美分类”

  • 情形 1: 如果当前子集中所有数据 有完全相同的输出类别,那么终止

  • 情形 2: 如果当前子集中所有数据 有完全相同的输入特征,那么终止

    • (可能性1.有噪声,需要判断,如果很多,数据不好,需要做数据清洗,如果少,不影响,很少有很干净的数据,大多数的机器学习都需要有这样的鲁棒性2.很重要的Feature(特征)漏掉了)
  • 可能的情形3: 如果 所有属性分裂的信
    息增益为0, 那么终止 -------------这是个好想法么?决策树中不会采用这样的策略, 看下面的例子

函数y=a XOR b

aby
000
011
101
110

信息增益:

属性概率分布IG
a050%0
a150%0
b050%0
b150%0
  • 根据提出的情形3,甚至在第一步就无法选择任何属性

如果不考虑情形3,随机一个属性就可以构建决策树,
在这里插入图片描述
因此在ID3中,只有两种情形会停止分裂(即完美分类),
- 相同的输出类别
- 相同的输入特征值

ID3举例
  • 训练样本
    在这里插入图片描述 - 选择特征 基于湿度、天气、温度、云这几个属性就可以计算出IG如下: 在这里插入图片描述 G a i n ( S , H u m i d i t y ) = 0.940 - [ ( 7 / 14 ) ∗ 0.985 + ( 7 / 14 ) ∗ 0.592 ] = 0.151 Gain(S,Humidity) =0.940-[(7/14)*0.985 + (7/14)*0.592] =0.151 Gain(S,Humidity)=0.940[(7/14)0.985+(7/14)0.592]=0.151
    G a i n ( S , O u t l o o k ) = 0.246 Gain(S,Outlook)=0.246 Gain(S,Outlook)=0.246
    G a i n ( S , W i n d ) = 0.048 Gain(S,Wind)=0.048 Gain(S,Wind)=0.048
    G a i n ( S , T e m p e r a t u r e ) = 0.029 Gain(S,Temperature)=0.029 Gain(S,Temperature)=0.029
    Outlook的IG最大,因此讲Outlook作为当前节点的属性

ID3算法搜索的假设空间

  • 假设空间是完备的

    • 目标函数一定在假设空间里
    • 既可以处理属性的OR,也可以处理属性的AND,因此是完备的,任何一个逻辑表达,在ID3的树里都可以表达
  • 输出单个假设

    • 不超过20个问题(根据经验) ,即影响因素(属性)不要超过20个,
    • 否则非常复杂, 也会产生过拟合(超过20个决策性属性)
  • 没有回溯

    • 局部最优,不是全局最优
  • 在每一步中使用子集的所有数据(比如之前的梯度下降,用一条数据就调整,和这里不一样)

    • 数据驱动的搜索选择
    • 对噪声数据有鲁棒性

    在这里插入图片描述

ID3中的归纳偏置 (Inductive Bias)
  • 假设空间 H 是作用在样本集合 X 上的
    • 没有对假设空间作限制, 假设空间不偏
  • 偏向于在靠近根节点处的属性具有更大信息增益的树
    • 尝试找到最短的树
    • 该算法的偏置在于对某些假设具有一些偏好(preference, 搜索偏置), 而不是
      假设空间 H 做限制(restriction描述偏置).

搜索偏置原理:
奥卡姆剃刀(Occam’s Razor)*
:偏向于符合数据的最短的假设
Domingos, The role of Occam’s Razor in knowledge discovery. Journal of Data Mining and Knowledge Discovery, 3(4), 1999.

一般认为:一般无偏的学习算法是无用的

CART (分类和回归树)

Classification and Regression Tree

  • 一个通用的框架:
    • 根据训练数据构建一棵决策树
    • 决策树会逐渐把训练集合分成越来越小的子集
    • 当子集纯净后不再分裂
    • 或者接受一个不完美的决策

许多决策树算法都在这个框架下,包括ID3、C4.5等等

过拟合问题(over-fitting)

c错误率为0,过于拟合,泛化()能力变弱
在这里插入图片描述
在这里插入图片描述

  • 我们说假设 h ∈ H h ∈H hH 对训练集过拟合,如果存在另一个假设 h ’ ∈ H h’ ∈H hH满足:
    e r r t r a i n ( h ) < e r r t r a i n ( h ′ ) err_{train}(h) < err_{train}(h^{'}) errtrain(h)<errtrain(h) AND e r r t e s t ( h ) > e r r t e s t ( h ′ ) err_{test}(h) > err_{test}(h^{'}) errtest(h)>errtest(h), 那h就是过拟合了
    如果没有测试集,那就用验证集做衡量

决策树过拟合的一个极端例子:
- 每个叶节点都对应单个训练样本 —— 每个训练样本都被完美地分类
- 整个树相当于仅仅是一个数据查表算法的简单实现

  • 决策树学习中的过拟合
    在这里插入图片描述
    上如中22以后,训练集精度还在增加,但是测试集精度已经在下降了,说明过拟合了

如何避免过拟合

  • 对决策树来说有两种方法避免过拟合
    • I 当数据的分裂在统计意义上并不显著时,就停止增长:预剪枝
    • II 构建一棵完全树,然后做后剪枝

类型 I.

对于第一种方法,很难估计树的大小

预剪枝

何时停止分裂(1) :基于样本数
  • 通常 一个节点不再继续分裂,当:
    • 到达一个节点的训练样本数小于训练集合的一个特定比例 (例如 5%)
    • 无论混杂度或错误率是多少
    • 原因:基于过少数据样本的决定会带来较大误差和泛化错误
何时停止分裂(2):基于信息增益的阈值

设定一个较小的阈值,如果满足下述条件则停止分裂: Δ i ( s ) ≤ β \Delta i(s) \leq \beta Δi(s)β

  • 优点:
    • 用到了所有训练数据
    • 叶节点可能在树中的任何一层
  • 缺点: 很难设定一个好的阈值

避免过拟合: 类型 II

对于方法 II:

  • 如何选择 “最佳” 的树?
    • 在另外的验证集合上测试效果
  • M D L ( M i n i m i z e D e s c r i p t i o n L e n g t h 最小描述长度 ) MDL (Minimize Description Length 最小描述长度) MDL(MinimizeDescriptionLength最小描述长度):
    m i n i m i z e ( s i z e ( t r e e ) + s i z e ( m i s c l a s s i f i c a t i o n s ( t r e e ) ) ) minimize ( size(tree) + size(misclassifications(tree)) ) minimize(size(tree)+size(misclassifications(tree)))
后剪枝 (1): 错误降低剪枝
  • 把数据集分为训练集验证集
    • 验证集:
      • 已知标签
      • 测试效果
      • 在该集合上不做模型更新!
  • 剪枝直到再剪就会对损害性能:
    • 在验证集上测试剪去每个可能节点(和以其为根的子树)的影响
    • 贪心地去掉某个可以提升验证集准确率的节点
      在这里插入图片描述

如何定义新的叶节点的标签?

剪枝后新的叶节点的标签赋值策略
  • 赋值成最常见的类别
  • 给这个节点多类别的标签
    • 每个类别有一个支持度 (根据训练集中每种标签的数目)
    • 测试时: 依据概率选择某个类别或选择多个标签
  • 如果是一个回归树 (数值标签),可以做平均或加权平均
  • ……
错误降低剪枝的效果

在这里插入图片描述

后剪枝 (2): 规则后剪枝
  1. 把树转换成等价的由规则构成的集合
    • e.g. if (outlook=sunny) and (humidity=high) then playTennis = no
  2. 对每条规则进行剪枝,去除哪些能够提升该规则准确率的规则前件
    • i.e. (outlook=sunny), (humidity=high)
  3. 将规则排序成一个序列 (根据规则的准确率从高往低排序)
  4. 该序列中的最终规则对样本进行分类(依次查看是否满足规则序列)

(注:在规则被剪枝后,它可能不再能恢复成一棵树)
一种被广泛使用的方法,例如C4.5

为什么在剪枝前将决策树转化为规则?
  • 独立于上下文
    • 否则,如果子树被剪枝,有两个选择:
      • 完全删除该节点
      • 保留它
  • 不区分根节点和叶节点
  • 提升可读性

扩展: 现实场景中的决策树学习•问题 & 改进

1. 连续属性值

在这里插入图片描述

  • 建立一些离散属性值
  • 可选的策略:
    • I.选择相邻但有不同决策的值中间值 x S = ( x l + x u ) / 2 x_S=(x_l+x_u)/2 xS=(xl+xu)/2
      (Fayyad 在1991年证明了满足这样条件的阈值可以信息增益IG最大化)
    • II. 考虑概率 x S = ( 1 − P ) x l + P x u x_S = (1-P)x_l+Px_u xS=(1P)xl+Pxu

2. 具有过多取值的属性

问题:

  • 偏差: 如果属性有很多值,根据信息增益IG,会优先被选择
    • e.g. 享受运动的例子中,将一年里的每一天作为属性
  • 一个可能的解决方法: 用 GainRatio(增益比) 来替代

在这里插入图片描述

3. 未知属性值

在这里插入图片描述
在这里插入图片描述

4. 有代价的属性

• 有时有的属性不容易获得(收集该属性值的代价太大)

  • Tan & Schlimmer(1990) G a i n 2 ( S , A ) C o s t ( A ) \frac{Gain^2(S,A)}{Cost(A)} Cost(A)Gain2(S,A)
  • Nunez(1988) 2 G a i n ( S , A ) − 1 ( C o s t ( A ) + 1 ) w \frac{2^{Gain(S,A)}-1}{(Cost(A)+1)^w} (Cost(A)+1)w2Gain(S,A)1
    • w:[0,1] 代价的重要性

其他信息

  • 可能是最简单和频繁使用的算法
    • 易于理解
    • 易于实现
    • 易于使用
    • 计算开销小
  • 决策森林:
    • 由C4.5产生的许多决策树
  • 更新的算法:C5.0 http://www.rulequest.com/see5-info.html
  • Ross Quinlan的主页: http://www.rulequest.com/Personal/

小结

  • 介绍及基本概念

    • 以ID3算法为例
      • 算法描述
      • 选择特征
      • 终止条件
      • ID3算法的归纳偏置
    • 过拟合问题
    • 剪枝
      • 预剪枝:基于样本数;基于信息增益阈值
      • 后剪枝: 错误降低剪枝;规则后剪枝

    在实际应用中,一般预剪枝更快,而后剪枝得到的树准确率更高

  • 扩展

    • 实际场景中的决策树学习
      • 连续属性值的离散化
      • 具有过多取值的属性处理
      • 未知(缺失)属性值的处理
      • 有代价的属性
    • 基本想法来源于人类做决策的过程
    • 简单、容易理解:“如果…就…”
    • 对噪声数据有鲁棒性
  • 应用

    • 在研究和应用中广泛使用
      • 医疗诊断(临床症状 → \rightarrow 疾病)
      • 信用分析 (个人信息 → \rightarrow 有价值客户?)
      • 日程规划
      • ……
    • 通常在部署更复杂的算法之前,常把决策树作为一个基准方法
      (baseline)
    • 决策树方法常被用作复杂学习框架中的基础部分之一

归纳学习假设

  • 大部分的学习是从已知的样本中获得一般化的概念
    在这里插入图片描述
  • 归纳学习算法能够在最大程度上保证输出的假设能够在训练数据上拟合目标概念
    • 注意: 过拟合问题
  • 归纳学习假设:
    Any hypothesis found to approximate the target function well over a sufficiently large set of training examples will also approximate the target function well over unobserved examples.
    (任一假设若在足够大的训练样例集中很好地逼近目标函数,它也能在未见实例中很好地逼近目标函数)

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

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

相关文章

在Ubuntu 系统下开发GUI,用哪种开发工具比较好?

在Ubuntu系统下开发GUI&#xff0c;你可以考虑使用以下几种开发工具&#xff1a;Qt Creator&#xff1a;Qt Creator是一个跨平台的集成开发环境&#xff0c;专门用于开发基于Qt框架的应用程序。它提供了丰富的图形界面设计工具和代码编辑器&#xff0c;支持C和QML编程。Qt Crea…

centos7.9 安装openssl 3.1.1

直接看篇教程 #可能版本号随时间会变化&#xff0c;最好去官网看一下再确认wget https://www.openssl.org/source/openssl-3.1.1.tar.gz#解压 tar -xvf openssl-3.1.1.tar.gz -C /usr/local/ #进入安装目录配置环境 cd /usr/local/openssl-3.1.1/./config --prefix/usr/local…

Unity使用Cinemachine插件实现摄像机跟随和震动

一、实现跟随 1、在PackageManager添加插件 2、创建Cinemachine的摄像机&#xff0c;我的项目是2D项目所以创建2D摄像机 3、将Player拖拽到Follow和LookAt 4、创建一个空物体&#xff0c;向它添加PolygonCollider2D&#xff0c;调整好可视范围的大小以后在CinemachineVirtua…

一文弄懂Flink CDC

文章目录 1.CDC概述2.CDC 的实现原理3.为什么选 Flink4.支持的连接器5.支持的 Flink 版本6.Flink CDC特性7.用法实例7.1DataStream API 的用法(推荐)7.2Table/SQL API的用法 1.CDC概述 CDC&#xff08;Change Data Capture&#xff09;是一种用于捕获和处理数据源中的变化的技…

刘铁猛C#语言教程——语句1

语句的定义 以下是对该文档的翻译 一条语句对应着一条汇编语言指令或者一条语句对应着一系列有着内在逻辑关联的汇编指令&#xff0c;对于这句话的理解&#xff0c;我们可以观察C#编译器编译的C#程序后得到的汇编语言代码&#xff0c;这样便可以看到语句与指令的关系&#xff…

【Arduino】Teensy® USB Development Board 板子介绍

文章目录 1. Features2. Pins Name3. Getting started Teesy by Arduino1. Install Arduino IDE Software2. Install Teensyduino Software3. Running Blink Program 4. IMPORTANT INFORMATION BEFORE GOING FURTHER WITH USING TEENSY 4.11. I/O 仅耐受 3.3V&#xff01;2. 电…

【MyBatis 学习一】认识MyBatis 第一个MyBatis查询

目录 一、认识MyBatis 1、MyBatis是什么&#xff1f; 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目 3、xml文件配置 &#xff08;1&#xff09;配置数据库连接 &#xff08;2&#xff09;配置 MyBatis 中的 XML 路径 三、测试&#x…

基于4G网络的嵌入式设备远程升级系统设计与实现(学习一)

摘要 随着无线通信技术的不断更新发展&#xff0c;嵌入式设备的联网应用领域得以大规模扩大&#xff0c;远程升级功能成为产品开发中必不可少的一部分。 本文对嵌入式设备远程升级进行了研究&#xff0c;在不改变设备硬件集成度基础上&#xff0c;设计实现了分离式升级的远程…

在Vue-Element中引入jQuery的方法

一、在终端窗口执行安装命令 npm install jquery --save执行完后&#xff0c;npm会自动在package.json中加上jquery 二、在main.js中引入&#xff08;或者在需要使用的页面中引入即可&#xff09; import $ from jquery三、使用jquery

结构型设计模式之亨元模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

第16章 控制脚本

CtrlC组合键会发送SIGINT信号&#xff0c;停止shell中当前运行的进程。 CtrlZ组合键会生成一个SIGTSTP信号&#xff0c;停止shell中运行的任何进程。停止进程会让程序继续保留在内存中&#xff0c;并能从上次停止的位置继续运行。 方括号中的数字是shell分配的作业号&#xff0…

PHP之Smarty使用以及框架display和assign原理

一、Smarty的下载 进入Smarty官网下载&#xff0c;复制目录libs目录即可http://www.smarty.net/http://www.smarty.net/ 二、使用Smarty&#xff0c;创建目录demo,把libs放进去改名为Smarty 三、引入Smarty配置,创建目录&#xff0c;index.php文件配置 <?php…

VuePress在生产环境跳转子页报错 Failed to execute ‘appendChild‘ on ‘Node‘

记录一个使用VuePress时遇到的问题 使用VuePress做了一个文档网页&#xff0c;在开发环境的时候一切正常&#xff0c;但是发布到生产环境后&#xff0c;直接跳转二级页面会报错Failed to execute appendChild on Node 比如主页是http://sun/docs/.vuepress/dist/index.html#/…

【算法】递增序列

对于一个字母矩阵&#xff0c;我们称矩阵中的一个递增序列是指在矩阵中找到两个字母&#xff0c;它们在同一行&#xff0c;同一列&#xff0c;或者在同一 45 度的斜线上&#xff0c;这两个字母从左向右看、或者从上向下看是递增的 对于下面的 30 行 50列的矩阵&#xff0c;请问…

AtcoderABC234场

A - Weird FunctionA - Weird Function 题目大意 要求计算 f(f(f(t)t)f(f(t))) &#xff0c;其中 t 是一个给定的整数。 函数 f(x) 定义为 f(x) x^2 2x 3。 思路分析 定义实现函数 f(int t)&#xff0c;并嵌套调用。 时间复杂度 O(1) AC代码 #include<bits/stdc.…

STN:Spatial Transformer Networks

1.Abstract 卷积神经网络缺乏对输入数据保持空间不变的能力&#xff0c;导致模型性能下降。作者提出了一种新的可学习模块&#xff0c;STN。这个可微模块可以插入现有的卷积结构中&#xff0c;使神经网络能够根据特征图像本身&#xff0c;主动地对特征图像进行空间变换&#x…

Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)(A-G)

Contest Duration: 2023-07-22(Sat) 20:00 - 2023-07-22(Sat) 21:40 (local time) (100 minutes) 头文件和宏 #include<iostream> #include<string> #include<vector> using namespace std; #define int long long #define fer(i,a,b) for(int ia;i<b;i…

Python实现HBA混合蝙蝠智能算法优化随机森林回归模型(RandomForestRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法&#xff0c;是一种搜索全局最优解的有效方法…

信息安全与网络空间安全 - 保障您的在线安全

数据参考&#xff1a;CISP官方 目录&#xff1a; 信息与信息安全 信息安全属性 网络安全发展阶段 网络空间安全保障 一、信息与信息安全 1、什么是信息&#xff1f; 定义&#xff1a;信息是通过传递和处理的方式&#xff0c;用于传达知识、事实、数据或观点的内容。形…

k8s安装prometheus

安装 在目标集群上&#xff0c;执行如下命令&#xff1a; kubectl apply -f https://gitee.com/i512team/dhorse/raw/main/conf/kubernetes-prometheus.yml使用 1.在浏览器访问地址&#xff1a;http://master_ip:30000&#xff0c;如下图所示&#xff1a; 2.查看k8s自带的…