机器学习-决策树详解

决策树

决策树简介

学习目标

1.理解决策树算法的基本思想

2.知道构建决策树的步骤


【理解】决策树例子

决策树算法是一种监督学习算法,英文是Decision tree。

决策树思想的来源非常朴素,试想每个人的大脑都有类似于if-else这样的逻辑判断,这其中的if表示的是条件,if之后的else就是一种选择或决策。程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法。

比如:你母亲要给你介绍男朋友,是这么来对话的:

女儿:多大年纪了?

母亲:26。

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是公务员不?

母亲:是,在税务局上班呢。

女儿:那好,我去见见。

于是你在脑袋里面就有了下面这张图:

作为女孩的你在决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。

【知道】决策树简介

决策树是什么?

决策树是一种树形结构,树中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,每个叶子节点代表一种分类结果

决策树的建立过程

1.特征选择:选取有较强分类能力的特征。

2.决策树生成:根据选择的特征生成决策树。

3.决策树也易过拟合,采用剪枝的方法缓解过拟合。

ID3决策树

学习目标:

1.理解信息熵的意义

2.理解信息增益的作用

3.知道ID3树的构建流程

【理解】信息熵

ID3 树是基于信息增益构建的决策树.

定义

  • 熵在信息论中代表随机变量不确定度的度量。

  • 熵越大,数据的不确定性度越高

  • 熵越小,数据的不确定性越低

公式

例子1:假如有三个类别,分别占比为:{1/3,1/3,1/3},信息熵计算结果为:

$H=-\frac{1}{3}\log(\frac{1}{3})-\frac{1}{3}\log(\frac{1}{3})-\frac{1}{3}\log(\frac{1}{3})=1.0986$

例子2:假如有三个类别,分别占比为:{1/10,2/10,7/10},信息熵计算结果为:

$H=-\frac{1}{10}\log(\frac{1}{10})-\frac{2}{10}\log(\frac{2}{10})-\frac{7}{10}\log(\frac{7}{10})=0.8018$

熵越大,表示整个系统不确定性越大,越随机,反之确定性越强。

例子3:假如有三个类别,分别占比为:{1,0,0},信息熵计算结果为:

H=- 1 log(1)=0

【理解】信息增益

定义

特征$A$对训练数据集D的信息增益$g(D,A)$,定义为集合$D$的熵$H(D)$与特征A给定条件下D的熵$H(D|A)$之差。即

根据信息增益选择特征方法是:对训练数据集D,计算其每个特征的信息增益,并比较它们的大小,并选择信息增益最大的特征进行划分。表示由于特征$A$而使得对数据D的分类不确定性减少的程度。

算法:

设训练数据集为D,$\mid D\mid$表示其样本个数。设有$K$个类$C_k$,$k=1,2,\cdots,K$,$\mid C_k\mid$为属于类$C_k$的样本个数,$\sum\limits{k=1}^{K}=\mid{D}\mid$。设特征A有$n$个不同取值${a_1, a_2, \cdots,a_n}$,根据特征A的取值将D划分为$n$个子集$D_1, D_2, \cdots,D_n$,$\mid D_i\mid$为$D_i$样本个数,$\sum\limits{i=1}^n\mid D_i\mid=\mid D\mid$。子集中属于类$C_k$的样本集合为$D{ik}$,即$D{ik}=D_i\bigcap C_k$,$\mid D{ik}\mid$为$D{ik}$的样本个数。信息增益算法如下:

  • 输入:训练数据集D和特征A;

  • 输出:特征A对训练数据集D的信息增益$g(D,A)

  • (1) 计算数据集D的经验熵H(D)

  • (2) 计算特征A对数据集D的经验条件熵H(D\mid A)

