机器学习的练功方式(八)——随机森林

文章目录

    • 致谢
  • 8 随机森林
    • 8.1 引入
    • 8.2 决策森林
      • 8.2.1 集成学习方法
      • 8.2.2 什么是随机森林
      • 8.2.3 无偏估计
      • 8.2.4 决策森林原理过程
      • 8.2.5 决策森林算法实现
    • 8.3 总结

致谢

如何理解无偏估计?无偏估计有什么用?什么是无偏估计?_@司南牧|知乎|博客|易懂教程|李韬-CSDN博客_无偏估计

无偏估计【统计学-通俗解释】_guomutian911的专栏-CSDN博客_自由度和无偏估计

8 随机森林

随机森林也叫决策森林。

在下面的小节中,我们会引入一个例子,来看看什么是随机森林,以及决策树为什么会过拟合。

8.1 引入

假如有一个男人,15岁到25岁之间,住在美国,有安卓手机,还在学校读书。喜欢网球和披萨,但不喜欢长时间在沙滩上长散步,那么他很可能下载pokemon go这个软件。

image-20220310180235492

这种做法很不理想,看起来像是在记忆数据,这种情况称为过拟合。决策树经常会过拟合,如果我们选用连续特征也会出现这种问题。决策树有许多节点,它最终会呈现给我们很多个几乎用点相接的小方块。

换而言之,如果不设置特征信息增益的下限,则可能会使得每个叶子都只有一个样本点,从而划分地太细。即一个样本就是一类。

像下图如此,这种分法一般对数据不具备普适性。

image-20220310180406494

那我们应该如何解决这类问题呢?

我们可以随机从数据中挑选几列,并且根据这些列来构建决策树,就这样我们能构建很多决策树,当我们有一个新的预测时,我们就只需让所有的决策树做出预测,并且选取结果中显示最多的即可,这种方法称为决策森林

image-20220310180509782

8.2 决策森林

8.2.1 集成学习方法

如果你不是很能听懂我上面的话,没关系,在下面有更多能让你听懂的例子。而在讲述随机森林之前,我们需要先知道什么是集成学习方法。

集成学习方法是通过建立几个模型组合的来解决单一预测问题,它的工作原理是生成多个分类器/模型,各自独立地学习和做出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。如同我们上面8.1小节所说,明显地,随机森林就是一种集成学习方法。

集成学习方法大多数分为两种,baggingboosting。对了,bagging和包包没有关系,它指的是自动聚集。

假设我们现在要做一个测试。我们要做判断题,但是对于做完的选择题答案我们不是很确定,为此,我们找来了许多伙伴;我们从诸多伙伴中一个一个轮流来做这一份选择题。当所有的小伙伴做完这份选择题后,我们把所有的答案集成起来。

如何集成这些答案是一个问题。我们可以采取把所有答案列出来,对于某些题目,有些小伙伴选择对有些小伙伴选择错误。我们比对所有的小伙伴,看看是对的多还是错的多,谁多选谁。这样的话,就类似于雅典城邦的投票选举,我们集各家之长做的题目答案准确率肯定比自己一个人埋头苦干要高得多。

boosting实际上也是在做这么一件事,不过,它会进一步地汲取朋友们的智慧。

假如这份判断题中有很多类型的题目,有政治的有科学的。那么其会从你的小伙伴们挑选出对特定知识了解的相关人物,由它们来解决特定的题目准确率可以进一步提高。

image-20220322133944192

在以上的例子中,我们单个小伙伴叫做弱学习器,而把小伙伴们叫做强学习器。当然弱学习器并不是真的弱,只是相对于强学习器来说的罢了。

8.2.2 什么是随机森林

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

如下图所示:假如你将一个训练集随机选取五份,即训练了五个决策树分类器,其中四个决策树分类器结果为true,一个决策树分类器结果为false,那么则取大多数人同意的那个结果,即true。

image-20220311092003438

但是其实还有比随机选取列更好的方法。比如说剪枝。但是我们在这一小节暂时先不讲,后面我如果不懒就会提到。

