决策树

机器学习实战-决策树-画图

喜你入骨 提交于 2020-02-22 03:49:43
获取树节点的数据以及树的层数 def getNumLeafs(myTree): numLeafs=0 firstStr=list(myTree.keys())[0] # 此处注意,书上用的是 py2 的版本,所以有些不同,对于 a.keys() 的类型需要先转成列表 secondDict=myTree[firstStr] #firstStr 取出决策树的顶级父节点,然后读取顶级父节点所建立的树 for key in secondDict.keys(): if type(secondDict[key]).__name__== 'dict' : # 判断某个键值是否是一个 dict 类型,即是否是一个决策节点 numLeafs+=getNumLeafs(secondDict[key]) # 递归算法,不断递归,直至找到叶子节点 else : numLeafs+=1 return numLeafs def getTreeDepth(myTree): maxDepth=0 firstStr=list(myTree.keys())[0] secondDict=myTree[firstStr] for key in secondDict.keys(): if type(secondDict[key]).__name__== 'dict' : # 上面内容都一样 hisDepth=1

机器学习实战 -- 决策树(ID3)

蓝咒 提交于 2020-02-22 03:49:05
机器学习实战 -- 决策树(ID3) ID3是什么我也不知道,不急,知道他是干什么的就行 ID3是最经典最基础的一种决策树算法,他会将每一个特征都设为决策节点,有时候,一个数据集中,某些特征属性是不必要的或者说信息熵增加的很少,这种决策信息是可以合并的修剪的,但是ID3算法并不会这么做 决策树的核心论点是香农信息论,借此理论得出某种分类情况下的信息熵 某种决策下,分类趋向于统一,则香农熵很小(熵描述杂乱无序的程度,如果'YES', 'NO' 可能性对半分,那么这个分类决策最终是趋向于杂乱的熵值会很大, 只出现 'YES' 那么表示这个决策的结果趋向于一个统一的结果,固定,那么熵就很小) 综上: 某个决策节点下,信息熵越小,说明这个决策方式越好 整个决策树分为三个部分:1.学习出决策树 2.绘制决策树 3.存储决策树 比起sklearn这个决策树更简单,没有考虑基尼系数,只关注信息熵 from math import log '' ''' 计算香农熵 ''' def calcShannonEnt(dataset): '' ''' dataset —— 数据集 eg:[[f1,f2,f3,L1],[f1,f2,f3,L2]] f 表示特征, L 表示标签 shannonEnt —— 香农熵 ''' numEntries=len(dataset) # 统计数据集中样本数量

机器学习:IDE3决策树(原理+python实现)

