电信保温杯笔记——《统计学习方法(第二版)——李航》第8章 提升方法

2023-12-29 18:58

本文主要是介绍电信保温杯笔记——《统计学习方法(第二版)——李航》第8章 提升方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

电信保温杯笔记——《统计学习方法(第二版)——李航》第8章 提升方法

  • 论文
  • 介绍
  • 提升方法的基本思路
  • 提升方法的代表:AdaBoost
    • 步骤
    • 例子
    • 误差分析
    • AdaBoost的另一个解释
      • 前向分步算法
      • 前向分步算法与AdaBoost的关系
  • 提升方法的实例:提升树(boosting tree)
    • 提升树模型
    • 提升树算法
      • 步骤
      • 例子
    • 提升树的优化
      • 步骤
  • 本章概要
  • 相关视频
  • 相关的笔记
  • 相关代码
    • pytorch
    • tensorflow
      • keras
  • pytorch API:
  • tensorflow API

论文

Boosting算法:《A Short Introduction to Boosting》
AdaBoost算法:《A Decision-Theoretic Generalization of On-Line Learning and an Application to Boosting》
提升树算法:《Additive logistic regression: a statistical view of boosting (with discussion and a rejoinder by the authors)》

介绍

电信保温杯笔记——《统计学习方法(第二版)——李航》
本文是对原书的精读,会有大量原书的截图,同时对书上不详尽的地方进行细致解读与改写。

提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。

在这里插入图片描述

下文首先介绍提升方法的思路和代表性的提升算法 AdaBoost;然后分析AdaBoost的误差;并且从另一个角度解释AdaBoost算法;最后叙述提升方法更具体的实例——提升树(boosting tree)。

提升方法的基本思路

在这里插入图片描述
为了方便理解下文,这里需要介绍一下对于线性分类器来说,数据集线性可分和线性不可分这2个概念。
在这里插入图片描述
定义2.2:
在这里插入图片描述

对于线性分类器来说,分类准确率接近90%应该算的上是接近线性可分的,准确率70+%的应该算的上是完全线性不可分的,笼统地理解为线性不可分就行。

概率近似正确(probably approximately correct,PAC)这个概念,在使用线性分类器分类任务中,应该说的是接近线性可分的,分类准确率接近90%,也可简单地理解为“强可学习”,而“弱可学习”可简单地理解为线性不可分,准确率70+%。

有了这些概念再去看原文:
在这里插入图片描述

在这里插入图片描述

提升方法的代表:AdaBoost

关于第1个问题,AdaBoost的做法是,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注。于是,分类问题被一系列的弱分类器“分而治之”。至于第2个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

AdaBoost的巧妙之处就在于它将这些想法自然且有效地实现在一种算法里。

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

式子(8.2)有点像电信保温杯笔记——《统计学习方法(第二版)——李航》第6章 逻辑斯谛回归与最大熵模型的逻辑斯谛回归模型中的对数几率:
在这里插入图片描述

分类误差越小,系数 α m \alpha_m αm 越大。
在这里插入图片描述

Z m , i = w m i e x p ( − α m y i G m ( x i ) ) Z_m,i = w_{mi} exp(-\alpha_m y_i G_m(x_i)) Zm,i=wmiexp(αmyiGm(xi)),则式子(8.4)和(8.5)变成
w m + 1 , i = Z m , i Z m Z m = ∑ i = 1 N Z m , i w_{m+1,i} = \frac{Z_{m,i}}{Z_m} \\ Z_m = \sum\limits_{i = 1}^N Z_{m,i} wm+1,i=ZmZm,iZm=i=1NZm,i
可以认为分子 Z m , i Z_{m,i} Zm,i 是样本的新权重的得分分值,分母 Z m Z_m Zm 是归一化因子。