8.2.3 无偏估计

在继续下面的讲解中,我们需要先谈谈无偏估计。而无偏估计与之相对的就是有偏估计。顾名思义,无偏估计就是没有偏差的估计。我们引入一个例子:

假如现在我们要从全市的小学统计出所有小学生数学成绩的平均值。你想想,全市的小学生啊,这是多么庞大的数量,在统计学中,不能全部统计的我们通常会采用抽样统计。即抽取少部分样本,以少部分样本的结果来代替全局结果。

试想,如果你从全市的小学生中随机抽取50个小学生,然后统计50个小学生的平均值。明显地,这具有随机性,用来代替全局结果并不过分,但是明显地,全局结果肯定不会和局部结果相等,这和你抽取的手气有关,说不定你抽到的刚好就是全市学习最差的那几个小学生呢。

上述的过程中实际上出现一个问题。我们每次抽取一个小学生的成绩后是否放回总样本中。如果放回,则说明你的局部样本平均数是总体样本平均数的无偏估计。因为你采用这种方法估算,估算的期望值并没有系统上的误差,无偏估计的误差来源于随机因素;但是,如果你采取不放回,这说明当你抽取多个样本时,如果恰好被你抽走了一些差的,那么剩下的那些肯定是好的,你计算这样的局部概率有意思吗?这样的概率能拿来代替全局概率吗?

8.2.4 决策森林原理过程

在8.2.2中我们提到了随机,那么随机到底怎么个随机法?在决策森林中,我们通常采用BootStrap抽样(随机有放回抽样),如8.2.3所说,我们之所以选择这种抽样,是为了保持局部决策树的无偏估计性,保证每个决策树做出的决策都是公平的,而不会出现有偏。

在随机森林随机时,对于训练集,我们要保证做到BootStrap抽象。对于特征,我们要从M个特征中随机抽取m个特征,且M>>m,这样的好处是可以起到降维的效果。

8.2.5 决策森林算法实现

说完上述原理,我们来看一下如何实现随机森林。

sklearn.ensemble.RandomForestClassifier(n_estimators = 10,criterion = ‘gini’,max_depth = None,bootstrap = True,random_state = None,min_samples_split = 2)

  • 随机森林分类器
  • n_estimators:整数类型,指森林里的树木数量,默认为10。通常为120,200,300,500,800,1200。
  • criterion:字符串类型,默认基尼系数’gini’,你也可以换成熵。
  • max_depth:整数类型,默认None,用于指定树的最大深度。通常为5,8,15,25,30。
  • max_features :字符串类型,每个决策树的最大特征数量,有’auto’,‘sqrt’,‘log2’,'None’四种选择。
  • bootstrap:布尔类型,默认开启,指是否在构建森林时使用返回抽样
  • min_samples_split:结点划分最少样本数
  • min_samples_leaf:叶子结点的最小样本数。
  • 其中n_estimator,max_depth,min_samples_split,min_samples_leaf可以使用超参数网格搜索进行调参。

下面让我们那鸢尾花开刀试一下。

# 导入模块
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCVdef decision_iris():"""随机森林算法"""# 1 获取数据集iris = load_iris()x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=4)# 2 预估器实例化estimator = RandomForestClassifier(criterion="entropy")# 3 指定超参数集合param_dict = {"n_estimators": [120, 200, 300, 500, 800, 1200], "max_depth": [5, 8, 15, 25, 30]}# 4 加入超参数网格搜索和交叉验证estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)# 5 训练数据集estimator.fit(x_train, y_train)# 6 模型评估y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接对比真实值和预测值:\n", y_test == y_predict)score = estimator.score(x_test, y_test)print("准确率为:\n", score)decision_iris()

跑出来有点久。。我的垃圾电脑就跑个150数据集10折交叉跑了一分钟。。你们CPU好的和有GPU的加油。。。没事别搞太大的数据集指定太大的交叉验证的折数,不然等下电脑冒烟了别找我。

