课堂学习
算法
- 算法设计的目标:正确性、可使用性、可读性、健壮性、高效率与低存储量需求
- 算法的特征:有限性、确定性、可行性、输入性、输出性
- 在C语言中调用函数时只有从实参到形参的单向值传递;在C语言中可以用传指针方式来实现形参的回传。(C++中增加了引用型参数的概念,引用型参数名前加上&)
- 时间复杂度:一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,算法的运行时间取决于两者的综合效果。
- f(n)=O(g(n))(读作“f(n)是g(n)的大O”),即g(n)为f(n)的上界。这个上界的阶越低,结果就越有价值。
- f(n)= Ω(g(n))(读作“f(n)是g(n)的大Ω”),即g(n)为f(n)的下界。这个下界的阶越高,结果就越有价值。
- f(n)= θ(g(n))(读作“f(n)是g(n)的大θ”),即g(n)与f(n)的同阶。
- 递归算法的时间复杂度计算是采用一种分而治之的方法,把一个“大问题”分解为若干个相似的“小问题”来求解。
- 算法空间复杂度:一个算法的存储量包括形参所占空间和临时变量所占空间。在对算法进行存储空间分析时,只考察临时变量所占空间。
为什么算法占用的空间只考虑临时空间,而不必考虑形参的空间呢?
这是因为形参的空间会在调用该算法的算法中考虑。
- 算法设计工具:STL,STL主要由container(容器)、algorithm(算法)和iterator(迭代器)三大部分构成。
使用STL时必须将下面的语句插入到源代码文件开头:
using namespace std;
- STL算法是用来操作容器中数据的模板函数,STL提供了大约100个实现算法的模版函数。STL算法对常用算法进行了总结。
- STL迭代器用于访问容器中的数据对象。每个容器都有自己的迭代器,只有容器自己才知道如何访问自己的元素。
- 常用的STL容器:顺序容器、关联容器、适配器容器
顺序容器(元素在容器中的位置同元素的值无关,即容器不是排序的)有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。
- vector
- string(string是一个保存字符序列的容器,所有元素为字符类型,类似vector)
统计学习方法----决策树
决策树模型与学习
- 决策树是一种基本的分类与回归方法,是一种归纳法,由结点和有向边组成。结点有两种类型:内部结点⚪和叶结点▢,内部结点表示一个特征或属性,叶结点表示一个类。
- 决策树学习的本质是从训练数据集种归纳出一组分类规则,其要求是与训练数据矛盾较小且具有很好的泛化能力(即对训练数据的拟合能力和对未知数据的预测能力)。
特征选择
1.特征选择的准则是信息增益或信息增益比。
- 信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
g(D,A)=H(D)-H(D|A)
经典例题
- 信息增益比:解决了信息增益偏向于选择取值较多的特征的问题
特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即
gR(D,A)=g(D,A) / HA(D)
决策树的生成
- ID3算法
- C4.5算法
信息增益生成决策树以及ID3算法代码参考代码在这
决策树的剪枝
- 预剪枝:生成过程种,对每个结点划分前进行估计,若当前结点的划分不能提升泛化能力,则停止划分,记当前结点为叶结点。
- 后剪枝:生成一颗完整的决策树之后,自下而上的对内部结点考察,若此内部结点变为叶结点可以提升泛化能力,则做此替换。
- 降低错误剪枝(REP)
- 悲观错误剪枝(PEP)(该方法是自上而下的)
- 最小误差剪枝(MEP)
- 基于错误的剪枝(EBP)
- 代价-复杂度剪枝(CCP)