对于第 m m m 个 分类器来说,第 i i i 个样本分类正确, y i G m ( x i ) y_i G_m(x_i) yiGm(xi) 为1, 0 < e x p ( − α m y i G m ( x i ) ) < 1 0<exp(-\alpha_m y_i G_m(x_i))<1 0<exp(αmyiGm(xi))<1,分值 Z m , i Z_{m,i} Zm,i 下降,在训练集的第 m + 1 m+1 m+1 个分布上的权重 w m + 1 , i w_{m+1,i} wm+1,i 减小;
如果分类错误, y i G m ( x i ) y_i G_m(x_i) yiGm(xi) − 1 -1 1 e x p ( − α m y i G m ( x i ) ) > 1 exp(-\alpha_m y_i G_m(x_i))>1 exp(αmyiGm(xi))>1,分值 Z m , i Z_{m,i} Zm,i 上升,在训练集的第 m + 1 m+1 m+1 个分布上的权重 w m + 1 , i w_{m+1,i} wm+1,i 增大。
在这里插入图片描述

步骤

在这里插入图片描述

在这里插入图片描述

例子

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

误差分析

在这里插入图片描述
在这里插入图片描述
1 N ∑ i = 1 N exp ⁡ ( − y i f ( x i ) ) = 1 N ∑ i = 1 N exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i = 1 N 1 N exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i = 1 N w 1 i exp ⁡ ( − ∑ m = 1 M α m y i G m ( x i ) ) = ∑ i = 1 N w 1 i ∏ m = 1 M exp ⁡ ( − α m y i G m ( x i ) ) = ∑ i = 1 N w 1 i exp ⁡ ( − α 1 y i G 1 ( x i ) ) ∏ m = 2 M exp ⁡ ( − α m y i G m ( x i ) ) = ∑ i = 1 N Z 1 w 2 i ∏ m = 2 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 ∑ i = 1 N w 2 i ∏ m = 2 M exp ⁡ ( − α m y i G m ( x i ) ) = Z 1 Z 2 ∑ i = 1 N w 3 i ∏ m = 3 M exp ⁡ ( − α m y i G m ( x i ) ) = ⋯ = Z 1 Z 2 ⋯ Z M − 1 ∑ i = 1 N w M i exp ⁡ ( − α M y i G M ( x i ) ) = ∏ m = 1 M Z m \begin{aligned} \frac{1}{N} \sum\limits_{i=1}^N \exp (-y_if(x_i)) &= \frac{1}{N} \sum\limits_{i=1}^N \exp \left(- \sum\limits_{m=1}^M \alpha_m y_i G_m(x_i) \right) \\ &= \sum\limits_{i=1}^N \frac{1}{N} \exp \left(- \sum\limits_{m=1}^M \alpha_m y_i G_m(x_i) \right) \\ &= \sum\limits_{i=1}^N w_{1i} \exp \left(- \sum\limits_{m=1}^M \alpha_m y_i G_m(x_i) \right) \\ &= \sum\limits_{i=1}^N w_{1i} \prod\limits_{m = 1}^M \exp (- \alpha_m y_i G_m(x_i) ) \\ &= \sum\limits_{i=1}^N w_{1i} \exp (- \alpha_1 y_i G_1(x_i) ) \prod\limits_{m = 2}^M \exp (- \alpha_m y_i G_m(x_i) ) \\ &= \sum\limits_{i=1}^N Z_1 w_{2i} \prod\limits_{m = 2}^M \exp (- \alpha_m y_i G_m(x_i) ) \\ &= Z_1 \sum\limits_{i=1}^N w_{2i} \prod\limits_{m = 2}^M \exp (- \alpha_m y_i G_m(x_i) ) \\ &= Z_1Z_2 \sum\limits_{i=1}^N w_{3i} \prod\limits_{m = 3}^M \exp (- \alpha_m y_i G_m(x_i) ) \\ &= \cdots \\ &= Z_1 Z_2 \cdots Z_{M-1} \sum\limits_{i=1}^N w_{Mi} \exp (- \alpha_M y_i G_M(x_i) ) \\ &= \prod\limits_{m = 1}^M Z_m \end{aligned} N1i=1Nexp(yif(xi))=N1i=1Nexp(m=1MαmyiGm(xi))=i=1NN1exp(m=1MαmyiGm(xi))=i=1Nw1iexp(m=1MαmyiGm(xi))=i=1Nw1im=1Mexp(αmyiGm(xi))=i=1Nw1iexp(α1yiG1(xi))m=2Mexp(αmyiGm(xi))=i=1NZ1w2im=2Mexp(αmyiGm(xi))=Z1i=1Nw2im=2Mexp(αmyiGm(xi))=Z1Z2i=1Nw3im=3Mexp(αmyiGm(xi))==Z1Z2ZM1i=1NwMiexp(αMyiGM(xi))=m=1MZm
在这里插入图片描述
Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) = ∑ y i = G m ( x i ) w m i e − α m + ∑ y i ≠ G m ( x i ) w m i e α m = e − α m ∑ y i = G m ( x i ) w m i + e α m ∑ y i ≠ G m ( x i ) w m i = e − α m ( 1 − e m ) + e α m e m ≥ 2 ( 1 − e m ) e m ( 8.11 ) \begin{aligned} Z_m & = \sum\limits_{i=1}^N w_{mi} \exp (- \alpha_m y_i G_m(x_i) ) \\ &= \sum\limits_{y_i = G_m(x_i)} w_{mi} e^{- \alpha_m} + \sum\limits_{y_i \neq G_m(x_i)} w_{mi} e^{\alpha_m} \\ &= e ^{- \alpha_m} \sum\limits_{y_i = G_m(x_i)} w_{mi} + e ^{\alpha_m}\sum\limits_{y_i \neq G_m(x_i)} w_{mi} \\ &= e ^{- \alpha_m} (1 - e_m) + e^{\alpha_m} e_m \\ & \ge2\sqrt{(1-e_m)e_m} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(8.11) \end{aligned} Zm=i=1Nwmiexp(αmyiGm(xi))=yi=Gm(xi)wmieαm+yi=Gm(xi)wmieαm=eαmyi=Gm(xi)wmi+eαmyi=Gm(xi)wmi=eαm(1em)+eαmem2(1em)em (8.11)
当且仅当 e − α m ( 1 − e m ) = e α m e m e ^{- \alpha_m} (1 - e_m) = e^{\alpha_m} e_m eαm(1em)=eαmem 时,
e − α m ( 1 − e m ) + e α m e m = 2 ( 1 − e m ) e m e ^{- \alpha_m} (1 - e_m) + e^{\alpha_m} e_m = 2\sqrt{(1-e_m)e_m} eαm(1em)+eαmem=2(1em)em 成立。

