[sklearn] 决策树、随机森林、隐马尔可夫模型
决策树
决策树(Decision Tree)是一种用于处理分类和回归问题的无监督学习算法。如下图所示为某女青年在某相亲网站的相亲决策图。这幅图描述的都是一个非常典型的决策树模型。
通过对其相亲决策的分析,假设其相亲信息如下所示:
该女青年相亲决策主要考虑到因素有年龄,身高,年收入,学历。同事由该女青年的相亲决策图可以看到,相亲决策树以年龄与35岁相比作为树根。但是其他的数据项也能做树根。因此选择合适的数据项作为树根十分重要。在决策树中由信息增益确定树根。
信息增益
在提出信息增益前,需要对理解信息熵(香农熵,information entropy)这个概念。信息熵(entropy)描述整个体系的混乱程度,熵越大,体系混乱程度越大。例如火柴有序的放在火柴盒子里,则熵值很低,反之,熵值很高。
整个体系的信息熵的计算公式如下:
$$Info=-\sum_{i=1}^{m}p_{i}log_{2}p_{i}$$
其中m表示最后决策的种类。前面女青年相亲的例子,最后决策分为相亲和不相亲,则m=2。其中Y(相亲)概率为7/12,
N(不相亲)概率为5/12。信息熵为:
$$Info=-\left(\frac{7}{12}log_{2}\frac{7}{12}+\frac{5}{12}log_{2}\frac{5}{12}\right )=0.98 bit$$
树根的选择十分重要。选择树根的原则首先确定最佳因素如确定为年龄,然后再确定分割节点如确定年龄为35岁为分割节点,分割后获得两棵子树。然后根据其他因素选择树根,再次对所获得的两棵子树分割。通过熵来评价分割结果,当熵越大,则接下分割难度越大,分割次数越多;熵越小则分割难度越小,分割次数越小。这个划分规则下以某因素A来划分,所得划分熵如下:
$$Info_{A}=-\sum_{j=1}^{v}p_{j}\cdot Info(A_{j})$$
上式中v表示所选因素A一共有多少组,如A为学历时v=3。\(P_(j)\)表示这种分组所占比重。如学历有可以被划分为3组,大专、本科、硕士。则当所选因素为A时,信息熵为:
最后求的近似值\(Info_{A}=0.872\)
对于信息增益,前后的信息熵变化值为信息增益。信息增益越大表明分割效果越好。对于以学历为分割因素时的信息增益如下:
sklearn实现
sklearn中对应的函数DecisionTreeClassifier函数(分类),DecisionTreeRegressor(回归),分类代码如下
from sklearn import tree
import numpy as np
#年龄,身高,年收入,学历(大专:0,本科:1,硕士:2)
X = np.array(
[[25, 179, 15, 0],
[33, 190, 19 ,0],
[28, 180, 18, 2],
[25, 178, 18, 2],
[46, 100, 100, 2],
[40, 170, 170, 1],
[34, 174, 20, 2],
[36, 181, 55, 1],
[35, 170, 25, 2],
[30, 180, 35, 1],
[28, 174, 30, 1],
[29, 176, 36, 1]])
#0表示没有相亲,1表示相亲
y= [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]
clf = tree.DecisionTreeClassifier().fit(X, y)
p=[[28, 180, 18, 2]]
print(clf.predict(p)) #[1]
函数其他参数改动可参考官网文档:
http://scikit-learn.org/stable/modules/tree.html#tree-classification
另外可以将sklearn所生成的决策可视化,具体参考链接:
随机森林
随机森林(Random Forest)是一个构建决策树的过程,目标是构建许多棵决策树。随机森林会为一个训练集根据不同的因素构建若干棵决策,每棵树的层级都比较浅。对新样本进行分类判断时候会同时对这些决策树进行分类概率判断,最后进行投票,哪个类别多,输入的样本就属于哪个类别。其分类方式也就是通过若干个分类器进行组合集成学习。
sklearn实现
sklearn中对应的函数RadomForestClassifier函数(分类),RadomForestRegressor(回归),分类代码如下
from sklearn.ensemble import RandomForestClassifier
import numpy as np
#年龄,身高,年收入,学历(大专:0,本科:1,硕士:2)
X = np.array(
[[25, 179, 15, 0],
[33, 190, 19 ,0],
[28, 180, 18, 2],
[25, 178, 18, 2],
[46, 100, 100, 2],
[40, 170, 170, 1],
[34, 174, 20, 2],
[36, 181, 55, 1],
[35, 170, 25, 2],
[30, 180, 35, 1],
[28, 174, 30, 1],
[29, 176, 36, 1]])
#0表示没有相亲,1表示相亲
y= [0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1]
clf =RandomForestClassifier().fit(X, y)
p=[[28, 180, 18, 2]]
print(clf.predict(p)) #[1]
函数 其他参数改动可参考官网文档:
http://scikit-learn.org/stable/modules/ensemble.html#random-forests
隐马尔可夫模型
隐马尔可夫模型和贝叶斯信念网络的模型思维方式比较接近。区别在于隐马尔可夫模型更简单,也可以说隐马尔可夫模型是贝叶斯信念网络的一种特例。但是sklearn中没有实现隐马尔可夫模型的函数库。
隐马尔可夫模型理论见文档:如何用简单易懂的例子解释隐马尔可夫模型? - Yang Eninala的回答 - 知乎
在IPython Notebook有隐马尔可夫模型的实现,具体见:
https://github.com/hmmlearn/hmmlearn
[sklearn] 决策树、随机森林、隐马尔可夫模型的更多相关文章
- HMM隐马尔可夫模型来龙去脉(一)
目录 隐马尔可夫模型HMM学习导航 一.认识贝叶斯网络 1.概念原理介绍 2.举例解析 二.马尔可夫模型 1.概念原理介绍 2.举例解析 三.隐马尔可夫模型 1.概念原理介绍 2.举例解析 四.隐马尔 ...
- [综]隐马尔可夫模型Hidden Markov Model (HMM)
http://www.zhihu.com/question/20962240 Yang Eninala杜克大学 生物化学博士 线性代数 收录于 编辑推荐 •2216 人赞同 ×××××11月22日已更 ...
- 隐马尔科夫模型HMM学习最佳范例
谷歌路过这个专门介绍HMM及其相关算法的主页:http://rrurl.cn/vAgKhh 里面图文并茂动感十足,写得通俗易懂,可以说是介绍HMM很好的范例了.一个名为52nlp的博主(google ...
- HMM隐马尔科夫模型
这是一个非常重要的模型,凡是学统计学.机器学习.数据挖掘的人都应该彻底搞懂. python包: hmmlearn 0.2.0 https://github.com/hmmlearn/hmmlearn ...
- 猪猪的机器学习笔记(十七)隐马尔科夫模型HMM
隐马尔科夫模型HMM 作者:樱花猪 摘要: 本文为七月算法(julyedu.com)12月机器学习第十七次课在线笔记.隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来 ...
- 隐马尔科夫模型(HMM)及事实上现
马尔科夫模型 马尔科夫模型是单重随机过程,是一个2元组:(S,A). 当中S是状态集合,A是状态转移矩阵. 仅仅用状态转移来描写叙述随机过程. 马尔科夫模型的2个如果 有限历史性如果:t+l时刻系统状 ...
- 【整理】图解隐马尔可夫模型(HMM)
写在前面 最近在写论文过程中,研究了一些关于概率统计的算法,也从网上收集了不少资料,在此整理一下与各位朋友分享. 隐马尔可夫模型,简称HMM(Hidden Markov Model), 是一种基于概率 ...
- 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法 ...
- NLP —— 图模型(一)隐马尔可夫模型(Hidden Markov model,HMM)
本文简单整理了以下内容: (一)贝叶斯网(Bayesian networks,有向图模型)简单回顾 (二)隐马尔可夫模型(Hidden Markov model,HMM) 写着写着还是写成了很规整的样 ...
随机推荐
- Windows活动目录_票据——敬请期待!
票据:域控&域机子之间的信任密钥 [缺省40天更换一次] 域用户登录过程 域用户的账户密码(用信任密钥加密的)传递至域控: 域控验证账户密码成功后,构造域用户SID和组SID(用信任密钥加密的 ...
- 11.mixins混合类
一.混合类(mixins) 使用基于类的视图,最大的优势之一就创建可复用的代码 我们编写的非常类似的代码,可以抽象出来,将这部分代码放到mixin类系列中,然后作为父类提供子类继承使用 from ...
- AI带你省钱旅游!精准预测民宿房源价格!
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- centos7离线安装PHP7
环境 centos7.9 PHP7.4.30 准备工作 在编译PHP时会提示一些包版本不够或者缺少某些包,一般选择yum来安装缺少的包,但因为是离线安装,所以可以手动配置本地yum源.先看一下系统版本 ...
- VUE2 学习(推荐直接学习VUE3)
概念区分: 前端框架:Vue.AngularJS.React 界面模板:Bootstrap.easyUI.adminlte 学习地址: b站:https://space.bilibili.com/39 ...
- DevOps 必备的 Kubernetes 安全清单
Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群.然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏 ...
- Go语言核心36讲20
在上两篇文章中,我主要为你讲解了与go语句.goroutine和Go语言调度器有关的知识和技法. 内容很多,你不用急于完全消化,可以在编程实践过程中逐步理解和感悟,争取夯实它们. 现在,让我们暂时走下 ...
- day01-计算机的本质
计算机的本质 计算机又称为"电脑": 通电的大脑 意味着我们人类希望计算机通电之后可以跟人脑一样思考问题.解决问题 计算机存储数据的本质 计算机是基于电工作,而电信号只有高低电平两 ...
- 【图像处理笔记】SIFT算法原理与源码分析
[图像处理笔记]总目录 0 引言 特征提取就是从图像中提取显著并且具有可区分性和可匹配性的点结构.常见的点结构一般为图像内容中的角点.交叉点.闭合区域中心点等具有一定物理结构的点,而提取点结构的一般思 ...
- ArcEngine 序列化AO对象
ArcEngine中只要是继承了IPersistStream接口的对象均可调用ArcEngine中的类库进行序列化和反序列化.一般我们会序列化成xml格式,作为字符串存储,需要的时候,反序列化为对象. ...