精华内容
下载资源
问答
  • 2020-07-13 10:36:01

    KNN适用于分类的,不需要训练,该算法所选的邻居都是已经正确分类的对象。该算法在定类决策上只依据最邻近的一个或者几个样本类别来决定待分类样本所属的类别

    KNN算法的思路

    KNN是通过不同特征之间的距离进行分类的。
    如果一个样本在特征空间中的K个最相似的样本中的大多数属于同一类别,则该样本也属于这一类别,其中K通常是不大于20的整数。
    KNN算法得结果很大程度上取决于K的选择

    KNN算法的思想:

    在训练集的数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练与之最为相似的前K个数据,则该测试数据对应类别就是K个数据中出现的次数做多的哪一类,算法可以简单的描述为:

    1. 计算测试数数据与各个训练数据之间的距离
    2. 按照距离的递增关系进行排序
    3. 选取距离最小的K个点
    4. 确定前K个点所在类别的出现频率
    5. 返回前K个点中出现频率最高的类别作为测试数据的预测分类。

    算法的优缺点:

    算法的优点:

    1. 简单易于理解,无参数估计,不需要进行训练
    2. 适合对稀疏事件进行分类
    3. 特别适合多分类问题,再多分类问题上比SVM好用,效果好一些

    算法的缺点:

    1. 当样本分布不均匀时,容易判别错误。
    更多相关内容
  • 1算法及其描述(2-3) 一、 选择题1 下面关于算法的描述,正确的是A1 算法及其描述(2‐3)一、 选择题1. 下面关于算法的描述, 正确的是A.一个算法只能有一个输入B.算法只能用框图来表示C....算法描述可...

    1算法及其描述(2-3) 一、 选择题1 下面关于算法的描述,正确的是A

    1 算法及其描述(2‐3)

    一、  选择题

    1. 下面关于算法的描述, 正确的是

    A.一个算法只能有一个输入

    B.算法只能用框图来表示

    C.一个算法的执行步骤可以是无限的

    D.一个完整的算法, 不管用什么方法来表示, 都至少有一个输出结果

    答案: D

    2. 下列程序框图中表示处理计算的是(  )

    A.①

    B.②

    C.③

    D.④

    答案: B

    3.算法描述可以有多种表达方法, 下面哪些方法不可以描述“闰年问

    题” 的算法 (   )

    A.自然语言

    B.流程图

    C.伪代码

    D.机器语言

    答案: D

    4. 下列说法正确的是(    )。

    ①算法是程序设计的灵魂, 由此可见算法的重要地位。

    ②简单的说, 算法就是解决问题的方法和步骤。

    ③著名的计算机科学家尼克劳斯指出: “算法+数据结构=程序”。

    ④一个问题的算法只能用一种程序设计语言实现。

    A.①②③④

    B.①②③

    C.①②④

    D.③④

    答案: B

    5. 以下说法正确的是(      )

    ①自然语言描述的算法的优点是通俗易懂。

    ②用自然语言描述算法缺乏直观性并容易产生歧义。

    ③用流程图描述算法形象、 直观、 更容易理解。

    ④伪代码是介于自然语言和计算机程序语言之间的一种算法描述方法。

    A.①②③④

    B.①②③

    C.①②④

    D.③④

    答案: A

    2 程序设计语言基础(3‐4)

    一、  选择题

    1. 在 VB 中数据有多种类型, 下列说明符中可以表示单精度类型的是(      )

    A.Integer

    B.Boolean

    C.Single

    D.String

    答案: C

    2. 浮点型包括 (     )

    A.布尔型和逻辑型

    B.字符串型和双精度型

    C.单精度和双精度

    D.布尔型和整型

    答案: C

    3. 以下声明变量方法正确的是(      )A.1+2

    B.A#B

    C.7i

    D.a7i

    答案: D

    4. 下列给出的赋值语句中正确的是(      )

    A.B=A‐3

    B.‐M =M

    C.x + y =0

    D.4 = M

    答案: A

    5. VB 程序可以在运行时通过键盘获得数据, 下面输入语句正确的是)A.r=Read(“请输入圆的半径”  )B.r=InputBox(“请输入圆的半径” )C.r=Scanf(“请输入圆的半径”  )D.r=MsgBox(“请输入圆的半径” )

    答案: B

    3 程序设计语言基础(3‐5)

    一、  选择题

    1. VB 语言中, 下列各种基本数据类型说明符中表示整型数的是

    (    )。 A.Boolean

    B.Integer

    C.Single

    D.String

    答案: B

    2. 函数 Mid 可以从中间指定位置截取一定长度的字符串, Mid("李娜

    是中国人的骄傲",4,2)的值为(      )

    A.李娜

    B.是中

    C.骄傲

    D.中国

    答案: D

    3. 在 VB 中, 表达式(2^2+5\2)Mod 5 的值是(      )

    A.0

    B.1

    C.1.2

    D.6

    答案: B

    4. 下列不属于赋值语句的是(      )A.d=b^2‐4*a*c

    B.s=2*pi*r

    C.Text1.text=“OK”

    D.x+y=5

    答案: D

    5. 在 VB 语言中, 表示“a 大于 5 或小于 0”  的正确表达式是

    A.0 < a < 5

    B.a > 5 And a < 0

    C.a > 5 Or a < 0

    D.a > 0 And a < 5

    答案: C

    4 程序设计语言基础(3‐6)

    一、  选择题

    1. 在 VB 语言中, 下列正确的赋值语句是(   )

    A.5 = c

    B.3 a = 5 c

    C.‐c = c ‐ 3

    D.a=b+c

    答案: D

    2.下列属于整型常量的是 (     )

    A.2006

    B.一千零一

    C."1997"

    D.3.14

    答案: A

    3.下列逻辑表达式的值为“真” 的是

    A.2 + 4 > 8

    B.3 + 12 > 15

    C.5 > 0 And 4 < 3

    D.10 / 5 < 3

    答案: D

    4. 以下运算符中运算优先级最高的是 (    )。

    A.+

    B.‐

    C.>=

    D.*

    答案: D

    5.VB6.0 中, 正确表达 2013 年 3 月 8 日的日期表达式是(   )

    A.{2013/3/8}

    B.#2013/3/8#

    C.“2013/3/8”

    D.2013‐3‐8

    答案: B

    5 顺序结构(4‐1‐1)

    一、  选择题

    1. 结构化程序设计由三种基本结构组成, 下面哪个不属于这三种基本结构(    )。

    A.顺序结构

    B.输入、 输出结构

    C.选择结构

    D.循环结构

    答案: B

    2. 结构化程序设计由顺序结构,选择结构和循环结构三种基本结构组成,其中某程序中三个连续语句如下:

    a=1

    b=2

    c=b+a

    它属于(    )。

    A.顺序结构

    B.选择结构

    C.循环结构

    D.以上都不是

    答案: A

    3.下列程序执行后 A、 B 的值是

    A=5

    B=6

    A=A+B: B=A‐B: A=A‐B ( )。

    A.5、 6

    B.6、 6

    C.6、 5

    D.5、 5

    答案: C

    4. 如图所示的流程图, 是一个(    )的流程图。

    b98a6c42c72b336c963eb4c3b1b42e75.png

    A.顺序结构

    B.选择结构

    C.循环结构

    D.以上说法都不对

    答案: A

    5. 30.  下面程序段的运行结果是(    )

    N1=Len("2008 奥运")

    Print  N1

    A.2008 奥运

    B.6

    C.2008

    D.0

    答案: B

    6 顺序结构(4‐1‐2)

    一、  选择题

    1. 关于顺序结构程序说法正确的是(   )

    ①在顺序结构的程序中, 引发一个事件后, 计算机将逐条执行程序中的每一条语句, 最后得到处理结果。

    ②顺序结构是程序结构中最简单的一种结构。

    ③程序执行过程中没有分支、 没有重复, 我们把这种结构称为顺序结构。

    ④交换 a, b 两个数的算法, 可以用顺序结构实现。

    A.①②③④

    B.①②③

    C.①②④

    D.①③

    答案: A

    2.如图所示的流程图, 是一个(    )的流程图。

    bb678ba0161efd41289bbbecd2a20f92.png

    A. 顺序结构

    B.选择结构

    C.循环结构

    D.以上说法都不对

    答案: A

    3. 要实现变量 M 的值与变量 N 的值进行交换,可用语句(    )。

    A.X=M:M=N:N=X

    B.M=N:N=M

    C.M=N

    D.N=M

    答案: A

    4. 以下程序段执行后, 整型变量 a 的值为(    )

    a=5

    b=8

    b=b+a

    a=a+b

    A.5

    B.8

    C.13

    D.18

    答案: D

    5.  有如下 Visual Basic 程序段:

    Private Sub Command1_Click()

    m = 8

    n = 5

    t = m + n

    t = t ‐ n

    End Sub

    该程序段运行后, 变量 t 的值为(   )

    A.5

    B.8

    C.10

    D.13

    展开全文
  • 下面算法描述正确的一项是 A算法只能用自然语言来描述 B算法只能用图形方式来表示 C同一问题可以有不同的算法 D同一问题的算法不同结果必然不同 例?2?关于算法的说法中正确的是 A算法就是某个问题的解题过程 B算法...
  • 什么是java算法

    千次阅读 2021-02-26 10:11:41
    什么是java算法算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。算法的特征:输入性:有零个或多个外部量作为算法的输入输出性:算法产生...

    12da98a592521c0e0eed01394abd4d6b.png

    什么是java算法

    算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。

    算法的特征:

    输入性:有零个或多个外部量作为算法的输入

    输出性:算法产生至少一个量作为输出

    确定性:算法中每条指令清晰,无歧义

    有穷性:算法中每条指令的执行次数有限,执行每条指令是时间也有限

    可行性:算法原则上能够精确的运行,而且人们用纸和笔做有限次运算后即可完成

    程序:算法用某种程序设计语言的具体实现,程序可以不满足又穷性

    算法的四个标准:

    正确性:在合理的数据输入下,能在有限时间内得出正确的结果

    可读性:应易于人的理解,易于调试

    健壮性:具备检查错误和对错误进行适当处理的能力

    效率:算法执行时所需计算机资源的多少,包括运行时间和存储空间

    算法的描述形式:1、自然语言 2、算法框图法 3、伪代码语言 4、高级程序设计语言

    算法设计的一般过程:

    1、理解问题

    2、预测所有可能是输入

    3、在精确解和近似解间做选择

    4、确定适当的数据结构

    5、算法设计技术

    6、描述算法

    7、跟踪算法

    8、分析算法的效率

    9、根据算法编写代码

    下面是Java实现的一个算法:冒泡排序/**

    * 冒泡排序

    */

    public class BubbleSort1 {

    public static void BubbleSort(int[] arr) {

    boolean flag = true;

    while(flag){

    int temp;//定义一个临时变量

    for(int i=0;i

    for(int j=0;j

    if(arr[j+1]

    temp = arr[j];

    arr[j] = arr[j+1];

    arr[j+1] = temp;

    flag = true;

    }

    }

    if(!flag){

    break;//若果没有发生交换,则退出循环

    }

    }

    }

    }

    public static void main(String[] args) {

    int arr[] = new int[]{1,6,2,2,5};

    BubbleSort.BubbleSort(arr);

    System.out.println(Arrays.toString(arr));

    }

    }

    相关文章教程推荐:java入门教程

    展开全文
  • AdaBoost基本原理与算法描述

    万次阅读 多人点赞 2018-08-21 19:59:33
    最近在看集成学习方法,前面已经对XGBoost的原理与简单实践做了介绍,这次对AdaBoost算法做个学习笔记,来巩固自己所学的知识,同时也希望对需要帮助的人有所帮助。 关于集成学习主要有两大分支,一种是bagging方法...

    一. 前言

    最近在看集成学习方法,前面已经对XGBoost的原理简单实践做了介绍,这次对AdaBoost算法做个学习笔记,来巩固自己所学的知识,同时也希望对需要帮助的人有所帮助。

    关于集成学习主要有两大分支,一种是bagging方法,一种是boosting方法。

    bagging方法的弱学习器之间没有依赖关系,各个学习器可以并行生成,最终通过某种策略进行集成得到强学习器(比如回归问题用所有弱学习器输出值的平均值作为预测值;分类问题使用投票法,即少数服从多数的方法来得到最终的预测值;也可以使用学习法,即每个弱学习器的输出值作为训练数据来重新学习一个学习器,而该学习器的输出值作为最终的预测值,代表方法有stacking方法,感兴趣的同学可以自己去了解一下)。bagging方法采用自助采样法,即在总样本中随机的选取m个样本点作为样本m1,然后放回,继续随机选取m个样本点作为样本m2,如此循环下去直到选取的样本个数达到预设定值n,对这n个样本进行学习,生成n个弱学习器。随机森林算法就是bagging方法的代表算法。

    boosting方法的若学习器之间有强的依赖关系,各个弱学习器之间串行生成。它的工作机制是初始给每个样本赋予一个权重值(初始权重值一般是1/m,m表示有m个样本),然后训练第一个弱学习器,根据该弱学习器的学习误差率来更新权重值,使得该学习器中的误差率高的训练样本点(所有的训练样本点)的权重值变高,权重值高的训练样本点在后面的弱学习器中会得到更多的重视,以此方法来依次学习各个弱学习器,直到弱学习器的数量达到预先指定的值为止,最后通过某种策略将这些弱学习器进行整合,得到最终的强学习器。boosting方法的代表算法有AdaBoost和boosting tree算法,而AdaBoost算法就是本文接下来要介绍的算法。

    在介绍AdaBoost之前,要先搞清楚boosting系列算法主要解决的一些问题,如下:

    • 弱学习器的权重系数\alpha如何计算?
    • 样本点的权重系数w如何更新?
    • 学习的误差率e如何计算?
    • 最后使用的结合策略是什么?

    下面我们就来看看AdaBoost是如何解决以上问题的。

    二. AdaBoost基本原理介绍

    2.1 AdaBoost分类问题

    以二分类为例,假设给定一个二类分类的训练数据集\chi = \left \{ (x_{1}, y_{1}), (x_{2}, y_{2}),...,(x_{n}, y_{n})\right \},其中x_{i}表示样本点,y_{i}表示样本对应的类别,其可取值为{-1,1}。AdaBoost算法利用如下的算法,从训练数据中串行的学习一系列的弱学习器,并将这些弱学习器线性组合为一个强学习器。AdaBoost算法描述如下:

    输入:训练数据集\chi = \left \{ (x_{1}, y_{1}), (x_{2}, y_{2}),...,(x_{n}, y_{n})\right \}

    输出:最终的强分类器G(x)

    (1) 初始化训练数据的权重分布值:(D_{m} 表示第m个弱学习器的样本点的权值)

                   D_{1}=(w_{11},...,w_{1i},...,w_{1N}),       w_{1i}=1/N,     i=1,2,...,N

    (2) 对M个弱学习器,m=1,2,...,M:

    (a)使用具有权值分布D{_{m}}的训练数据集进行学习,得到基本分类器 G{_{m}}(x) ,其输出值为{-1,1};

    (b)计算弱分类器G{_{m}}(x)在训练数据集上的分类误差率e{_{m}},其值越小的基分类器在最终分类器中的作用越大。

                            

                            其中,I(G{_{m}}(x{_{i}})\neq y{_{i}})取值为0或1,取0表示分类正确,取1表示分类错误。

    (c)计算弱分类器G{_{m}}(x)的权重系数\alpha {_{m}}:(这里的对数是自然对数)

                   \alpha {_{m}}=\frac{1}{2}ln{\frac{1-e{_{m}}}{e{_{m}}}}

    一般情况下e{_{m}}的取值应该小于0.5,因为若不进行学习随机分类的话,由于是二分类错误率等于0.5,当进行学习的时候,错误率应该略低于0.5。当e{_{m}}减小的时候\alpha {_{m}}的值增大,而我们希望得到的是分类误差率越小的弱分类器的权值越大,对最终的预测产生的影响也就越大,所以将弱分类器的权值设为该方程式从直观上来说是合理地,具体的证明\alpha {_{m}}为上式请继续往下读。

    (d)更新训练数据集的样本权值分布:

                            

    对于二分类,弱分类器G{_{m}}(x)的输出值取值为{-1,1},y{_{i}}的取值为{-1,1},所以对于正确的分类 y{_{i}}G{_{m}}(x)>0,对于错误的分类y{_{i}}G{_{m}}(x)<0,由于样本权重值在[0,1]之间,当分类正确时w{_{m+1,i}}取值较小,而分类错误时w{_{m+1,i}}取值较大,而我们希望得到的是权重值高的训练样本点在后面的弱学习器中会得到更多的重视,所以该上式从直观上感觉也是合理地,具体怎样合理,请往下读。

                      其中,Z{_{m}}是规范化因子,主要作用是将W{_{mi}}的值规范到0-1之间,使得\sum_{i=1}^{N}{W{_{mi}}} = 1

                           

    (3) 上面我们介绍了弱学习器的权重系数α如何计算,样本的权重系数W如何更新,学习的误差率e如何计算,接下来是最后一个问题,各个弱学习器采用何种结合策略了,AdaBoost对于分类问题的结合策略是加权平均法。如下,利用加权平均法构建基本分类器的线性组合:

                   f(x)=\sum_{m=1}^{M}{\alpha {_{m}}G{_{m}}(x)}

         得到最终的分类器:

                  G(x)=sign(f(x))=sign(\sum_{m=1}^{M}\alpha {_{m}}G{_{m}}(x))

    以上就是对于AdaBoost分类问题的介绍,接下来是对AdaBoost的回归问题的介绍。

    2.2 AdaBoost回归问题

    AdaBoost回归问题有许多变种,这里我们以AdaBoost R2算法为准。

    (1)我们先看看回归问题的误差率问题,对于第m个弱学习器,计算他在训练集上的最大误差:

                           E{_{m}}=max|y{_{i}}-G{_{m}}(x{_{i}})|    i=1,2,...,N

    然后计算每个样本的相对误差:(计算相对误差的目的是将误差规范化到[0,1]之间)

                          e{_{mi}}=\frac{|y{_{i}}-G{_{m}}(x{_{i}})|}{E{_{m}}}  ,  显然 0\leq e{_{mi}}\leq 1

    这里是误差损失为线性时的情况,如果我们用平方误差,则e{_{mi}}=\frac{|y{_{i}}-G{_{m}}(x{_{i}})|}{E{_{m}}^2}^2,如果我们用指数误差,则e{_{mi}}=1-exp(\frac{-y{_{i}}+G{_{m}}(x{_{i}})}{E{_{m}}})

    最终得到第k个弱学习器的误差率为:

                        e{_{m}}=\sum_{i=1}^{N}{w{_{mi}}e{_{mi}}},表示每个样本点的加权误差的总和即为该弱学习器的误差。

    (2)我们再来看看弱学习器的权重系数α,如下公式:

                       \alpha {_{m}}=\frac{e{_{m}}}{1-e{_{m}}}

    (3)对于如何更新回归问题的样本权重,第k+1个弱学习器的样本权重系数为:

                      w{_{m+i,i}}=\frac{w{_{mi}}}{Z{_{m}}}\alpha {_{m}}^{1-e{_{mi}}}

    其中Z{_{k}}是规范化因子:Z{_{m}}=\sum_{i=1}^{N}{w{_{mi}}\alpha {_{m}}^{1-e{_{mi}}}}

    (4)最后是结合策略,和分类问题不同,回归问题的结合策略采用的是对加权弱学习器取中位数的方法,最终的强回归器为:

                      G(x)=\sum_{m=1}^{M}{g(x)ln\frac{1}{\alpha {_{m}}}},其中g(x)是所有\alpha {_{m}}G{_{m}}(x)的中位数(m=1,2,...,M)。

    这就是AdaBoost回归问题的算法介绍,还有一个问题没有解决,就是在分类问题中我们的弱学习器的权重系数\alpha {_{m}}是如何通过计算严格的推导出来的。

    2.3 AdaBoost前向分步算法

    在上两节中,我们介绍了AdaBoost的分类与回归问题,但是在分类问题中还有一个没有解决的就是弱学习器的权重系数\alpha {_{m}}=\frac{1}{2}ln{\frac{1-e{_{m}}}{e{_{m}}}}是如何通过公式推导出来的。这里主要用到的就是前向分步算法,接下来我们就介绍该算法。

    从另一个角度讲,AdaBoost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分步算法时的分类问题。其中,加法模型表示我们的最终得到的强分类器是若干个弱分类器加权平均得到的,如下:

            f(x)=\sum_{m=1}^{M}{\alpha {_{m}}G{_{m}}(x)}

    损失函数是指数函数,如下:

           L(y,f(x))=exp(-yf(x))

    学习算法为前向分步算法,下面就来介绍AdaBoost是如何利用前向分布算法进行学习的:

    (1)假设进过m-1轮迭代前向分布算法已经得到f{_{m-1}}(x)

              f{_{m-1}}=f{_{m-2}}(x)+\alpha {_{m-1}}G{_{m-1}}(x)

                        =\alpha {_{1}}G{_{1}}(x)+...+\alpha {_{m-1}}G{_{m-1}}(x)

    在第m轮的迭代得到\alpha {_{m}}G{_{m}}(x)f{_{m}}(x).

              f{_{m}}(x)=f{_{m-1}}(x)+\alpha {_{m}}G{_{m}}(x)

    目标是使前向分布算法得到的\alpha {_{m}}G{_{m}}(x)使f{_{m}}(x)在训练数据集T上的指数损失最小,即

             (\alpha {_{m}},G{_{m}}(x))=arg \underset{\alpha ,G}{min}\sum_{i=1}^{N}exp(-y{_{i}}(f{_{m-1}}(x{_{i}})+\alpha G(x{_{i}})))

                                   =arg\underset{\alpha ,G}{min}\sum_{i=1}^{N}\bar{w}{_{mi}}exp(-y{_{i}}\alpha G(x{_{i}}))          {\color{Red} (1)}

    上式即为我们利用前向分步学习算法得到的损失函数。其中,\bar{w}{_{mi}}=exp(-y{_{i}}f{_{m-1}}(x{_{i}}))。因为\bar{w}{_{mi}}既不依赖\alpha也不依赖于G,所以在第m轮迭代中与最小化无关。但\bar{w}{_{mi}}依赖于f{_{m-1}}(x),随着每一轮的迭代而发生变化。

    上式达到最小时所取的\alpha ^{_{*}}{_{m}}G ^{_{*}}{_{m}}(x)就是AdaBoost算法所得到的\alpha {_{m}}G{_{m}}(x)

    (2)首先求分类器G ^{_{*}}{_{m}}(x)

    我们知道,对于二分类的分类器G(x)的输出值为-1和1,y{_{i}}\neq G{_{m}}(x{_{i}})表示预测错误,y{_{i}}= G{_{m}}(x{_{i}})表示正确,每个样本点都有一个权重值,所以对于一个弱分类器的输出则为:G{_{m}}(x)=\sum_{i=1}^{N}\bar{w}{_{mi}}I(y{_{i}}\neq G{_{m}}(X{_{i}})),我们的目标是使损失最小化,所以我们的具有损失最小化的第m个弱分类器即为:

    G^{_{*}}{_{m}}(x)=arg \underset{G}{min}\sum_{i=1}^{N}\bar{w}{_{mi}}I(y{_{i}}\neq G(x{_{i}}))   其中,\bar{w}{_{mi}}=exp(-y{_{i}}f{_{m-1}}(x{_{i}}))

    为什么用I(y{_{i}}\neq G(x{_{i}}))表示一个弱分类器的输出呢?因为我们的AdaBoost并没有限制弱学习器的种类,所以它的实际表达式要根据使用的弱学习器类型来定。

    此分类器即为Adaboost算法的基本分类器G{_{m}}(x),因为它是使第m轮加权训练数据分类误差率最小的基本分类器。

    (3)然后就是来求\alpha ^{_{*}}{_{m}}

    G ^{_{*}}{_{m}}(x)代入损失函数(1)式中,得:

          \alpha {_{m}}=\sum_{i=1}^{N}\bar{w}{_{mi}}exp(-y{_{i}}\alpha{_{m}} G^{_{*}}{_{m}}(x{_{i}}))

    我们的目标是最小化上式,求出对应的\alpha ^{_{*}}{_{m}}

                  \sum_{i=1}^{N}\bar{w}{_{mi}}exp(-y{_{i}}\alpha{_{m}} G^{_{*}}{_{m}}(x{_{i}}))

             =\sum_{y{_{i}}=G{_{m}}(x{_{i}})}\bar{w{_{mi}}}e^{_{-\alpha }}+\sum_{y{_{i}}\neq G{_{m}}(x{_{i}})}\bar{w{_{mi}}}e^{_{\alpha }}

            =e^{_{-\alpha }}\sum_{y{_{i}}=G{_{m}}(x{_{i}})}\bar{w}{_{mi}}+e^{_{\alpha }}\sum_{y{_{i}}\neq G{_{m}}(x{_{i}})}\bar{w}{_{mi}}

            =e^{_{-\alpha }}(\sum_{i=1}^{N}\bar{w}{_{mi}}-\sum_{y{_{i}}\neq G{_{m}}(x{_{i}})}\bar{w}{_{mi}})+e^{_{\alpha }}\sum_{y{_{i}}\neq G{_{m}}(x{_{i}})}\bar{w}{_{mi}}

            =(e^{_{\alpha }}-e^{_{-\alpha }})\sum_{y{_{i}}\neq G{_{m}}(x{_{i}})}\bar{w}{_{mi}}+e^{_{-\alpha }}\sum_{i=1}^{N}\bar{w}{_{mi}}

            =(e^{_{\alpha }}-e^{_{-\alpha }})\sum_{i=1}^{N}\bar{w}{_{mi}}I(y{_{i}}\neq G{_{m}}(x{_{i}}))+e^{_{-\alpha }}\sum_{i=1}^{N}\bar{w}{_{mi}}        {\color{Red} (2)}

    由于,e{_{m}}=\frac{\sum_{i=1}^{N}\bar{w}{_{mi}}I(y{_{i}}\neq G{_{m}}(x{_{i}}))}{\sum_{i=1}^{N}\bar{w}{_{mi}}}

    注意:这里我们的样本点权重系数\bar{w}{_{mi}}并没有进行规范化,所以\sum_{i=1}^{m}\bar{w}{_{mi}}\neq 1

    (2)式为:   (e^{_{\alpha }}-e^{_{-\alpha }})e{_{m}}\sum_{i=1}^{N}\bar{w}{_{mi}}+e^{_{-\alpha }}\sum_{i=1}^{N}\bar{w}{_{mi}}

    则我们的目标是求:

             \alpha {_{m}}=arg\underset{\alpha }{min}(e^{_{\alpha }}-e^{_{-\alpha }})e{_{m}}\sum_{i=1}^{N}\bar{w}{_{mi}}+e^{_{-\alpha }}\sum_{i=1}^{N}\bar{w}{_{mi}}

    上式求\alpha偏导,并令偏导等于0,得:

           (e^{_{\alpha }}+e^{_{-\alpha }})e{_{m}}\sum_{i=1}^{N}\bar{w}{_{mi}}-e^{_{-\alpha }}\sum_{i=1}^{N}\bar{w}{_{mi}}=0,进而得到:

           (e^{_{\alpha }}+e^{_{-\alpha }})e{_{m}}-e^{_{-\alpha }}=0,求得:\alpha ^{_{*}}{_{m}}=\frac{1}{2}ln\frac{1-e{_{m}}}{e{_{m}}},其中e{_{m}}为误差率:

           e{_{m}}=\frac{\sum_{i=1}^{N}\bar{w}{_{mi}}I(y{_{i}}\neq G{_{m}}(x{_{i}}))}{\sum_{i=1}^{N}\bar{w}{_{mi}}}=\sum_{i=1}^{N}w{_{mi}}I(y{_{i}}\neq G(x{_{i}}))

    (4)最后看样本权重的更新。

    利用前面所讲的f{_{m}}(x)=f{_{m-1}}(x)+\alpha {_{m}}G{_{m}}(x),以及权值 \bar{w}{_{mi}}=exp(-y{_{i}}f{_{m-1}}(x))

    可以得到如下式子:

           \bar{w}{_{m+1,i}}=\bar{w}{_{mi}}exp(-y{_{i}}\alpha {_{m}}G{_{m}}(x{_{i}}))

    这样就得到了我们前面所讲的样本权重更新公式。

    2.4 AdoBoost算法的正则化

    为了防止过拟合,AdaBoost算法中也会加入正则化项,这个正则化项我们称之为步长也就是学习率。定义为v,对于前面的弱学习器的迭代有:

                     f{_{m}}(x)=f{_{m-1}}(x)+\alpha {_{m}}G{_{m}}(x)

    加入正则化项,就变成如下:

                    f{_{m}}(x)=f{_{m-1}}(x)+v\alpha {_{m}}G{_{m}}(x)

    v的取值范围为(0,1]。对于同样的训练集学习效果,较小的v意味着我们需要更多的弱学习器的迭代次数。通常我们用学习率和迭代最大次数一起来决定算法的拟合效果。

    到这里,我们的AdaBoost算法介绍完毕。

    三. AdaBoost算法流程描述

    3.1 AdaBoost分类问题的算法流程描述

    关于AdaBoost的分类问题,sklearn中采用的是SAMME和SAMME.R算法,SAMME.R算法是SAMME算法的变种。sklearn中默认采用SAMME.R,原因是SAMME.R算法比SAMME算法收敛速度更快,用更少的提升迭代次数实现了更低的测试误差。接下来我们先介绍AdaBoost的分类算法流程,可以将二元分类算法视为多元分类算法的一个特例。

    3.1.1 SAMME算法流程描述:

    输入:样本集T=\left \{ (x{_{1}},y{_{1}}),(x{_{2}},y{_{2}}),...,(x{_{N}},y{_{N}}) \right \},输出为\left \{ -1,1 \right \},弱分类器的迭代次数为M,样本点的个数为N。

    输出:最终的强分类器G(x)

    (1)初始化样本点的权重为:

                       D_{1}=(w_{11},...,w_{1i},...,w_{1N}),       w_{1i}=1/N,     i=1,2,...,N

    (2)对于m=1,2,..,M

           (a)使用带有权重的样本来训练一个弱学习器G{_{m}}(x);

           (b)计算弱分类器G{_{m}}(x)的分类误差率:

                        

           (c)计算弱分类器的系数:

                          \alpha {_{m}}=\frac{1}{2}ln{\frac{1-e{_{m}}}{e{_{m}}}}+ln(K-1)

             其中,K表示K元分类,可以看出当K=2时,ln(K-1)=0,余下的\alpha {_{m}}与我们二元分类算法所描述的弱分类器系数一致。

           (d)更新样本的权重分布:

                     

    (3)构建最终的强分类器:

                         G(x)=sign(f(x))=sign(\sum_{m=1}^{M}\alpha {_{m}}G{_{m}}(x))

    3.1.2 SAMME.R算法流程描述:

    输入:样本集T=\left \{ (x{_{1}},y{_{1}}),(x{_{2}},y{_{2}}),...,(x{_{N}},y{_{N}}) \right \},输出为\left \{ -1,1 \right \},弱分类器的迭代次数为M,样本点的个数为N。

    输出:最终的强分类器G(x)

    (1)初始化样本点的权重为:

                       D_{1}=(w_{11},...,w_{1i},...,w_{1N}),       w_{1i}=1/N,     i=1,2,...,N

    (2)对于m=1,2,..,M

           (a)使用带有权重的样本来训练一个弱学习器G{_{m}}(x);

           (b)获得带有权重分类的概率评估:

                      P{_{mk}}(x{_{i}})=Prob{_{w}}(c=k|x{_{i}})

                   其中P{_{mk}}(x{_{i}})表示第m个弱学习器将样本x{_{i}}分为第k类的概率。k=1,2,...,K,K表示分类的类别个数。

           (c) 使用加权概率推导出加法模型的更新,然后将其应用于数据:

                       h{_{mk}}(x)=(K-1)(logP{_{mk}}(x)-\frac{1}{K}\sum_{\bar{k}=1}^{K}logP{_{m\bar{k}}}(x))k=1,2,...,K

           (d)更新样本点权重系数:

                      w{_{m+1,i}}=w{_{mi}}exp(-\frac{K-1}{K}y{_{i}}logP{_{m}}(x{_{i}}))

           (e)标准化样本点权重w;

    (3)构建最终的强分类器:

                       G(x)=sign(arg\underset{K}{max}\sum_{m=1}^{M}h{_{mk}}(x)),表示使\sum_{m=1}^{M}h{_{mk}}(x))最大的类别即为我们所预测的类别。

    3.2 AdaBoost回归问题的算法流程描述

    在sklearn中,回归使用的算法为 AdaBoost.R2算法,具体的流程描述如下:

    输入:样本集T=\left \{ (x{_{1}},y{_{1}}),(x{_{2}},y{_{2}}),...,(x{_{N}},y{_{N}}) \right \},输出为\left \{ -1,1 \right \},弱分类器的迭代次数为M,样本点的个数为N。

    输出:最终的强分类器G(x)

    (1)初始化样本点的权重为:

                       D_{1}=(w_{11},...,w_{1i},...,w_{1N}),       w_{1i}=1/N,     i=1,2,...,N

    (2)对于m=1,2,..,M

    (a)使用具有权重D{_{m}}的样本集来训练数据,得到弱学习器G{_{m}}(x)

    (b)计算训练集上的最大误差

                 E{_{k}}=max|y{_{i}}-G{_{m}}(x{_{i}})|i=1,2,...,N

    (c)计算每个样本点的相对误差:

             如果是线性误差:则e{_{mi}}=\frac{|y{_{i}}-G{_{m}}(x{_{i}})|}{E{_{m}}}

             如果是平方误差,则e{_{mi}}=\frac{(y{_{i}}-G{_{m}}(x{_{i}}))^2}{E{_{m}}^2}

             如果是指数误差,则e{_{mi}}=1-exp(\frac{-|y{_{i}}-G{_{m}}(x{_{i}})|}{E{_{m}}})

    (d)计算回归误差率:

            e{_{m}}=\sum_{i=1}^{N}w{_{mi}}e{_{mi}}

    (c)计算弱学习器的系数:

            \alpha {_{m}}=\frac{e{_{m}}}{1-e{_{m}}}

    (d)更新样本集的权重分布:

            w{_{m+1,i}}=\frac{w{_{mi}}}{Z{_{m}}}\alpha {_{m}}^{1-e{_{mi}}},其中Z{_{m}}是规范化因子,Z{_{m}}=\sum_{i=1}^{N}w{_{mi}}\alpha {_{m}}^{1-e{_{mi}}}

    (3)构建最终的强学习器:

                       G(x)=\sum_{m=1}^{M}{g(x)ln\frac{1}{\alpha {_{m}}}},其中g(x)是所有\alpha {_{m}}G{_{m}}(x)的中位数(m=1,2,...,M)。

    四. AdaBoost算法的优缺点

    4.1 优点

    (1)不容易发生过拟合;

    (2)由于AdaBoost并没有限制弱学习器的种类,所以可以使用不同的学习算法来构建弱分类器;

    (3)AdaBoost具有很高的精度;

    (4)相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重;

    (5)AdaBoost的参数少,实际应用中不需要调节太多的参数。

    4.2 缺点

    (1)AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。

    (2)数据不平衡导致分类精度下降。

    (3)训练比较耗时,每次重新选择当前分类器最好切分点。

    (4)对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。

    五. 参考文献/博文

    (1)李航,《统计学习方法》 第八章

    (2)Multi-class AdaBoost 论文

    (3)Boosting for Regression Transfer AdaBoost回归论文

    (4)https://www.cnblogs.com/pinard/p/6133937.html

    展开全文
  • Apriori算法的简单描述

    千次阅读 2014-11-26 09:09:18
    Apriori算法是种最有影响的挖掘布尔关联规则频繁项集的算法。它的核心是基于两阶段频集思想的递推算法。该关联规则在分类上属于单维、单层、布尔关联规则。在这里,所有支持度大于最小支持度的项集称为频繁项集(简称...
  • 算法和数据结构》学习路线指引

    万次阅读 多人点赞 2021-07-01 11:16:15
    前 WorldFinal 选手对学习算法的一点总结。五张思维导图解决你的困惑
  • 随机森林基本原理与算法描述

    万次阅读 2018-08-27 23:17:49
    在前几篇博文中我们介绍了boosting系列的几个主要算法GBDT、AdaBoost和XGboost的基本原理与算法描述。本篇博文将介绍集成学习的另一大分支bagging方法的代表算法随机森林(Random Forest)算法。 bagging系列的算法...
  • 什么?程序竟然等于数据结构 + 算法?这个公式是大师 Niklaus Wirth 在 1976 年提出来的,40 多年过去了,这个公式还成立吗?对于做 Java 开发的朋友,可能会更加的赞...
  • 【单选题】以下关于Python的说法中正确的是哪一项?【判断题】Python语言是一种面向对象的高级程序设计语言。【简答题】分组名单和每组招标文件以附件形式上传【其它】作业1:数据库连接 连接属性 显示“产品”表的...
  • 关于线性回归的描述,以下正确的有:

    千次阅读 2018-02-22 13:27:03
    problem关于线性回归的描述,以下正确的有:A 基本假设包括随机干扰项是均值为0,方差为1的标准正态分布B 基本假设包括随机干扰项是均值为0的同方差正态分布C 在违背基本假设时,普通最小二乘法估计量不再是最佳线性...
  • 对于初学者来说,我认为选择一本合适、不错的算法书是非常非常重要的,从大一到现在我也看过不少的算法书,当然在学习算法的过程中也走过不少坑,刷了很少题,总结了不少经验,下面说说 我的一些经验吧,请耐心看完...
  • 理解强连通分量Kosaraju算法正确

    千次阅读 多人点赞 2018-03-26 21:03:55
    1.基本概念 在看《算法》的有向图章节时,对于Kosaraju算法的理解花了很多时间,为了让更多人不在这个算法的理解上面耗费过多时间,特地把自己理解该算法的过程记录下来,分享给有需要的各位。 Kosaraju算法是计算...
  • 【视觉算法】SHOT特征描述

    千次阅读 2020-05-03 13:53:37
    回顾一下上一篇文章学习的物体识别流程,首先计算模型点云特征,并将特征保存;然后计算场景点云特征,并将特征保存;...现在我们开始学习SHOT特征描述子,简要说明一下,SHOT特征描述子在构建的局部参考系内(旋转和...
  • 一 、爱奇艺2019秋招算法方向笔试题(A) 1.使用堆排序方法排序(45,78,57,25,41,89),初始堆为( ) 首先根据现有的序列进行二叉树的构建得到: 然后将这棵二叉树转化为最大堆积树(树根最大,从而每次...
  • C语言/C++算法基本概念

    千次阅读 2021-05-22 13:08:22
    分享编程技能、互联网技术、生活感悟、打造干货分享平台,将总结的...为了使得算法有意义,还规定算法必须是有限的和确定的,也就是说算法的执行时间有限、执行的过程是确定的。比如我们写了代码int a = 10; //a,...
  • 机器学习常见算法分类

    千次阅读 2021-02-03 19:32:43
    “机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 “机器学习是对能通过经验自动改进的计算机算法的研究”。 “机器学习是用数据或以往的经验,...
  • 2021年-算法期末试题汇总

    千次阅读 多人点赞 2020-12-18 20:52:02
    2.以下关于渐进记号的性质是正确的有:(A) A f(n) =Θ(g(n)),g(n) =Θ(h(n)) ⇒f(n) =Θ(h(n)) B f(n) =O(g(n)),g(n) =O(h(n)) ⇒h(n) =O(f(n)) C O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D f(n) = O(g(n)) ⇔g(n) =
  • 人工智能:模型与算法——练习题

    千次阅读 2021-05-13 11:01:37
    1如果一个问题或者任务不可计算,那么对这个问题或任务的描述哪一句是正确的( ) A.该问题或任务所需计算时间是非线性增加的 B.无法将该问题或任务所需数据一次性装入内存进行计算 C.图灵机不可停机 ...
  • 算法程序框图基本算法语句同步练习 模拟试题 1下面算法描述正确的一项是 A. 算法只能用自然语言来描述 B. 算法只能用图形方式来表示 C. 同一问题可以有不同的算法 D. 同一问题的算法不同结果必然不同 2用二分法求...
  • 贪心算法

    千次阅读 2021-01-13 05:59:48
    定义概览贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,...
  • 题目和答案在最下面! 全文转自百度,自己总结方便自己以后查找! 常见类型: 星型拓扑 总线拓扑 ▪ 环型拓扑 ▪ 树型拓扑 ▪ 混合型拓 ▪ 网型拓扑 开关电源拓扑 简单介绍的: 星型 优点:可靠性...
  • 算法设计分析题库一

    千次阅读 多人点赞 2020-07-03 23:27:58
    1. 下面(C)不是算法所必须具备的特性。 (A)确切性 (B)有穷性 (C)高效性 (D)可行性 2. 算法与程序的区别是(B )。 **A.**输出 **B.**有穷性 **C.**输入 **D.**确定性 3. 解决问题的基本步骤是(D...
  • 算法设计与分析——蒙特卡罗算法(简单、通俗、易懂)... 1 ,如果一个蒙特卡罗算法对于问题的任一实例得到正确解的概率不小于p, 则称该蒙特卡罗算法是p正确的,且称ε =p − 1 /2 ​是该算法的优势。 设MC(x)是解某个
  • K-means算法和KNN算法

    千次阅读 2018-11-06 21:50:38
    github: 智能算法的课件和参考...算法主要步骤可描述如下:   随机产生K个初始聚类中心。 计算测试点到聚类中心的距离,选择距离最近的聚类中心将测试点归类。 更新每类的聚类中心。 重复步骤2、3迭代更新...
  • 编程算法同步入门

    千次阅读 2019-05-29 23:30:03
    用数值表达现实事物,用运算描述任务目标,再通过算法处理数据找到达到目标的最优化路径——这个思维的形成过程,远比学会模型本身更为难得。 经过这种思考训练内化出的思维能力,也是学习者可以相伴终身的助力。 本...
  • 今天要整理记录的笔记内容是特征算法中比较常用的一种——ORB特征提取描述算法,顾名思义,ORB算法包含了对特征点的提取和描述这两个部分。而在上次的博文《OpenCV4学习笔记(39)》中,记录了FAST特征提取算法和...
  • KNN(k-nearest neighbor的缩写)最近邻算法原理详解

    万次阅读 多人点赞 2017-08-24 16:55:43
    k-最近邻算法是基于实例的学习方法中最基本的,先介绍基于实例学习的相关概念。 基于实例的学习 已知一系列的训练样例,很多学习方法为目标函数建立起明确的一般化描述;但与此不同,基于实例的学习方法只是简单地...
  • 算法描述

    千次阅读 2012-08-26 21:04:59
    数据的运算通过算法(Algorithm)描述,讨论算法是数据结构课程的重要内容之一。 1.算法  非形式地说,算法是任意一个良定义的计算过程。它以一个或多个值作为输入,并产生一个或多个值作为输出。 (1)一个算法...
  • 算法设计与分析 (知识点总结)

    万次阅读 多人点赞 2021-03-03 23:08:42
        通过学习掌握算法设计的主要方法,对算法的时、空复杂性有正确分析的能力,能够针对具体的应用问题选择合适的数据结构并设计结构清晰、正确有效的算法,为独立设计算法和对算法进行复杂性分析奠定坚实的理论...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 195,109
精华内容 78,043
关键字:

下面关于算法描述正确的是