根据公式(8.2)
α m = 1 2 log ⁡ 1 − e m e m 2 α m = log ⁡ 1 − e m e m e 2 α m = 1 − e m e m e α m e m = e − α m ( 1 − e m ) \begin{aligned} \alpha_m & = \frac{1}{2} \log \frac{1-e_m}{e_m} \\ 2 \alpha_m & = \log \frac{1-e_m}{e_m} \\ e^{2 \alpha_m} &= \frac{1-e_m}{e_m} \\ e^{ \alpha_m} e_m &= e^{- \alpha_m} (1-e_m) \\ \end{aligned} αm2αme2αmeαmem=21logem1em=logem1em=em1em=eαm(1em)
因此
Z m = 2 ( 1 − e m ) e m = 1 − 4 γ m 2 ( 8.11 ) \begin{aligned} Z_m &= 2\sqrt{(1-e_m)e_m} \\ &= \sqrt{1-4\gamma_m^2} \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(8.11) \end{aligned} Zm=2(1em)em =14γm2 (8.11)
在这里插入图片描述

AdaBoost的另一个解释

这一部分不看也没关系。
在这里插入图片描述

前向分步算法

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

前向分步算法与AdaBoost的关系

在这里插入图片描述

在这里插入图片描述

∑ i = 1 N w ˉ m i exp ⁡ [ − y i α G ( x i ) ] = ∑ y i = G m ( x i ) N w ˉ m i e − α + ∑ y i ≠ G m ( x i ) N w ˉ m i e α = ∑ y i = G m ( x i ) N w ˉ m i e − α + ( ∑ y i ≠ G m ( x i ) N w ˉ m i e − α − ∑ y i ≠ G m ( x i ) N w ˉ m i e − α ) + ∑ y i ≠ G m ( x i ) N w ˉ m i e α = ( ∑ y i = G m ( x i ) N w ˉ m i e − α + ∑ y i ≠ G m ( x i ) N w ˉ m i e − α ) − ∑ y i ≠ G m ( x i ) N w ˉ m i e − α + ∑ y i ≠ G m ( x i ) N w ˉ m i e α = ∑ i = 1 N w ˉ m i e − α + ∑ y i ≠ G m ( x i ) N w ˉ m i ( e α − e − α ) = ∑ i = 1 N w ˉ m i e − α + ∑ i = 1 N w ˉ m i ( e α − e − α ) I ( y i ≠ G ( x i ) ) ( 8.22 ) \begin{aligned} \sum\limits_{i=1}^N \bar{w}_{mi} \exp [-y_i \alpha G(x_i)] & = \sum\limits_{y_i=G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} + \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{\alpha} \\ & = \sum\limits_{y_i=G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} + ( \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} - \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} )+ \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{\alpha} \\ & = ( \sum\limits_{y_i=G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} + \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} ) - \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{-\alpha} + \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} e^{\alpha} \\ & = \sum\limits_{i=1}^N \bar{w}_{mi} e^{-\alpha} + \sum\limits_{y_i \neq G_m(x_i)}^N \bar{w}_{mi} (e^{\alpha} - e^{-\alpha}) \\ & = \sum\limits_{i=1}^N \bar{w}_{mi} e^{-\alpha} + \sum\limits_{i = 1}^N \bar{w}_{mi} (e^{\alpha} - e^{-\alpha}) I(y_i \neq G(x_i)) \quad\quad\quad\quad\quad\quad\quad\quad(8.22) \end{aligned} i=1Nwˉmiexp[yiαG(xi)]=yi=Gm(xi)Nwˉmieα+yi=Gm(xi)Nwˉmieα=yi=Gm(xi)Nwˉmieα+(yi=Gm(xi)Nwˉmieαyi=Gm(xi)Nwˉmieα)+yi=Gm(xi)Nwˉmieα=(yi=Gm(xi)Nwˉmieα+yi=Gm(xi)Nwˉmieα)yi=Gm(xi)Nwˉmieα+yi=Gm(xi)Nwˉmieα=i=1Nwˉmieα+yi=Gm(xi)Nwˉmi(eαeα)=i=1Nwˉmieα+i=1Nwˉmi(eαeα)I(yi=G(xi))(8.22)
在这里插入图片描述