8.3 总结

在当前的所有算法中,随机森林是具有极好的准确率的,但是根据没有免费午餐定理,我们只是说他是个好算法而已,不是最好的。

随机森林能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且还不需要降维,你特征切多点就相当于降维了。而且通过这个算法你还能评估各个特征在分类问题上的重要性。

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

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

相关文章

E20180219-hm-xa

comparison n. 比较,对照; [语] 比喻; 比较级; conjunction n. 连接; 连词; 联合,结合物; (恒星、行星等的) 合; [例句] assignment n. 分给,分配; 任务,工作,(课外)作…

这是我看过最精彩的回答

或许我没见过世面,但是这却是我看过对“怎么成为一个优秀的程序员,而不是一个优秀的码农?”最精彩的回答【全部复制粘贴】 其实我的心一直因为现在的工作【餐饮服务】而动摇,忽而想学网站,忽而c语言根基,忽…

免费LInux主机资源

一、m-net.arbornet.org注冊 (1)telnet m-net.arbornet.org vista系统默认是关闭telnet的(由于不安全),须要开启。cmd->telnet(2)login:newuser password: (3) ssh m-net.arbornet.org vi的…

并行计算(一)——并行计算机系统及结构模型

致谢 SMP、COW、PVP、MPP计算机相关_神.秘.人的博客-CSDN博客_并行向量处理机 1 并行计算机系统及结构模型 1.1 并行计算 在下面的讲解之前,我们先看一下并行计算的量纲。 1.1.1 并行计算和计算机科学 随着计算机和计算机学科的发展,所有的学科都转向…

十、input与跳转

1.在loginAction&#xff0c;新增result <action name"LoginAction" method"login" class"com.myz.action.LoginAction"><!-- result不配置name表示默认为success,配置了name值则将与action中返回的字符串对应 --><result>/lo…

【机器学习实战】极大似然法

2019独角兽企业重金招聘Python工程师标准>>> http://baike.baidu.com/link?url3Ej1VIItwWd35sXeoRWRhcJkJLCFvzPzNIoTkAfai8ZIS4Ppcch4_maQ25FjNCU1Eplsp4k3oPKLyv6VIsPhsq 一、 最大似然法是一种具有理论性的点估计法&#xff0c;基本思想是&#xff0c;当从模型…

自定义配置节与配置节的读取

一、引子你是否也遇到过这样的问题&#xff1a;项目很多配置都写到了App.Config或Web.Config的AppSettings内&#xff0c;每个人都加了几条&#xff0c;到最后囤积了大量的配置&#xff0c;分不清哪个是有用的、哪个是没用的了。&#xff08;即便加了相关注释&#xff0c;也是乱…

机器学习的练功方式(九)——线性回归

文章目录致谢9 线性回归再相遇9.1 再遇9.1.1 概述9.1.2 矩阵和向量9.1.3 矩阵加减乘除9.1.3.1 矩阵——矩阵加减9.1.3.2 矩阵——标量加减乘9.1.3.3 矩阵——向量相乘9.1.3.4 矩阵——矩阵相乘9.1.3.5 矩阵的逆9.1.3.6 矩阵的转置9.1.4 向量化9.1.5 广义线性模型9.2 正规方程9.…

vsftp服务器搭建

1.FTP的主动模式和被动模式的区别&#xff1a; 最大的区别是数据端口并不总是20&#xff0c; 主动模式和被动模式的优缺点&#xff1a; 主动FTP对FTP服务器的管理和安全很有利&#xff0c;但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接&#xff0c;而…

12个月份统计分组

