机器学习之决策树与随机森林

  • 目录
  • 1、了解熵、条件熵、互信息的概念及公式
    • 1.1、熵
    • 1.2、条件熵
    • 1.3、信息增益/互信息
  • 2、了解决策树
    • 2.1、了解决策树的概念和特点以及和熵的关系
    • 2.2、了解树生成的过程
    • 2.3、了解决策树三种算法的区别
    • 2.4、了解决策树的损失函数
    • 2.5、了解解决决策树过拟合的方法
    • 2.6、了解后剪枝的过程
  • 3、了解Bagging和随机森林
  • 4、掌握样本不均衡常用的处理方法
  • 5、随机森林算法常用参数详解

目录

1、了解熵、条件熵、互信息的概念及公式

1.1、熵

熵本身是描述事物的混乱程度的
决策树乃至随机森林最关键的一点就是如何来划分一个节点分裂数据让结果达到最好。
信息熵的作用(即判定特征分裂的好坏)
了解信息熵的表示形式(负号代表x发生的概率越大对应的熵值越小):
这里写图片描述

知道这个信息熵的概念(x发生的概率越大,结果越稳定对应的熵值也就越小;P(X,Y)=H(X)+H(Y)代表X、Y发生的事件的熵相加)

1.2、条件熵

知道条件熵的概念:H(Y|X)表示在X发生的前提下,Y发生新带来的熵。
这里写图片描述

1.3、信息增益/互信息

信息增益即为互信息,信息增益即为相关系数(计算一个特征对类X是否有影响)
信息增益:度量特征A对数据集D的不确定性的减小程度(即不确定减小也就是D发生概率增加)。
这里写图片描述

信息增益即为互信息,信息增益即为相关系数(计算一个特征对类X的影响程度)
信息增益:度量特征A对数据集D的不确定性的减小程度(即不确定减小也就是D发生概率增加)。
这里写图片描述

2、了解决策树

2.1、了解决策树的概念和特点以及和熵的关系

这里写图片描述
这里写图片描述
信息熵又称为经验熵,重点注意下面选取分裂特征的过程。

2.2、了解树生成的过程

树的生成过程:首先你能得到对应的数据集D的经验熵(即根节点的信息熵),之后遍历所有的特征,进行以下步骤:(前提条件是你肯定能得到数据集D的经验熵H(D)公式如下图)。
一、计算特征A对于数据集D的条件熵即H(D|A);
二、计算特征A的信息增益g(D,A)=H(D)-H(D|A);
三、选择信息增益最大的特征作为当前的分裂特征。(信息增益越大,也就说明D在A特征下发生的概率越大,也就说明D对应的信息熵越小。而树生成的过程即是从信息熵大的根节点到信息熵为0的叶子节点)
这里写图片描述

2.3、了解决策树三种算法的区别

这里写图片描述
这里写图片描述
知道gini系数(同信息增益一样也可以作为特征分析的依据)
这里写图片描述

2.4、了解决策树的损失函数

了解评价函数的意义:实际上就是每个叶子结点的熵值和对应的叶子结点上的数据量做一个乘积的加和(这里的N其实就是对H(t)做一个加权处理)
掌握损失函数(又称为评价函数)的表达式以及对应的含义(可不可以理解为:因为叶子节点代表分类的最终结果,那么叶子节点的熵值也就代表分类的好坏的程度,那么所有叶子节点的熵值的加权和也就代表整棵树分类的好坏程度)。
结论:损失函数越小即代表整体的熵值越小,整棵树越稳定,分类的效果越好。
这里写图片描述

2.5、了解解决决策树过拟合的方法

1、剪枝(过程见下文)
2、随机森林
了解剪枝的思路:即如何从Ti到Ti+1
这里写图片描述
了解修正后的损失函数的含义 :实质上就是添加了叶子节点的影响权重值
了解α的公式(C(r):单个根节点的评价函数值。C(R):子树的评价函数值。如下图所示)以及对应的求解过程
这里写图片描述