为君一笑 提交于 2020-02-19 12:08:45
不管对决策树的知识了解有多少,这次通过一个简单的例子来就能够了解它的原理和明白实现的方法。 实际场景 对于一个眼科医生而言,当面对病人是否需要佩戴隐形眼镜时,只需要通过几个问题就能够判断出病人是需要带软,硬还是不能带隐形眼镜。因此我们的数据集就是病人的四个特征(‘age’, ‘prescript’, ‘astigmatic’, 'tearRate’)的组合以及对应的结论(‘soft’,‘hard’,‘no lenses’),获取数据 点击这里 ,提取码tvj6 先加载数据,如下: # 加载数据 def loadData ( ) : bigString = open ( r '路径\lenses.txt' , 'r' ) dataMat = [ ] for line in bigString : curLine = line . strip ( ) . split ( '\t' ) dataMat . append ( curLine ) return dataMat 那么接下来看看关于这个问题的决策树是怎样的一个结构。 可以看出,医生通过不断地问一些问题,最后对病人做出结论,那么决策树的构建过程,实际上就是不断寻找最佳特征的过程,使得数据集每一个样本都能够在决策树上体现出来,对于IDE3决策树而言,指的就是用IDE3方法来筛选出最佳特征,关于IDE的计算方法,这里不再详细去讲

随机森林算法实现分类

回眸只為那壹抹淺笑 提交于 2020-02-17 06:12:50
文章目录 导入数据 导入pandas,并且重命名为pd。 数据导入 数据处理 建立模型 模型评估 更多内容关注公众号:邯郸路220号子彬院 导入数据 导入pandas,并且重命名为pd。 import pandas as pd #通过互联网读取泰坦尼克乘客档案,并存储在变量titanic中。 titanic = pd.read_csv( ‘titanic.txt’) #引入pandas,并且重命名为pd。 将熊猫作为pd导入 #通过互联网读取泰坦尼克乘客档案,并存储在变量titanic中。 泰坦尼克号= pd.read_csv(‘titanic.txt’) 数据导入 #导入pandas,并且重命名为pd。 import pandas as pd #通过互联网读取泰坦尼克乘客档案,并存储在变量titanic中。 titanic = pd . read_csv ( 'http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt' ) #人工选取pclass、age以及sex作为判别乘客是否能够生还的特征。 x = titanic [ [ 'pclass' , 'age' , 'sex' ] ] y = titanic [ 'survived' ] 数据处理 #对于缺失的年龄信息,我们使用全体乘客的平均年龄代替

机器学习概述

二次信任 提交于 2020-02-17 06:08:59
一、 1.什么是机器学习: 机器学习是从人工智能中产生的一个重要学科分支,是实现智能化的关键。 2.机器学习是一门多淋浴交叉学科,设计概率论、统计学、逼近学、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,已获得新知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 3.机器学习的一般过程: 训练数据----------->f(x)----------->未知测试数据(泛华问题) 4.模型--------->策略(损失函数选择,模型选择)--------->算法(在假设空间,确定参数,最优化) 二、 1.发展历程: 推理期、知识期、学科形成、繁荣期。 2.机器学习方法: 有监督学习:从给定的有标注的训练数据集中学习初几个函数(模型参数),当新的数据到来时可以根据这个函数预测结果。常见任务包括分类与回归。 分类:输出是类别标签 回归:输出是实数 3.无监督学习:没有标注的训练数据集,需要根据样本间的统计规律对样本集进行分析,常见任务如聚类等。 4.半监督学习:结合少量的标注训练数据和大量的未标注数据进行数据的分类学习 两个基本假设: 聚类假设:处在相同聚类中的样示例有较大的的可能拥有相同的标记。 流行假设:处于一个很小的局部区域内的样本示例具有相似的性质,因此,其标记也应该相似 5.增强学习:外部环境对输出只给出评价信息而非正确答案

机器学习之随机森林(python调参)

余生颓废 提交于 2020-02-14 17:58:11
原理 随机森林的原理即将多个决策树放到一起做决断。 决策树原理详见: 机器学习之决策树原理 。 森林:建立多个决策树放到一起,形成一个森林,将测试数据依次输入这多个决策树,得到最终结果。假设有三棵树,输入测试数据后依次得到1,1,0,那么对于分类问题来说,得到的结果为1;对于回归问题来说,得到的结果可以是平均数0.67。 随机: 1、样本的选择随机性:假设有从1到10共十个样本,从这个样本中有放回地抽取六个样本,用这六个样本建立第一个决策树,而不是用所有的样本,这样可以避免过拟合。像以上这样取十次,建立十个决策树,则构成了一个随机森林。 2、特征的选择随机性:像之前的那个例子一样,不一定哪个特征对最终结果有利或有害,所以构建每个决策树时并不用到所有特征,而是无放回地抽取其中几个特征。比如从总的八个特征中选出六个特征参与某个决策树的构建。 python实现 1、导入需要的库 from sklearn . datasets import load_breast_cancer from sklearn . ensemble import RandomForestClassifier from sklearn . model_selection import GridSearchCV from sklearn . model_selection import cross_val_score

算法导论系列笔记之线性时间排序

家住魔仙堡 提交于 2020-02-14 17:55:39
线性时间排序 以下为本人整理课程笔记 课程地址: b站搬运 github: 还有除了算法导论外一些基础知识的笔记 我们能做到的排序有多快? 速度取决于计算模型【哪些操作是被允许的】 比较排序的算法模型 在模型中只能进行两两之间的大小比较来决定顺序 快速排序 归并排序 插入排序 堆排序 定理 比较排序的算法速度不会超过 nlgn 决策树 举例3个数进行比较排序的决策树 每一个内部节点都会有一个下标为i:j标记,左孩子为小于等于,右孩子为大于 每一个叶结点表示一个排序结果,其中有一个是正确的特定排序 决策树模型 构建可以接收n个数进行比较的一个决策树【至少一个 就是把算法中可能的结果都列出来 树的叶子结点与n的阶乘有关,树的大小与n的指数有关 运行时间与树的高度 以此去证明比较排序的下界为 nlgn 证明 n!<=2^h 【lgn为单调递增函数 h>=lg(n!) 确定性算法:它执行的每一步都是完全正确的 如果是随机算法,就会得到不止一个树,而是一个概率分布的多种 线性时间内完成 计数排序 假定要排序的是n个整数,每个整数都在1到k的范围内,需要辅助存储序列 伪代码 COUNTING-SORT(A,B,k) let C[0…k] be a new array //记录各个数出现的频率 for i=0 to k C[i] = 0 for j=1 to A.length C[A[j]] =

决策树算法

Deadly 提交于 2020-02-13 00:50:10
本文的结构如下: 决策树构造实例:这个就不详细讲了,大家知道树的结构就行了 ID3:信息增益(有什么问题呢?) C4.5:信息增益率(解决ID3问题,考虑自身熵情况) CART:使用GINI系数来当作衡量标准 决策树的剪枝:预剪枝,后剪枝 文章目录 1. 衡量标准(信息论基础) 2. ID3算法 3. C4.5算法 4. 分类回归树(Classification and Regression Tree, CART) 5. 剪枝 预剪枝 后剪枝 1. 衡量标准(信息论基础) 单一变量的熵—— 多个变量的联合熵—— 条件熵—— 互信息—— I(X,Y) = H(X)-H(X|Y) 如果说H(X)度量了X的不确定性,条件熵H(X|Y)度量了我们在知道Y以后X剩下的不确定性,那么互信息就是度量了X在知道Y以后不确定性减少程度,记为I(X,Y)。 最后用一张图描述四者的关系: 2. ID3算法 在决策树的ID3算法中,互信息I(X,Y)被称为 信息增益 。ID3算法就是用信息增益来判断当前节点应该用什么特征来构建决策树。信息增益大,则越适合用来分类。 分别对各个属性 递归 地计算信息增益,取最大的子节点的分裂属性,最终就可以得到整个决策树。 但是ID3算法中还存在着一些不足之处: ID3没有考虑 连续特征 ,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。

2.2:监督学习的基本分类模型(KNN、决策树、朴素贝叶斯)

 ̄綄美尐妖づ 提交于 2020-02-12 19:33:28
K近邻分类器(KNN) KNN:通过计算待分类数据点,与已有数据集中的所有数据点的距离。取距离最小的前K个点,根据“少数服从多数“的原则,将这个数据点划分为出现次数最多的那个类别。 sklearn中的K近邻分类器 在sklearn库中,可以使用sklearn.neighbors.KNeighborsClassifier创建一个K近邻分类器,主要参数有: • n_neighbors:用于指定分类器中K的大小( 默认值为5,注意与kmeans的区别 ) • weights:设置选中的K个点对分类结果影响的权重( 默认值为平均权重“uniform”,可以选择“distance”代表越近的点权重越高,或者传入自己编写的以距离为参数的权重计算函数 ) • algorithm:设置用于计算临近点的方法,因为当数据量很大的情况下计算当前点和所有点的距离再选出最近的k各点,这个计算量是很费时的,所以( 选项中有ball_tree、kd_tree和brute,分别代表不同的寻找邻居的优化算法,默认值为auto,根据训练数据自动选择 ) K近邻分类器的使用 创建一组数据 X 和它对应的标签 y: >>> X = [[0], [1], [2], [3]] >>> y = [0, 0, 1, 1] 使用 import 语句导入 K 近邻分类器: >>> from sklearn.neighbors

集成学习之随机森林

蓝咒 提交于 2020-02-10 12:40:35
/*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ /*--> */ 随机森林的主要作用是降低模型的复杂度,解决模型的过拟合问题。 1、随机森林概述 ¶ 随机森林利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。 2、随机森林算法流程 ¶ 随机森林是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。其主要包括4个部分:随机选择样本;随机选择特征;构建决策树;随机森林投票分类。 随机森林的分类算法流程如下图: 1.样本选择 自助采样:假设训练数据集包含m个样本,随机从样本集中可放回的抽取m次,得到与训练集数量相同的训练集。经过K轮自助采样,可以得到K个包含m个训练样本的采样集。随机选择样本是有放回!!! 2.特征选择 在随机森林中,我们不计算所有特征的增益。如果每个特征的样本维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征。然后计算m个特征的增益,选择最优特征(属性)。若M=m,则与传统决策树相同,一般而言,推荐$m=\log_2{M}$或$m=\sqrt{M}$。随机选择特征是无放回!!! 3.决策树构建 基于随机采样后采样后的数据集进行多个决策树的构建