决策树学习

决策树学习

  • 决策树
    • 决策树基础
      • 适用决策树学习的经典目标问题
      • 样本的表示
      • 训练样本
      • 决策树的概念
      • 发展历史
    • 经典决策树算法
      • ID3算法
      • CART (分类和回归树)
    • 过拟合问题(over-fitting)
    • 如何避免过拟合
        • 类型 I.
          • 何时停止分裂(1) :基于样本数
          • 何时停止分裂(2):基于信息增益的阈值
        • 避免过拟合: 类型 II
          • 后剪枝 (1): 错误降低剪枝(error reduce pruning)
            • 剪枝后新的叶节点的标签赋值策略
            • 错误降低剪枝的效果
          • 后剪枝 (2): 规则后剪枝(rule-post pruning)
            • 为什么在剪枝前将决策树转化为规则?
    • 扩展: 现实场景中的决策树学习•问题 & 改进
      • 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 当数据的分裂在统计意义上并不显著时,就停止增长:预剪枝(pre-pruning) (显著性统计说明参见机器学习实验方法与原则)
    • II 构建一棵完全树,然后做后剪枝(post-pruning)

类型 I.

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

预剪枝

何时停止分裂(1) :基于样本数
  • 通常 一个节点不再继续分裂,当:
    • 到达一个节点的训练样本数小于训练集合的一个特定比例 (例如 5%)
    • 无论混杂度或错误率是多少
    • 原因:基于过少数据样本的决定会带来较大误差(有时可以说很大方差)和泛化错误, 类似盲人摸🐘, 摸到腿以为是大柱子…;再比如一堆数据,大部分数据几乎在一条直线上,但是刚好碰到少量局部数据,组成一团,和大部分数据不一致,再分会导致很大误差,
何时停止分裂(2):基于信息增益的阈值

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

  • 优点:

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

    • (可以通过前面介绍的方法,在完整训练集上分出一部分作为验证集,通过训练集训练得出参数,通过验证集调整参数,评估出最好的参数)

    和前面的例子x = a xor b不同, 信息增益为0还在分裂,是因为当时在讨论停止条件,而且不分裂就够不成一棵树;但是现在介绍的基于信息增益的阈值停止分裂,是已经构成一棵足够充分的树,再分裂就可能会过拟合,情况不同。

避免过拟合: 类型 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)))

missclassification: 错误率: 如果只追求错误率最小,导致树很长,细节点越多
size(tree):如果只追求树的大小,会导致错误率比较大

后剪枝 (1): 错误降低剪枝(error reduce pruning)
  • 把数据集分为训练集验证集
    • 验证集:
      • 已知标签
      • 测试效果,用于验证性能和错误率
      • 在该集合上不做模型更新!
  • 剪枝直到再剪就会损害性能(hurt performance):
    • 在验证集上测试剪去每个可能节点(和以其为根的子树)的影响
      • (在验证集上看性能会不会提升,因为在训练集上找不到这棵树;每次只剪一个,形成新树,不断循环,直到性能不再提高)
    • 贪心地去掉某个可以提升验证集准确率的节点(剪掉哪个节点提升准确率越多,就剪哪个)
      在这里插入图片描述

剪掉节点后,如何定义新的叶节点的标签?

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

验证集是从后往前剪,即下面的箭头方向
验证集是用来减弱过拟合问题,不能做到百分百消除过拟合,因为 验证集 ≠ 测试集 验证集\neq 测试集 验证集=测试集
在这里插入图片描述