$H(D\mid A)=\sum\limits{i=1}^{n}\frac{\mid D_i\mid}{\mid D\mid}H(D_i)=-\sum\limits{i=1}^{n}\frac{\mid D_i\mid}{\mid D\mid}\sum\limits{k=1}^{K}\frac{\mid D{ik}\mid}{\mid D_i\mid}\log_2\frac{\mid D_{ik}\mid}{\mid D_i\mid}$

  • (3) 计算信息增益

    g(D,A)=H(D)-H(D|A)

例子:

已知6个样本,根据特征a:

特征a目标值
αA
αA
βB
αA
βB
αB

α 部分对应的目标值为: AAAB

β 部分对应的目标值为:BB

【知道】ID3树构建流程

构建流程:

  1. 计算每个特征的信息增益

  2. 使用信息增益最大的特征将数据集 S 拆分为子集

  3. 使用该特征(信息增益最大的特征)作为决策树的一个节点

  4. 使用剩余特征对子集重复上述(1,2,3)过程

案例:

已知:某一个论坛客户流失率数据

需求:考察性别、活跃度特征哪一个特征对流失率的影响更大

分析:

15条样本:5正样本、10个负样本

  • 计算熵

  • 计算性别信息增益

  • 计算活跃度信息增益

  • 比较两个特征的信息增益

1.计算熵

2.计算性别条件熵(a="性别"):