2.6、了解后剪枝的过程

一、先求出各个内部节点的α值,
二、然后将α值从小到大进行排列得到对应得树T0、T1…
三、按照这个顺序依次进行剪枝的操作直到剪到最后的根节点为止。
四、最终利用test集合去测试看那棵树的损失函数最小就选取哪棵树。

3、了解Bagging和随机森林

知道这个Bagging是什么
这里写图片描述
这里写图片描述
了解随机森林的建立过程
这里写图片描述
这里写图片描述
这里写图片描述

4、掌握样本不均衡常用的处理方法

1、A类随机欠采样:A类样本过多,可以通过随机采取A中的少部分(如20%)样本来和B中的样本汇总作为总的样本。
2、基于聚类的A类的分割:将A类样本进行一个聚类操作,然后随机的选取A中的任何一个类族和B一起构成一个总的样本。
3、B类过采样:B类数据太少,可以不断的复制B类的样本从而使B样本的数量增加满足A样本的要求。
4、B类数据合成:在空间中将两个B样本连接,随机在连线上选取某些点用于生成样本以达到增加样本B的数量的目的。(如下图所示)
5、代价敏感学习(降低A类权值,提高B类权值)
总结:1-4为对样本的处理,5对算法的处理。

5、随机森林算法常用参数详解

详见:https://blog.csdn.net/qq_16633405/article/details/61200502

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON(JavaScript Object Notation) 格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯。 json是 JavaScript Object Notation 的首字母缩写&…

synchronized 的理解