/** 根据月份来统计trade里面的入账&#xff0c;支出&#xff0c;总盈利*/public function countMonth(){$in array();$out array();$res array();$year date("Y",time());$in_sql SELECT SUM(money) AS mon, FROM_UNIXTIME(cdate, "%m") AS m FR…

深度学习修炼(一)——从机器学习转向深度学习

文章目录1 转变1.1 前言1.2 基本元素1.2.1 张量1.2.2 创建张量1.2.3 操纵张量1.2.3.1 张量乘法1.2.3.2 哈达玛积1.2.3.3 降维1.2.3.4 转置1.2.3.5 范数1.2.3.6 拼接张量1.2.4 张量属性1.2.5 张量和Numpy1.2.5.1 张量变Numpy1.2.5.2 Numpy变张量1.3 后话1 转变 1.1 前言 在之前…

idea 调试技巧1

1 多线程调试 开发过多线程应用的朋友应该有体会&#xff0c;有些时候&#xff0c;为了观察多个线程间变量的不同状态&#xff0c;以及锁的获取等&#xff0c;就会想到在代码里加个断点debug一下。 在IDE里断点停下来的时候&#xff0c;可以切换到另外的线程中&#xff0c;跑其…

SQL server 复习一

第一天 下面我们从最基础的开始&#xff1a; 在运行里面输入:services.msc 一、启动服务 二、数据库登录的两种身份验证方式 另外一种身份验证方式就是SQL Server身份验证. sa不能使用的时候可以这样的操作&#xff1a; 1.用windows登录&#xff0c;然后在“实例”右键“属性”…

[分享]iOS开发-实现view底部控件随着键盘的弹出而上移的效果

首先说一下思路&#xff1a;想要达到底部控件随着键盘的弹出而上移的效果&#xff0c;那么我们必然需要的到键盘在弹出时的高度&#xff0c;以及原点坐标。说白了我们的大致思路就是&#xff0c;用view的高度&#xff0d;键盘弹出时的高度&#xff0c;得到的值就是底部控件与vi…

深度学习修炼(二)——数据集的加载

文章目录致谢2 数据集的加载2.1 框架数据集的加载2.2 自定义数据集2.3 准备数据以进行数据加载器训练致谢 Pytorch自带数据集介绍_godblesstao的博客-CSDN博客_pytorch自带数据集 2 数据集的加载 与sklearn中的datasets自带数据集类似&#xff0c;pytorch框架也为我们提供了数…

Node.js 函数

在JavaScript中&#xff0c;一个函数可以作为另一个函数接收一个参数。我们可以先定义一个函数&#xff0c;然后传递&#xff0c;也可以在传递参数的地方直接定义函数。 Node.js中函数的使用与Javascript类似&#xff0c;举例来说&#xff0c;你可以这样做&#xff1a; functio…

在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式

【原文地址】Using Repository and Unit of Work patterns with Entity Framework 4.0 【原文发表日期】 16 June 09 04:08 PM 如果你一直在关注这个博客的话&#xff0c;你知道我最近在讨论我们加到Entity Framework 4.0中的POCO功能的方方面面&#xff0c;新加的POCO支持促成…

Css3之基础-5 Css 背景、渐变属性

一、CSS 背景概述背景属性的作用- 背景样式可以控制 HTML 元素的背景颜色、背景图像等 - 背景色- 设置单一的颜色作为背景- 背景图像- 以图片作为背景- 可以设置图像的位置、平铺、尺寸等二、CSS 背景属性背景色 background-color - 属性用于为元素设置背景色- 接受任何合法的颜…

[Angularjs]锚点操作服务$anchorScroll

写在前面 有个单页应用的项目中&#xff0c;需要通过锚点进行页面的定位。但angularjs的路由会出现跟锚点冲突&#xff0c;angularjs会将锚点当成路由进行解析&#xff0c;造成跳转到这个页面&#xff0c;而我们需要的只是跳转到当前的锚点位置。angularjs的路由格式#/home/en。…

机器学习的练功方式(十)——岭回归

文章目录十 岭回归10.1 岭回归的接口10.2 岭回归处理房价预测十 岭回归 岭回归是线性回归的改进&#xff0c;有时候迫不得已我们的参数确实不能少&#xff0c;这时候过拟合的现象就可能发生。为了避免过拟合现象的发生&#xff0c;既然不能从减少参数上面下手&#xff0c;那我…