后剪枝 (2): 规则后剪枝(rule-post pruning)
  1. 把树转换成等价的由规则构成的集合(决策树就是由规则构成,可以看一开始介绍)
    • e.g. if (outlook=sunny) and (humidity=high) then playTennis = no
  2. 对每条规则进行剪枝,去除那些后能够提升该规则准确率(验证集上的准确率)的规则前件(规则条件)
    • i.e. (outlook=sunny), (humidity=high) ,(outlook=sunny) and (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(这个是哪边概率大,就偏向那边)

(补充: 机器学习中还常用这样的方法:比如上面的温度, 将温度数据数量在二位坐标系中绘出,横轴温度,纵轴数据量, 将曲线和x之间的面切成小长方形(类似定积分求面积的推导),面积一样, 这样每个区间数据量大小一样,还有其它的)

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.mzph.cn/news/9456.shtml

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

相关文章

如何高效实现文件传输:小文件采用零拷贝、大文件采用异步io+直接io

一般会如何实现文件传输&#xff1f; 服务器提供文件传输功能&#xff0c;需要将磁盘上的文件读取出来&#xff0c;通过网络协议发送到客户端。如果需要你自己编码实现这个文件传输功能&#xff0c;你会怎么实现呢&#xff1f; 通常&#xff0c;你会选择最直接的方法&#xf…

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64

1.交叉编译是什么&#xff0c;为什么要交叉编译 编译&#xff1a;在一个平台上生成在该平台上的可执行代码交叉编译&#xff1a;在一个平台上生成在另一个平台上的可执行代码交叉编译的例子&#xff1a;如51单片机的可执行代码&#xff08;hex文件&#xff09;是在集成环境kei…

AT15透明屏有哪些特点?

AT15透明屏是一种新型的显示技术&#xff0c;它采用了透明材料制成的屏幕&#xff0c;可以实现透明显示效果。这种屏幕可以广泛应用于各种领域&#xff0c;如商业广告、展览展示、智能家居等。 AT15透明屏的特点之一是其高透明度。 由于采用了透明材料制成&#xff0c;AT15透明…

深度对话|Sui资产所有权如何让游戏体验更好

近日&#xff0c;我们采访了Mysten Labs的游戏产品总监Bill Allred&#xff0c;共同探讨了为什么Sui非常适合游戏。他分享了对Sui关键创新的看法&#xff0c;以及它为游戏开发者带来的价值&#xff0c;Sui的关键创新帮助开发者将他们所想象的游戏变为现实。 你能谈谈某些游戏的…

【微服务系统设计】系统设计基础:速率限制器

什么是速率限制器&#xff1f; 速率限制是指防止操作的频率超过定义的限制。在大型系统中&#xff0c;速率限制通常用于保护底层服务和资源。速率限制一般在分布式系统中作为一种防御机制&#xff0c;使共享资源能够保持可用性。 速率限制通过限制在给定时间段内可以到达您的 A…

vue解决跨域访问问题(个人学习笔记六)

目录 友情提醒第一章、跨越问题解决1.1&#xff09;什么是跨域问题&#xff1f;1.2&#xff09;第一种解决方式&#xff1a;后端设置允许跨域访问1.3&#xff09;第二种解决方式&#xff1a;前端配置代理 第二章、配置代理服务器2.1&#xff09;配置简单代理服务器2.2&#xff…

端口复用与重映射

端口复用和重映射 STM32F1有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的功能引脚&#xff0c;那么当这个GPIO作为内置外设使用的时候&#xff0c;就叫做复用。 大家都知道&#xff0c;MCU都有串口…

kotlin 编写一个简单的天气预报app(一)

使用Android Studio开发天气预报APP 今天我来分享一下如何使用Android Studio开发一个天气预报APP。在文中&#xff0c;我们将使用第三方接口获取实时天气数据&#xff0c;并显示在APP界面上。 步骤一&#xff1a;创建新项目 首先&#xff0c;打开Android Studio并创建一个新…

MySQL 中一条 SQL 的查询与更新

MySQL 中一条 SQL 的查询与更新 1 SQL 的查询1.1 MySQL 的逻辑架构图1.2 连接器1.3 查询缓存1.4 分析器1.5 优化器1.6 执行器 2 SQL 的更新2.1 redo log&#xff08;重做日志&#xff09;2.2 binlog&#xff08;归档日志&#xff09;2.3 redo log 和 binlog 日志的差异2.4 示例…

React 中 {} 的应用

列表渲染&#xff1a; 1.使用数组的 map 方法&#xff08;因为map 可以映射&#xff09; 2、列表要添加 key 属性&#xff0c;值要唯一 // 导入 // 用来获取 dom元素 import { createRoot } from "react-dom/client";// 内容 const contentArr [{ id: 1, name: &…

提高公文写作效率,可以采用模板和样例来辅助写作

采用模板和样例是提高公文写作效率的一种常见方法。 模板是指已经制作好的公文格式和结构模板&#xff0c;可以根据模板来组织和排版自己的文章&#xff0c;以减少排版时间和排版错误。常见的模板包括各类公文格式&#xff0c;例如通知、报告、请示等等。在使用模板的过程中&am…

GPT4ALL私有化部署 01 | Python环境

进入以下链接&#xff1a; https://www.python.org/downloads/release/python-3100/ 滑动到底部 选择你系统对应的版本&#xff0c;如果你是win&#xff0c;那么大概率是win-64bit 有可能你会因为网络的问题导致下载不了&#xff0c;我提供了 链接 接着只需要打开 等待…

Mac 快速生成树形项目结构目录

我这里使用的是通过包管理 Homebrew安装形式。没有安装的话可以自行搜索 Homebrew 安装方式 brew install tree直接到项目的根目录执行 tree 命令 tree 效果如下&#xff1a; or &#xff1a; tree -CfL 3效果如下&#xff1a;

opencv-24 图像几何变换03-仿射-cv2.warpAffine()

什么是仿射&#xff1f; 仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变换能够 保持图像的平直性和平行性。平直性是指图像经过仿射变换后&#xff0c;直线仍然是直线&#xff1b;平行性是指 图像在完成仿射变换后&#xff0c;平行线仍然是平行线。…

SQL注入--题目

联合查询注入&#xff1a; bugku-这是一个神奇的登录框 手工注入&#xff1a; 点吧&#xff0c;输入0’发现还是&#xff1a; 输入0" 发现报错&#xff1a; 确定可以注入&#xff0c;判断字段有多少个 0"order by 1,2,3# 发现&#xff1a; 说明有两列。 输入 0&qu…

【论文阅读22】Label prompt for multi-label text classification

论文相关 论文标题&#xff1a;Label prompt for multi-label text classification&#xff08;基于提示学习的多标签文本分类&#xff09; 发表时间&#xff1a;2023 领域&#xff1a;多标签文本分类 发表期刊&#xff1a;Applied Intelligence&#xff08;SCI二区&#xff0…

SpringBoot整合Elasticsearch

SpringBoot整合Elasticsearch SpringBoot整合Elasticsearch有以下几种方式&#xff1a; 使用官方的Elasticsearch Java客户端进行集成 通过添加Elasticsearch Java客户端的依赖&#xff0c;可以直接在Spring Boot应用中使用原生的Elasticsearch API进行操作。参考文档 使用Sp…

数据库中的事务处理

MySQL的事务处理&#xff1a;只支持 lnnoDB 和BDB数据表类型 1.事务就是将一组SQL语句放在同一批次内去执行 2.如果一个SQL语句出错&#xff0c;则该批次内的所有SQL都将被取消执行 MySQL的事务实现方法一&#xff1a; select autocommit 查询当前事务提交模式 set a…

机器学习深度学习——图像分类数据集

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——softmax回归&#xff08;下&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习&&深度学习…