决策树

机器学习8:决策树ID3

旧时模样 提交于 2020-02-05 02:00:55
决策树ID3 原理 熵 (entropy)概念–衡量不确定性的大小 一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息->信息量的度量就 等于不确定性的多少。 信息熵的计算 ID3算法 C4.5算法 算法实现 from sklearn . feature_extraction import DictVectorizer from sklearn import tree from sklearn import preprocessing import csv import numpy as np # 读入数据 Dtree = open ( r 'AllElectronics.csv' , 'r' ) reader = csv . reader ( Dtree ) # 获取第一行数据 headers = reader . __next__ ( ) print ( headers ) # 定义两个列表 featureList = [ ] labelList = [ ] for row in reader : # 把label存入list labelList . append ( row [ - 1 ] ) rowDict = { } for i in range ( 1 , len ( row ) - 1 ) :

决策树的几何理解

[亡魂溺海] 提交于 2020-02-05 02:00:21
决策树的几何理解 一、决策树的实质是对空间的分割 对于一个多维数据,可以将它的每一个属性看成一个维度。如一个二维数据可以看成一个平面,一个三维数据可以看成一个立方体。各属性的取值表示标签的空间位置。那么决策树的每一次测试可以看成对某一维空间的一次分割。 1、树的深度则指的是取多少个维度进行分割,显然树的深度不能超过属性个数,因为属性个数意味着维度,你不允许对一个三维物体从第四维开刀。 2、树的分支个数,指的是你对一个维度“切了几刀”(更精确的是,树的分支个数减一是你的“刀数”。 因为一刀分两段,两刀分三段。。 3、树的叶子节点个数本质是你把空间分割成了几份。 4、剪枝意味着对分割空间的合并。 剪枝的意义: 从上文我们知道决策树的每一次对空间的分割都是“贯穿”的,可以理解成“一刀两段”。而“剪枝”则又将被分割的空间进行局部的“缝补”。这种“缝补”不是任意的,只能“缝补”原本就“相邻”的空间。 举个分类问题的例子,我们现在需要根据已有三维数据把目标分成两类。我们不妨把我们的三维数据想象成一个空间立方体(如一个石块),把任务理解成:通过不断的分割,找到数据里属于“维纳斯的部分”和“不属于维纳斯的部分”(对应任务的“分成两类”) 好了,我们现在成功把一个二分类问题想象成把石块雕刻成维纳斯的过程。 如果没有剪枝过程,决策树最终得到的是“方块状”的空间。显然我们永远不可能得到一个维纳斯的形状

决策树算法

回眸只為那壹抹淺笑 提交于 2020-02-03 11:35:47
决策树入门 决策树是分类算法中最重要的算法, 重点 决策树算法在电信营业中怎么工作? 为什么叫决策树? 因为树的叶子节点是我们最终预判的结果。 决策树如何来? 根据训练样本建立。 问题1:为什么费用变换率放第一个? 根据特征建决策树,会有n棵树,找出最优树。 问题2:当我们特征是连续值的时候,到底从哪里开始切分? 连续值要改为离散的。 问题3:决策树能不能做回归 决策树例子: 不同的决策树对我们判定的效率,速度有影响。 总结: 树的深度:深度的基数是1,上图深度是4。一棵树所有层次的最大值称为 深度 。 决策树进阶 **决策树一共有五种算法。**前面四个都是有关联的。 Hunt算法: 决策树是一个递归的过程。 2,3解释 :当所有的样本点都属于同一个类别的时候,不需要划分(递归结束的一个条件); 5,6解释 :属性不能再划分的时候,其类别标记取决于该样本中数据最多的类。如果类别数量相同,注意看一下另一个叶子节点,不能与上一个叶子节点的类别相同,否则,无需划分。 8,解释 :如何构建最优决策树。 hunt算法有一个bug:不好选最优划分属性。D是样本集。 9~14解释 :对于某一个特征(属性),的每一个值,设置为node并生成一个分支;形成两个样本子集。为空,分支节点为叶子节点,否则,样本子集中数量多的类为返回值。 信息增益–information gain(ID3) (b)方法更好

集成学习--随机森林

混江龙づ霸主 提交于 2020-02-02 04:08:12
集成学习—Bagging和随机森林 Bagging Bagging就是 B ootstrap agg regat ing ,自举汇聚法,亦称为装袋法。 与Boosting的不同: Boosting在训练时会使用所有的数据集,而Bagging有其独特的采样方法,也就是Bootstrap 假设有m个样本 D D D ,则每次从样本总体中 随机 选取一个放入 D i D_i D i ​ 中,注意的是该样本并没有在原样本总体中剔除,这样重复m次,得到新的样本 D i D_i D i ​ , D i D_i D i ​ 中可以有重复的样本,并没有包含 D D D 中所有样本 一个样本在取样的过程中都没有被选到的概率为 ( 1 − 1 m ) m (1-\frac{1}{m})^m ( 1 − m 1 ​ ) m ,当 m → + ∞ m \rightarrow + \infty m → + ∞ 时,概率趋于 1 e \frac{1}{e} e 1 ​ ,则说明在m很大时,新选取的样本是原样本总体的约 64% Boosting的每个基分类器有自身的系数,每次训练时数据集的权重也不同,而Bagging的每个基分类器,每个数据集都是平等同阶的 Boosting的每个基学习器需基于上一个学习器的结果进行学习,所以是串行计算,而Bagging能够实现并行计算 Boosting只能处理二分类任务

GBDT FFM(FM) Online Learing(FTRL)

混江龙づ霸主 提交于 2020-02-02 01:56:21
GBDT+FFM(FM)+Online Learing(FTRL)是kaggle比赛的重点方法,需要重点学习。 从Ensemble说起 Bagging,Boosting和Stacking是集成学习的三种主要的形式. Bagging Bagging=Bootstrap Aggregating ,是 model averaging 的策略. bootstrap 是一种有放回的抽样,那么bagging就是使用bootstrap抽样来进行模型平均(vote). 从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果. 比如: Random Forest 就是使用bagging的思想 (1) bootstrap抽样产生样本集M (2) 从原始的K个特征中选择k(logK)个随机特征作为特征集F (3) 对样本集M在特征集F上建立决策树(CART) (4) 重复(1)-(3)产生多个决策树 (5) 投票(average) 这里借鉴别人的一张图: Stacking 是指训练一个模型用于组合其他各个模型。即首先我们先训练多个不同的模型,然后再以之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出. 将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值

《机器学习实战》笔记(七):Ch7 - 利用AdaBoost元算法提高分类性能

不想你离开。 提交于 2020-02-01 00:20:25
第七章 利用AdaBoost元算法提高分类性能([代码][ch07]) AdaBoost算法的优缺点 优点: 泛化错误率低,易编码,可以应用再大部分分类器上,无参数调整。 缺点: 对离群点敏感。 使用数据类型: 数值型和标称型数据。 bagging: 基于数据随机重抽样的分类器构造方法 在原始数据选择S次后得到S个数据集的一种技术。新数据集和原数据集的大小相等。每个数据集通过原始样本中随机替换得到的。 boosting 收集数据:可以使用任意方法。 准备数据:依赖于所使用的弱分类器类型,本章使用的是单层决策树,这种分类器可以处理任何数据类型。当然也可以使用任意分类器作为弱分类器,第2章到第6章中的任一分类器都可以充当弱分类器。作为弱分类器,简单分类器的效果更好。 分析数据:可以使用任意方法。 训练算法: Adaboost的大部分时间都用在训练上,分类器将多次在同一数据集上训练弱分类器。 测试算法:计算分类的错误率。 使用算法:同SVM一样, Adaboost预测两个类别中的一个。如果想把它应用到多个类次后别的场合,那么就要像多类SVM中的做法一样对。 训练算法: 基于错误提升分类器的性能 AbaBoost算法会不断得重复训练和调整权重的过程,直到悬链错误率为0或者弱分类器的数目达到用户的制定值为止。 基于单层决策树构建弱分类器 伪代码 将minError设置为无穷大

《机器学习实战》笔记(九):Ch9 - 树回归

烈酒焚心 提交于 2020-01-31 23:57:56
第九章 树回归([代码][ch09]) 树回归算法的优缺点 优点:可以对复杂和非线性的问题建模. 缺点:结果不容易理解. 适用数据类型:数值型和标称型. 树回归和分类树的思路类似,且方法如下 收集数据 采用任意方法收集数据. 准备数据 需要数值型的数据,标称型数据应该映射成为二值型数据. 分析数据 汇出数据的二维可视化显示结果,以字典方式生成树 训练算法 大部分时间都花费在叶节点树模型的构建上. 测试算法 使用测试数据上的R*R值来分析模型的效果. 使用算法 使用训练出的树做预测,预测结果还可以来做很多事情. 连续和离散型特征的树的构建 在树的构建过程中,需要使用到字典,该字典包含以下4个元素 带切分的特征 待切分的特征值 右子树 左子树 构建树的伪代码 找到最佳的待切分特征 如果该节点不能再分,将该节点存为叶节点 执行二元切分 在右子树调用方法 在左子树调用方法 将CART算法用于回归 在构建树种新增伪代码 对每个特征 对每个特征值 将数据切成两份 计算切分的误差 如果当前误差小于当前最小误差,那么将切分设定为最佳切分并且更新最小误差 树剪枝 一棵树如果节点过多,就会出现“过拟合” 通过降低决策树的复杂度来避免过拟合的过程称为剪枝 预剪枝方法 定义一个高度,当决策树达到该高度的时候就停止决策树的增长 达到某个节点的实例具有相同的特征向量,即使这些实例不属于同一类

机器学习 --ID3/C4.5 以及决策树参数

孤者浪人 提交于 2020-01-31 11:11:29
一. ID3/C4.5 1. ID3算法是决策树一个经典的构造算法,内部使用信息熵和信息增益来进行构建,每次迭代选择信息增益最大的特征属性作为分隔属性; ID3只支持离散的特征,不支持连续的特征; ID3算法构建的是多叉树; 依赖特征属性较多特征,但实际上并不是最优的【产生误导】,因此必须用特征的信息熵进行惩罚/归一化; 不会进行剪枝操作! 2. C4.5,使用信息增益率代替信息增益度: 使用信息增益率代替信息增益度。实际上就是对特征属性比较多的特征进行惩罚。 2. 决策树参数详解 2.1 criterion 假设T为给定某一个节点,i代表标签的某一个分类。那么p(i|T)代表标签分类i在节点T上所占的比例。需要特别注意,当选择信息熵entropy时,sklean实际上计算的是基于信息熵的的信息增益,即父节点的信息熵与子节点的信息熵【条件信息熵】之差。 1 import numpy as np 2 from collections import Counter 3 from matplotlib import pyplot as plt 4 5 n_unique_list = range(2, 10) 6 n_all = 100 7 entropy_list = [] 8 gini_list = [] 9 10 for n_unique in n_unique_list: 11

机器学习实战:决策树

假如想象 提交于 2020-01-30 08:28:26
决策树 构造决策树 1. 找到决定性特征 2. 如果某个分支下的数据属于同一类,则无需继续分类;如果分支下的数据属于不同类,则重复划分数据集。 如何划分数据集 信息增益:划分数据集前后的信息变化。 信息增益最高的特征就是最好的选择。 香农熵越高,混合的数据也越多。 示例一:区分鱼类和非鱼类 (1) 创建数据集 import numpy as np def createDataset(): dataSet = [[1,1,'yes'], [1,1,'yes'], [1,0,'no'], [0,1,'no'], [0,1,'no']] labels = ["no surface","flippers"] return dataSet,labels myDat,labels = createDataset() (2)计算给定数据集的香农熵 import math def calcShannonEnt(dataSet): datSize = len(dataSet) labelCount = {} for sample in dataSet: currentLabel = sample[-1] if currentLabel not in labelCount.keys(): labelCount[currentLabel] = 0 labelCount[currentLabel] +=

决策树算法

眉间皱痕 提交于 2020-01-30 00:38:41
调频96.8有一种游戏:游戏中,出题者写下一件东西,其他人需要猜出这件东西是什么。当然,如果游戏规则仅此而已的话,几乎是无法猜出来的,因为问题的规模太大了。为了降低游戏的难度,答题者可以向出题者问问题,而出题者必须准确回答是或者否,答题者依据回答提出下一个问题,如果能够在指定次数内确定谜底,即为胜出。 我们先实验一下,现在我已经写下了一个物体,而你和我的问答记录如下: 是男的吗?Y 是亚洲人吗?Y 是中国人吗?N 是印度人吗?Y …… 在上面的游戏中,我们针对性的提出问题,每一个问题都可以将我们的答案范围缩小,在提问中和回答者有相同知识背景的前提下,得出答案的难度比我们想象的要小很多。 在每一个节点,依据问题答案,可以将答案划分为左右两个分支,左分支代表的是Yes,右分支代表的是No,虽然为了简化,我们只画出了其中的一条路径,但是也可以明显看出这是一个树形结构,这便是决策树的原型。 决策树算法 我们面对的样本通常具有很多个特征,正所谓对事物的判断不能只从一个角度,那如何结合不同的特征呢?决策树算法的思想是,先从一个特征入手,就如同我们上面的游戏中一样,既然无法直接分类,那就先根据一个特征进行分类,虽然分类结果达不到理想效果,但是通过这次分类,我们的问题规模变小了,同时分类后的子集相比原来的样本集更加易于分类了。然后针对上一次分类后的样本子集,重复这个过程。在理想的情况下