第一种:package com.ucmed.zsyy.util;/*** Created by ucmed on 2017/2/8.*/public class DirtyRead {private String username "zjkj";private String password "123";public synchronized void setValue(String username, String password)…

机器学习之提升算法

1、知道提升、梯度提升是什么意思1.1、提升1.2、梯度提升1.3、了解提升算法的过程 2、残差与残差平方和(residual sum of squares)3、了解GBDT算法4、了解XGBoost算法5、了解Adaboost算法5.1、Adaboost算法的原理5.2、例子 6、偏差和方差 1、知道提升、梯…

Jsoup遍历ul li下的链接信息实例

2019独角兽企业重金招聘Python工程师标准>>> Document doc;try {String URL "www.baidu.com";doc Jsoup.connect(URL).get();Elements ElementsUl doc.getElementsByTag("ul");for (Element elementLi : ElementsUl) {Elements provinceEl …

两篇波兰地区重金属污染地区土壤微生物多样性的研究

环境微生物(包括方兴未艾的肠道微生物)在不同的系统中发挥着的生态作用逐渐被意识到,我们对环境微生物实际上仍旧知之甚少,其多样性问题仍旧是一个非常基础和重要的课题。这次读的两篇文章都是关于波兰地区重金属污染地区的土壤微…

jquery中的 $(function(){})

$(function(){})的区别:$(function(){}) 是 $(document).ready(function(){}) 的简写,用来在DOM加载完成之后执行一系列预先定义好的函数。 需要注意与(function(){})相比,(function(){})表示一个匿名函数。function(arg){...}定义了一个参数…

机器学习之支持向量机(SVM)总结

文章目录1、知道SVM相关的各种概念2、知道目标函数、损失函数、正则项的意义2.1、目标函数2.2、损失函数2.3、正则化(添加噪音避免过拟合)3、了解SVM算法原理4、知道SVM的目标函数5、知道SVM的损失函数以及公式6、知道SVM支持向量机的计算过程6.1、推导过…

在CentOS上搭建PHP服务器环境

您也可以使用一键自动部署环境的工具,请参见网友开发的这个工具 http://www.centos.bz/2013/08/ezhttp-tutorial/安装apache:yum install httpd httpd-devel 启动apache:/etc/init.d/httpd start此时输入服务器的IP地址,应该看到apache的服务页面&#x…

jQuery之滚动事件$(window).scroll(function()

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>滚动事件</title><script src"https://code.jquery.com/jquery-2.2.4.min.js"></script><style>img{position:fixe…

《疯狂Java讲义》(二十九)---- JDBC

JDBC编程步骤加载数据库驱动Class.forName(driverClass). 例如&#xff1a;Class.forName("oracle.jdbc.driver.OracleDriver"); 2. 通过DriverManager获取数据库连接。 DriverManager.getConnection(String url, String user, String pwd); 3. 通过Connection对象创…

机器学习之聚类算法的原理推导及相关知识总结

文章目录1、知道几个关于"差"的概念2、理解相似度度量的各种方法和相互关系2.1、欧氏距离2.2、jaccard相似系数2.3、余弦相似度2.4、Pearson相似系数2.5、相对熵3、掌握掌握K-Means算法3.1、知道聚类的思想3.2、K-Means算法原理3.3、知道K-Mediods聚类3.4、如何选取K…

Flex 布局教程:语法

Java数组声明的三种方式 第一种(声明并初始化)&#xff1a; 数据类型[] 数组名{值,值,...}; 例&#xff1a;int[] a {1,2,3,4,5,6,7,8}; 第二种(声明后赋值)&#xff1a; 数据类型[] 数组名 new 数据类型[数组长度]; 数组名[下标1]值…

注意:匿名函数调用直接加载函数名setInterval(move,30)

setInterval要求第一个参数必须是含Javascript命令的字符串或函数对象&#xff0c;所以 setInterval("move()",300) 以及 setInterval(move,300) 这两个都是正确的。 而 setInterval(move(),300) 当Javascript运行到这个语句时&#xff0c;会立即执行move这个函数&am…

vue import组件的使用

vue import组件的使用 1新建/src/component/firstcomponent.vue <template><div id"firstcomponent"><h1>I am a title.</h1></div> </template>2在app.vue引入组件 并且注册 <script> import firstcomponent from ./comp…

牵丝戏

余少能视鬼&#xff0c;尝于雪夜野寺逢一提傀儡翁&#xff0c;鹤发褴褛&#xff0c;唯持一木偶制作极精&#xff0c;宛如娇女&#xff0c;绘珠泪盈睫&#xff0c;惹人见怜。 时云彤雪狂&#xff0c;二人比肩向火&#xff0c;翁自述曰&#xff1a;少时好观牵丝戏&#xff0c;耽…

机器学习之EM算法的原理推导及相关知识总结

文章目录1、知道先验概率和后验概率2、了解高斯混合模型GMM3、通过最大似然估计推导EM算法的过程的实例4、EM算法5、知道pLSA模型1、知道先验概率和后验概率 先验概率&#xff08;prior probability&#xff09;是指根据以往经验和分析得到的概率&#xff08;理解为自定义概率…

jQuery中的on 和事件委派

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件</title><style>p{width:100px;height:100px;border: 1px solid gray;}</style><script src"https://code.jquery.com/…

python pip处理

查看pip 版本号 pip --version 升级方法 on linux or os X: pip install -U pip on windows: python -m pip install -U pip 转载于:https://www.cnblogs.com/yangwithtao/p/6397114.html

js中innerHTML和innerText jQuery中html()和text()的区别

js中innerHTML和innerText的区别innerHTML innerHTML 会将标签和标签中的内容否获取回来 innerHTML .innerHTML ‘<p></p>’; 只会将文本内容解析出来&#xff0c;不会显示标签innerText innerText 只会将标签中的内容获取回来&#xff0c;不会获取标签 innerT…

ECMAScript 6 -- let和const命令

ES6新增了let命令&#xff0c;用来声明变量。它的用法类似于var&#xff0c;但是所声明的变量&#xff0c;只在let命令所在的代码块内有效。 for (let i 0; i < 10; i) {console.log(i);} 可以执行 for (let i 0; i < 10; i) {}console.log(i); 就会报错 ncaught Refer…