∂ ( ∑ i = 1 N w ˉ m i exp ⁡ [ − y i α G ( x i ) ] ) ∂ α = ∂ ( ∑ i = 1 N w ˉ m i e − α + ∑ i = 1 N w ˉ m i ( e α − e − α ) I ( y i ≠ G ( x i ) ) ) ∂ α = α e − α ( − ∑ i = 1 N w ˉ m i + ( e 2 α + 1 ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) ) = 0 \begin{aligned} \frac{ \partial \left( \sum\limits_{i=1}^N \bar{w}_{mi} \exp [-y_i \alpha G(x_i)] \right)}{ \partial \alpha} & = \frac{ \partial \left( \sum\limits_{i=1}^N \bar{w}_{mi} e^{-\alpha} + \sum\limits_{i = 1}^N \bar{w}_{mi} (e^{\alpha} - e^{-\alpha}) I(y_i \neq G(x_i)) \right)}{ \partial \alpha} \\ &= \alpha e^{-\alpha} \left( -\sum\limits_{i=1}^N \bar{w}_{mi} + (e^{2\alpha} + 1) \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) \right) \\ &= 0 \end{aligned} α(i=1Nwˉmiexp[yiαG(xi)])=α(i=1Nwˉmieα+i=1Nwˉmi(eαeα)I(yi=G(xi)))=αeα(i=1Nwˉmi+(e2α+1)i=1NwˉmiI(yi=G(xi)))=0
于是
− ∑ i = 1 N w ˉ m i + ( e 2 α + 1 ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) = 0 e 2 α ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) = ∑ i = 1 N w ˉ m i − ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) e 2 α = ∑ i = 1 N w ˉ m i − ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) α = 1 2 log ⁡ ∑ i = 1 N w ˉ m i − ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) ∑ i = 1 N w ˉ m i I ( y i ≠ G ( x i ) ) α = 1 2 log ⁡ 1 − e m e m \begin{aligned} & -\sum\limits_{i=1}^N \bar{w}_{mi} + (e^{2\alpha} + 1) \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) = 0 \\ & e^{2\alpha} \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) = \sum\limits_{i=1}^N \bar{w}_{mi} - \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) \\ & e^{2\alpha} = \frac{ \sum\limits_{i=1}^N \bar{w}_{mi} - \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) }{ \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) } \\ & \alpha = \frac{1}{2} \log \frac{ \sum\limits_{i=1}^N \bar{w}_{mi} - \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) }{ \sum\limits_{i = 1}^N \bar{w}_{mi} I(y_i \neq G(x_i)) } \\ & \alpha = \frac{1}{2} \log \frac{ 1 - e_m }{ e_m } \end{aligned} i=1Nwˉmi+(e2α+1)i=1NwˉmiI(yi=G(xi))=0e2αi=1NwˉmiI(yi=G(xi))=i=1Nwˉmii=1NwˉmiI(yi=G(xi))e2α=i=1NwˉmiI(yi=G(xi))i=1Nwˉmii=1NwˉmiI(yi=G(xi))α=21logi=1NwˉmiI(yi=G(xi))i=1Nwˉmii=1NwˉmiI(yi=G(xi))α=21logem1em
在这里插入图片描述