计算性别信息增益(a="性别")

  1. 计算活跃度条件熵(a=“活跃度")

计算活跃度信息增益(a=活跃度")

结论:活跃度的信息增益比性别的信息增益大,对用户流失的影响比性别大。

C4.5决策树

学习目标:

1.理解信息增益率的意义

2.知道C4.5树的构建方法

【理解】信息增益率

  1. Gain_Ratio 表示信息增益率

  2. IV 表示分裂信息、内在信息

  3. 特征的信息增益 ➗ 内在信息

    1. 如果某个特征的特征值种类较多,则其内在信息值就越大。即:特征值种类越多,除以的系数就越大。

    2. 如果某个特征的特征值种类较小,则其内在信息值就越小。即:特征值种类越小,除以的系数就越小。

信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。惩罚参数:数据集D以特征A作为随机变量的熵的倒数。

【知道】C4.5树构建说明

特征a的信息增益率:

  1. 信息增益:1-0.5408520829727552=0.46

  2. 特征熵:-4/6*math.log(4/6, 2) -2/6*math.log(2/6, 2)=0.9182958340544896

  3. 信息增益率:信息增益/分裂信息=0.46/0.9182958340544896=0.5

特征b的信息增益率:

  1. 信息增益:1

  2. 特征熵:-1/6*math.log(1/6, 2) * 6=2.584962500721156

  3. 信息增益率:信息增益/信息熵=1/2.584962500721156=0.38685280723454163

由计算结果可见,特征1的信息增益率大于特征2的信息增益率,根据信息增益率,我们应该选择特征1作为分裂特征。

CART决策树

学习目标:

1.理解基尼指数的作用

2.知道cart构建的特征选择方法

【知道】Cart树简介

Cart模型是一种决策树模型,它即可以用于分类,也可以用于回归。

分类和回归树模型采用不同的最优化策略。Cart回归树使用平方误差最小化策略,Cart分类生成树采用的基尼指数最小化策略。

【理解】基尼指数计算方法

  1. 信息增益(ID3)、信息增益率值越大(C4.5),则说明优先选择该特征。

  2. 基尼指数值越小(cart),则说明优先选择该特征。

【理解】基尼指数计算举例

是否有房

计算过程如下:根据是否有房将目标值划分为两部分:

  1. 计算有房子的基尼值: 有房子有 1、4、7 共计三个样本,对应:3个no、0个yes

    $G i n i(\text {是否有房,yes })=1-\left(\frac{0}{3}\right)^{2}-\left(\frac{3}{3}\right)^{2}=0$

  2. 计算无房子的基尼值:无房子有 2、3、5、6、8、9、10 共七个样本,对应:4个no、3个yes

    $\operatorname{Gini}(\text {是否有房,no })=1-\left(\frac{3}{7}\right)^{2}-\left(\frac{4}{7}\right)^{2}=0.4898$

  3. 计算基尼指数:第一部分样本数量占了总样本的 3/10、第二部分样本数量占了总样本的 7/10:

    $\operatorname{Gini_{-}} i n \operatorname{dex}(D, \text { 是否有房 })=\frac{7}{10} * 0.4898+\frac{3}{10} * 0=0.343$

婚姻状况
  1. 计算 {married} 和 {single,divorced} 情况下的基尼指数:

    结婚的基尼值,有 2、4、6、9 共 4 个样本,并且对应目标值全部为 no:

    $\operatorname{Gini_index}(D,\text{{married}})=0$

    不结婚的基尼值,有 1、3、5、7、8、10 共 6 个样本,并且对应 3 个 no,3 个 yes:

    $\operatorname{Gini_index}(D, \text { {single,divorced} })=1-\left(\frac{3}{6}\right)^{2}-\left(\frac{3}{6}\right)^{2}=0.5$

    以 married 作为分裂点的基尼指数:

    $\operatorname{Gini_index}(D, \text { married })=\frac{4}{10} * 0+\frac{6}{10} *\left[1-\left(\frac{3}{6}\right)^{2}-\left(\frac{3}{6}\right)^{2}\right]=0.3$

  2. 计算 {single} | {married,divorced} 情况下的基尼指数

    $\operatorname{Gini_index}(D,\text{婚姻状况})=\frac{4}{10} * 0.5+\frac{6}{10} *\left[1-\left(\frac{1}{6}\right)^{2}-\left(\frac{5}{6}\right)^{2}\right]=0.367$

  3. 计算 {divorced} | {single,married} 情况下基尼指数

    $\operatorname{Gini_index}(D, \text { 婚姻状况 })=\frac{2}{10} * 0.5+\frac{8}{10} *\left[1-\left(\frac{2}{8}\right)^{2}-\left(\frac{6}{8}\right)^{2}\right]=0.4$

  4. 最终:该特征的基尼值为 0.3,并且预选分裂点为:{married} 和 {single,divorced}

年收入

先将数值型属性升序排列,以相邻中间值作为待确定分裂点:

以年收入 65 将样本分为两部分,计算基尼指数:

$节点为65时:{年收入}=\frac{1}{10} * 0 + \frac{9}{10} *\left[1-\left(\frac{6}{9}\right)^{2}-\left(\frac{3}{9}\right)^{2}\right]=0.4$

以此类推计算所有分割点的基尼指数,我们发现最小的基尼指数为 0.3。

此时,我们发现:

  1. 以是否有房作为分裂点的基尼指数为:0.343

  2. 以婚姻状况为分裂特征、以 married 作为分裂点的基尼指数为:0.3

  3. 以年收入作为分裂特征、以 97.5 作为分裂点的的基尼指数为:0.3

最小基尼指数有两个分裂点,我们随机选择一个即可,假设婚姻状况,则可确定决策树如下:

重复上面步骤,直到每个叶子结点纯度达到最高.

【知道】比较

名称提出时间分支方式特点
ID31975信息增益1.ID3只能对离散属性的数据集构成决策树 2.倾向于选择取值较多的属性
C4.51993信息增益率1.缓解了ID3分支过程中总喜欢偏向选择值较多的属性 2.可处理连续数值型属性,也增加了对缺失值的处理方法 3.只适合于能够驻留于内存的数据集,大数据集无能为力
CART1984基尼指数1.可以进行分类和回归,可处理离散属性,也可以处理连续属性 2.采用基尼指数,计算量减小 3.一定是二叉树

【实践】泰坦尼克号生存案例

案例背景

泰坦尼克号沉没是历史上最著名的沉船事件。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和船员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。 造成海难失事的原因之一是乘客和船员没有足够的救生艇。尽管幸存下来有一些运气因素,但有些人比其他人更容易生存,例如妇女,儿童和社会地位较高的人群。 在这个案例中,我们要求您完成对哪些人可能存活的分析。

数据集中的特征包括票的类别,是否存活,乘坐班次,姓名,年龄,上船港口,房间,性别等。

API介绍

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)

  • criterion

    • 特征选择标准

    • "gini"或者"entropy",前者代表基尼系数,后者代表信息增益。一默认"gini",即CART算法。

  • min_samples_split

    • 内部节点再划分所需最小样本数

    • 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。我之前的一个项目例子,有大概10万样本,建立决策树时,我选择了min_samples_split=10。可以作为参考。

  • min_samples_leaf

    • 叶子节点最少样本数

    • 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的10万样本项目使用min_samples_leaf的值为5,仅供参考。

  • max_depth

    • 决策树最大深度

    • 决策树的最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间

  • random_state

    • 随机数种子

案例实现

相比其他学习模型,决策树在模型描述上有巨大的优势,决策树的逻辑推断非常直观,具有清晰的可解释性,也有很方便的模型的可视化。在决策树的使用中,无需考虑对数据量化和标准化,就能达到比较好的识别率。

回归决策树

学习目标

1.了解回归决策树的构建原理

2.能利用回归决策树API解决问题

【了解】回归决策树构建原理

CART 回归树和 CART 分类树的不同之处在于:

  1. CART 分类树预测输出的是一个离散值,CART 回归树预测输出的是一个连续值。

  2. CART 分类树使用基尼指数作为划分、构建树的依据,CART 回归树使用平方损失。

  3. 分类树使用叶子节点里出现更多次数的类别作为预测类别,回归树则采用叶子节点里均值作为预测输出

CART 回归树构建:

例子:

假设:数据集只有 1 个特征 x, 目标值值为 y,如下图所示:

x12345678910
y5.565.75.916.46.87.058.98.799.05

由于只有 1 个特征,所以只需要选择该特征的最优划分点,并不需要计算其他特征。

  1. 先将特征 x 的值排序,并取相邻元素均值作为待划分点,如下图所示:

    | s | 1.5 | 2.5 | 3.5 | 4.5 | 5.5 | 6.5 | 7.5 | 8.5 | 9.5 | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |

  2. 计算每一个划分点的平方损失,例如:1.5 的平方损失计算过程为:

    R1 为 小于 1.5 的样本个数,样本数量为:1,其输出值为:5.56

    $R_1 =5.56$

    R2 为 大于 1.5 的样本个数,样本数量为:9 ,其输出值为:

    $R_2=(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05) / 9=7.50$

    该划分点的平方损失:

    $L(1.5)=(5.56-5.56)^{2}+\left[(5.7-7.5)^{2}+(5.91-7.5)^{2}+\ldots+(9.05-7.5)^{2}\right]=0+15.72=15.72$

  3. 以此方式计算 2.5、3.5... 等划分点的平方损失,结果如下所示:

    s1.52.53.54.55.56.57.58.59.5
    m(s)15.7212.078.365.783.911.938.0111.7315.74

  4. 当划分点 s=6.5 时,m(s) 最小。因此,第一个划分变量:特征为 X, 切分点为 6.5,即:j=x, s=6.5

  5. 对左子树的 6 个结点计算每个划分点的平方式损失,找出最优划分点:

    x123456
    y5.565.75.916.46.87.05
    s1.52.53.54.55.5
    c15.565.635.725.896.07
    c26.376.546.756.937.05
    s1.52.53.54.55.5
    m(s)1.30870.7540.27710.43681.0644

  6. s=3.5时,m(s) 最小,所以左子树继续以 3.5 进行分裂:

  7. 假设在生成3个区域 之后停止划分,以上就是回归树。每一个叶子结点的输出为:挂在该结点上的所有样本均值。

x12345678910
y5.565.75.916.46.87.058.98.799.05

1号样本真实值 5.56 预测结果:5.72

2号样本真实值是 5.7 预测结果:5.72

3 号样本真实值是 5.91 预测结果 5.72

CART 回归树构建过程如下:

  1. 选择第一个特征,将该特征的值进行排序,取相邻点计算均值作为待划分点

  2. 根据所有划分点,将数据集分成两部分:R1、R2

  3. R1 和 R2 两部分的平方损失相加作为该切分点平方损失

  4. 取最小的平方损失的划分点,作为当前特征的划分点

  5. 以此计算其他特征的最优划分点、以及该划分点对应的损失值

  6. 在所有的特征的划分点中,选择出最小平方损失的划分点,作为当前树的分裂点

【实践】回归决策树实践

已知数据:

分别训练线性回归、回归决策树模型,并预测对比

训练模型,并使用1000个[0.0, 10]之间的数据,让模型预测,画出预测值图线

从预测效果来看:

1、线性回归是一条直线

2、决策树是曲线

3、树的拟合能力是很强的,易过拟合

决策树剪枝

学习目标:

  1. 知道什么是剪枝

  2. 理解剪枝的作用

  3. 知道常用剪枝方法

  4. 了解不同剪枝方法的优缺点

【知道】什么是剪枝?

剪枝 (pruning)是决策树学习算法对付 过拟合 的主要手段。

在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得"太好"了,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合的风险。

剪枝是指将一颗子树的子节点全部删掉,利用叶子节点替换子树(实质上是后剪枝技术),也可以(假定当前对以root为根的子树进行剪枝)只保留根节点本身而删除所有的叶子,以下图为例:

【知道】常见减枝方法汇总

决策树剪枝的基本策略有"预剪枝" (pre-pruning)和"后剪枝"(post- pruning) 。

  1. 预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;

  2. 后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

【理解】例子

在构建树时, 为了能够实现剪枝, 可预留一部分数据用作 "验证集" 以进行性能评估。我们的训练集如下:

验证集如下:

预剪枝

  1. 假设: 当前树只有一个结点, 即编号为1的结点. 此时, 所有的样本预测类别为: 其类别标记为训练样例数最多的类别,假设我们将这个叶结点标记为 "好瓜"。此时, 在验证集上所有的样本都会被预测为 "好瓜", 此时的准确率为: 3/7

  2. 如果进行此次分裂, 则树的深度为 2, 有三个分支. 在用属性"脐部"划分之后,上图中的结点2、3、4分别包含编号为 {1,2,3, 14}、 {6,7, 15, 17}、 {10, 16} 的训练样例,因此这 3 个结点分别被标记为叶结点"好瓜"、 "好瓜"、 "坏瓜"。此时, 在验证集上 4、5、8、11、12 样本预测正确,准确率为: 5/7。很显然, 通过此次分裂准确率有所提升, 值得分裂.

  3. 接下来,对结点2进行划分,基于信息增益准则将挑选出划分属性"色泽"。然而,在使用"色泽"划分后,编号为 {5} 的验证集样本分类结果会由正确转为错误,使得验证集精度下降为 57.1%。于是,预剪枝策略将禁止结点2被划分。

  4. 对结点3,最优划分属性为"根蒂",划分后验证集精度仍为 5/7. 这个 划分不能提升验证集精度,于是,预剪枝策略禁止结点3被划分。

  5. 对结点4,其所含训练样例己属于同一类,不再进行划分.

于是,基于预剪枝策略从上表数据所生成的决策树如上图所示,其验证集精度为 71.4%. 这是一棵仅有一层划分的决策树。

后剪枝

后剪枝先从训练集生成一棵完整决策树,继续使用上面的案例,从前面计算,我们知前面构造的决策树的验证集精度为42.9%。

  1. 首先考察结点6,若将其领衔的分支剪除则相当于把6替换为叶结点。替换后的叶结点包含编号为 {7, 15} 的训练样本,于是该叶结点的类别标记为"好瓜", 此时决策树的验证集精度提高至 57.1%。

  1. 然后考察结点5,若将其领衔的子树替换为叶结点,则替换后的叶结点包含编号为 {6,7,15}的训练样例,叶结点类别标记为"好瓜';此时决策树验证集精度仍为 57.1%. 于是,可以不进行剪枝.

  2. 对结点2,若将其领衔的子树替换为叶结点,则替换后的叶结点包含编号 为 {1, 2, 3, 14} 的训练样例,叶结点标记为"好瓜"此时决策树的验证集精度提高至 71.4%. 于是,后剪枝策略决定剪枝.

  3. 对结点3和1,若将其领衔的子树替换为叶结点,则所得决策树的验证集 精度分别为 71.4% 与 42.9%,均未得到提高,于是它们被保留。

  4. 最终, 基于后剪枝策略生成的决策树如上图所示, 其验证集精度为 71.4%。

【了解】剪枝方法对比

预剪枝优点:

  • 预剪枝使决策树的很多分支没有展开,不单降低了过拟合风险,还显著减少了决策树的训练、测试时间开销

预剪枝缺点:

  • 有些分支的当前划分虽不能提升泛化性能,甚至会导致泛化性能降低,但在其基础上进行的后续划分却有可能导致性能的显著提高

  • 预剪枝决策树也带来了欠拟合的风险

后剪枝优点:

  • 比预剪枝保留了更多的分支。一般情况下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝

后剪枝缺点:

  • 但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中所有非叶子节点进行逐一考察,因此在训练时间开销比未剪枝的决策树和预剪枝的决策树都要大得多。

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

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

相关文章

12.1-基础柱状图构建

Python基础综合案例——数据可视化 动态柱状图 通过Bar构建基础柱状图 反转x和y轴 调用 bar.reversal_axis() 我们现在所看到的数值是从下到上的,当我们反转之后数据是从左向右的,我们现在把数据放到柱的右边。即数值标签在右侧 添加y轴数据的时候&am…

oceanbase的日志量太大,撑爆磁盘,修改下日志级别

oceanbase的日志量太大,撑爆磁盘,修改下日志级别: [adminlnpg ~]$ obclient -h127.0.0.1 -uroot -P2881 -plinux123 Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221561020 Server version: O…

Android基于gradle task检查各个module之间资源文件冲突情况

做组件化开发的时候,我们经常会遇到各个不同的module之间资源文件冲突的问题,运行也不报错,但是会出现覆盖的问题,导致运行之后发送错误的效果。 所以我们需要利用一个gradlke 脚本task,来自动化检查资源文件冲突。 …

CST学习笔记(二)Floquet模式激励设置

CST学习笔记(二)Floquet模式激励设置 在CST中我们常常使用Floquet模式来仿真频率选择表面(FSS)或者超材料等,但是我们设置好Zmax的floquet模式数量后,启动仿真,会发现S参数一栏中有很多我们不想要看的S参数&#xff0…

OpenAI Canvas:提升编程与写作效率的全新工作界面

随着人工智能技术的飞速发展,大语言模型(LLM)不仅限于生成文本,还能逐步扩展至编程、设计等任务的支持。近期,OpenAI 推出了一个名为 Canvas 的全新功能,专门用于协助用户进行编程和写作。这一功能与 Claud…

【React】使用脚手架或Vite包两种方式创建react项目

1.使用脚手架搭建React项目: 在终端窗口运行如下命令即可: npx create-react-app react-basic(创建的文件目录) npx:Node.js工具命令,用于查找并执行后续的包命令。 2.使用Vite包创建React项目: 在终端窗口运行如…

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…

学习底座架构-武汉

1 学习底座架构概述 大脑学习中心-边缘系统 一、当下教育现状 二、什么是学习底座 三、学习底座价值 七、学习底座解决问题的流程 案例:以4R注意力为例 一 注意力问题解决流程 二 注意力问题的危害 三 衡量注意力水平高低的标准 四 注意力问题4大根源 & 2大诱因…

掌握未来技能:亚马逊云科技推出生成式 AI 认证计划!

目录 前言 生成式 AI 的力量 1. 内容创造的无限可能 2. 数据增强和个性化 3. 提高生产力 4. 教育和研究的辅助工具 5. 突破语言障碍 关于亚马逊云科技生成式 AI 认证 1. 认证目标 2. 认证内容 3. 认证优势 如何获得认证 1. 在线学习 2. 实践考试 3.AWS Certifie…

无人机电机故障率骤降:创新设计与六西格玛方法论双赢

项目背景 TBR-100是消费级无人机头部企业推出的主打消费级无人机,凭借其出色的续航能力和卓越的操控性,在市场上获得了广泛认可。在产品运行过程,用户反馈电机故障率偏高,尤其是在飞行一段时间后出现电机过热、损坏以及运行不稳定…

基础入门-Web应用架构搭建漏洞HTTP数据包

网站搭建 这里给一个网站搭建的视频链接,之前又搞过搭建服务器,这里就不再重做了 https://www.bilibili.com/video/BV16A4y1X7vg/?spm_id_from333.337.search-card.all.click&vd_sourcec2c3c616b3ad1faf44a9f6f30a4dbb03 值得注意的是,…

P1320压缩技术(续集版

P1320压缩技术(续集版 感觉这题还是蛮难的对我来说,通过这题我才知道原来字符串输入不碰到空格就会一起输进来 我参考了一写题解自己又写了自己的解法,vs中的scanf_s和scanf()用法不太一样,之前按scanf写法写一直在报错&#xff…

基于springboot+vue实现的酒店在线预订系统

基于springbootvue实现的酒店在线预订系统 (源码L文ppt)4-082 4.2 系统结构设计 构图是系统的体系结构,体系结构是体系结构体系的一部分,体系结构体系是体系结…

Chromium 中chrome.cookies扩展接口c++实现分析

chrome.cookies 使用 chrome.cookies API 查询和修改 Cookie,并在 Cookie 发生更改时收到通知。 更多参考官网定义:chrome.cookies | API | Chrome for Developers (google.cn) 本文以加载一个清理cookies功能扩展为例 https://github.com/Google…

全面讲解C++

数据类型 1.1 基本数据类型 1.1.1 整型(Integer Types) 整型用于表示整数值,分为以下几种类型: int:标准整数类型,通常为4字节(32位)。short:短整型,通常…

集合框架08:LinkedList源码分析、ArrayList和LinkedList区别

视频链接:13.15 LinkedList源码分析_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p15 13.16 ArrayList和LinkedList区别_哔哩哔哩_bilibilihttps://…

取证之FTK Imager学习笔记

一、FTK Imager制作镜像详细教程 1、文件-创建磁盘镜像 2、参数详解: 1)物理驱动器 整个驱动器,如:识别到的是整块硬盘、U盘等,而不管你分几个分区; 2)逻辑驱动器(L&#xff09…

深入理解Transformer的笔记记录(精简版本)NNLM → Word2Vec

文章的整体介绍顺序为: NNLM → Word2Vec → Seq2Seq → Seq2Seq with Attention → Transformer → Elmo → GPT → BERT 自然语言处理相关任务中要将自然语言交给机器学习中的算法来处理,通常需要将语言数学化,因为计算机机器只认数学符号。向量是人把自然界的东西抽象出…

Redis 实现 查找附近的人 功能

文章目录 概述Redis 中 Geospatial(地理位置)Demo例子总结 概述 使用 Redis 实现“查找附近的人”功能,通常会依赖 Redis 的 Geo(地理位置) 数据类型来存储用户的经纬度,并基于此进行地理范围查询。Redis …

ChatTTS在Windows电脑的本地部署与远程生成音频详细实战指南

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章主要介绍如何快速地在Windows系统电脑中本地部署ChatTTS开源文本转语音项目,并且我们还可以结合Cpolar内网穿透工具创建公网地址,随时随…