提升方法的实例:提升树(boosting tree)

提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

提升树模型

在这里插入图片描述

提升树算法

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

每一棵树都拟合前一棵树的残差,即对前一棵树预测的误差进行修补。下图每多一棵树,预测值就越来越接近真实值:
在这里插入图片描述
实线表示 f i ( x i ) f_i(x_i) fi(xi) 的预测值,虚线表示 f i ( x i ) f_i(x_i) fi(xi) 相较于 f i − 1 ( x i ) f_{i-1}(x_i) fi1(xi) 变换的部分。

直接看例题比较好。

步骤

在这里插入图片描述

例子

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

提升树的优化

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

步骤

在这里插入图片描述

本章概要

在这里插入图片描述

相关视频

相关的笔记

hktxt /Learn-Statistical-Learning-Method

相关代码

Dod-o /Statistical-Learning-Method_Code,m 是样本数,n 是特征数。

关于def calc_e_Gx(trainDataArr, trainLabelArr, n, div, rule, D):
Gx列表保存对当前所有样本的预测结果。

关于def createSigleBoostingTree(trainDataArr, trainLabelArr, D):
因为代码对样本特征取值进行过简化,特征取值只有0和1,所以
在这里插入图片描述

这一步s只有[-0.5, 0.5, 1.5]这几种选择。
同时对上式 R 1 , R 2 R_1,R_2 R1,R2 所预测的类别也进行了探索,用 rule 变量表示。
对每一个特征进行遍历,寻找用于划分的最合适的特征,最终预测误差、最优划分点、划分规则、预测结果、最合适的特征的索引会保存在字典sigleBoostTree中。

pytorch

tensorflow

keras

pytorch API:

tensorflow API

这篇关于电信保温杯笔记——《统计学习方法(第二版)——李航》第8章 提升方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550381

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操