随机森林

article/2025/10/13 15:36:30
随机森林-----集成算法之一,分类,回归和特征选择
算法步骤:
    1.用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集
    2.用抽样得到的样本集生成一棵决策树。在生成的每一个结点:
        1.随机不重复地选择d个特征
        2.利用这d个特征分别对样本集进行划分,找到最佳的划分特征(可用基尼系数、增益率或者信息增益判别)
    3.重复步骤1到步骤2共k次,k即为随机森林中决策树的个数。
    4.用训练得到的随机森林对测试样本进行预测,并用票选法决定预测的结果。
优点:
   1) 每棵树都选择部分样本及部分特征,一定程度避免过拟合;
   2) 每棵树随机选择样本并随机选择特征,使得具有很好的抗噪能力,性能稳定;
   3) 能处理很高维度的数据,并且不用做特征选择;
   4) 适合并行计算;
   5) 实现比较简单;
   6) 对部分特征缺失不敏感。
缺点:
   1) 参数较复杂;
   2) 模型训练和预测都比较慢;  
  
在 sklearn中,随机森林的函数模型是:  
   RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=None, max_features='auto', max_leaf_nodes=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
            oob_score=False, random_state=None, verbose=0,
            warm_start=False)
A. max_features:随机森林允许单个决策树使用特征的最大数量  
   Auto/None :简单地选取所有特征,每颗树都可以利用他们。这种情况下,每颗树都没有任何的限制。
   sqrt :此选项是每颗子树可以利用总特征数的平方根个。 例如,如果变量(特征)的总数是100,所以每颗子树只能取其中的10个。“log2”是另一种相似类型的选项。
   0.2:此选项允许每个随机森林的子树可以利用变量(特征)数的20%。如果想考察的特征x%的作用, 我们可以使用“0.X”的格式。   
B. n_estimators: 在利用最大投票数或平均值来预测之前,你想要建立子树的数量  
C. min_sample_leaf: 如果您以前编写过一个决策树,你能体会到最小样本叶片大小的重要性。 叶是决策树的末端节点。 较小的叶子使模型更容易捕捉训练数据中的噪声。 一般来说,我更偏向于将最小叶子节点数目设置为大于50。在你自己的情况中,你应该尽量尝试多种叶子大小种类,以找到最优的那个。  

适用情景:
    数据维度相对低(几十维),同时对准确性有较高要求时。
 因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

面试经典问题:  
    随机森林为什么不容易产生过拟合的现象?   因为随机森林的随机性。
 随机森林的随机性表现在哪里?   随机森林的随机性体现在每颗树的训练样本是随机的,树中每个节点的分裂属性集合也是随机选择确定的。
 随机森林与决策树的关系?  随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决策树之间是没有关联的。  
    随机森林的优缺点和适用情景?

特征选择: 
   提供了两种特征选择的方法:平均不纯度减少 mean decrease impurity 和 平均精确率减少 mean decrease accuracy。  
1)平均不纯度减少     
   随机森林由多个决策树构成。决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二。利用不纯度可以确定节点(最优条件),对于分类问题,通常采用 基尼不纯度 或者 信息增益 ,对于回归问题,通常采用的是 方差 或者最小二乘拟合。当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的值。                     
python实现:  
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import numpy as np
#Load boston housing dataset as an example
boston = load_boston()
X = boston["data"]
Y = boston["target"]
names = boston["feature_names"]
rf = RandomForestRegressor()
rf.fit(X, Y)
print "Features sorted by their score:"
print sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names),
             reverse=True)
  
2)平均精确率减少  
    直接度量每个特征对模型精确率的影响。主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。很明显,对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大,但是对于重要的变量来说,打乱顺序就会降低模型的精确率。
from sklearn.cross_validation import ShuffleSplit
from sklearn.metrics import r2_score
from collections import defaultdict
X = boston["data"]
Y = boston["target"]
rf = RandomForestRegressor()
scores = defaultdict(list)
#crossvalidate the scores on a number of different random splits of the data
for train_idx, test_idx in ShuffleSplit(len(X), 100, .3):
  X_train, X_test = X[train_idx], X[test_idx]
  Y_train, Y_test = Y[train_idx], Y[test_idx]
  r = rf.fit(X_train, Y_train)
  acc = r2_score(Y_test, rf.predict(X_test))
  for i in range(X.shape[1]):
    X_t = X_test.copy()
    np.random.shuffle(X_t[:, i])
    shuff_acc = r2_score(Y_test, rf.predict(X_t))
    scores[names[i]].append((acc-shuff_acc)/acc)
print "Features sorted by their score:"
print sorted([(round(np.mean(score), 4), feat) for
        feat, score in scores.items()], reverse=True)
  
  
  
  
  
  
  
  
  
  
  
  
  
  

http://chatgpt.dhexx.cn/article/eN21oQ0O.shtml

相关文章

随机森林(Random Forest)简单介绍

文章目录 随机森林(Random Forest)简单介绍1. 介绍2. 工作原理2.1 随机森林的基本原理2.1.1 随机采样2.1.2. 随机选特征2.1.3. 多数表决 2.2 随机森林的建模过程2.2.1. 建立多颗决策树2.2.2. 特征随机选择2.2.3. 样本随机选择2.2.4. 决策树训练与生成2.2…

什么是随机森林?

什么是随机森林? 随机森林是一种有监督的机器学习算法。由于其准确性,简单性和灵活性,它已成为最常用的一种算法。事实上,它可以用于分类和回归任务,再加上其非线性特性,使其能够高度适应各种数据和情况。 …

[Machine Learning Algorithm] 随机森林(Random Forest)

1 什么是随机森林? 作为新兴起的、高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。最初,我是在参加校…

随机森林算法

随机森林 1.1定义1.2随机森林的随机性体现的方面1.3 随机森林的重要作用1.4 随机森林的构建过程1.5 随机森林的优缺点2. 随机森林参数描述3. 分类随机森林的代码实现 1.1定义 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法。随机森林非常简单&…

机器学习-随机森林(RandomForest)详解

1.什么是随机森林 随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。 解读下上面的话: 1.随机森林属于集成算法&a…

机器学习之MATLAB代码--随机森林(一)

代码: %% 初始化数据 clc clear close all %% 导入数据 data xlsread(数据集.xlsx,Sheet1,A1:F100);%导入数据库%% 划分训练集和测试集 TE randperm(100);%将数据打乱,重新排序;PN data(TE(1: 80), 1: 5);%划分训练集输入 TN data(TE(1…

sklearn基础篇(七)-- 随机森林(Random forest)

上一节我们提到决策树的一个主要缺点在于经常对训练数据过拟合。随机森林是解决这个问题的一种方法。随机森林是属于集成学习,其核心思想就是集成多个弱分类器以达到一个强分类器的效果。 1 bagging的原理 随机森林采用Bagging的思想,所谓的Bagging可以…

机器学习5—分类算法之随机森林(Random Forest)

随机森林(Random Forest) 前言一、随机森林1.什么是随机森林2.随机森林的特点3.随机森林的生成 二、随机森林的函数模型三、随机森林算法实现1.数据的读取2.数据的清洗和填充3.数据的划分4.代码的实现 总结 前言 随机森林(Random Forest&…

随机森林(Random Forest)通俗教程

目录 1 什么是随机森林?2 随机森林的特点3 随机森林的相关基础知识4 随机森林的生成5 袋外错误率(oob error)6 随机森林工作原理解释的一个简单例子7 随机森林的Python实现8 参考内容 1 什么是随机森林? 作为新兴起的、高度灵活的…

机器学习算法系列(十八)-随机森林算法(Random Forest Algorithm)

阅读本文需要的背景知识点:决策树学习算法、一丢丢编程知识 最近笔者做了一个基于人工智能实现音乐转谱和人声分离功能的在线应用——反谱(Serocs),感兴趣的读者欢迎试用与分享,感谢您的支持!serocs.cn 一…

使用jvisualvm通过JMX的方式远程监控JVM的运行情况

公众号,欢迎关注 使用jvisualvm通过JMX的方式远程监控JVM的运行情况,步骤如下 远程服务器的配置 在启动java程序时加上如下几个参数 -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.sslfalse-Dcom.sun.management.jmxremote.authen…

JDK 中 jvisualvm 没有 VisualGC

1、图片描述问题 2、解决方法 (1)点击菜单栏中 工具 > 插件 (2)点击 可用插件 > 检查最新版本 出现如下情况表示不成功。 (3)点击 设置 > 编辑 链接: https://visualvm.github.io/…

JVisualVM 的使用教程

欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 一、简介 Java VisualVM 是一个直观的图形用户界面,基于Java 的应用程序,在给定的 Java 虚拟机&#xf…

使用jvisualvm、jmc远程监控JVM

演示环境:jdk1.8 jvisualvm和jmc都是JDK自带的监控工具。jmc监控数据比jvisualvm更加丰富。它们都在JDK bin目录中 首先介绍jvisualvm的使用 打开bin/jvisualvm.exe 本地的JVM进程都已经识别出来了,直接点击即可监控。 为了使jvisualvm功能更加强大&a…

jvisualvm安装Visual GC插件

给jdk自带的jvisualvm安装Visual GC插件,遇到Were sorry the java.net site has closed(我们很抱歉java.net网站已经关闭) 1、找到新的更新地址 visualvm新访问地址:https://visualvm.github.io/index.html 进入“Plugins”&am…

用jvisualvm分析dump文件

最近有一个java服务的堆内存溢出,然后僵死了,在重启服务之前用jmap命令生成了一份dump文件便于后面分析。 生成dump文件的命令: jmap -dump:formatb,file20170307.dump 16048 file后面的是自定义的文件名,最后的数字是进程的pi…

JvisualVM使用教程

最近正在学习JvisualVm的使用,写一篇博客记录一下。 一 工具准备 1 软件 已经安装JDK及IDEA。 2 插件 2.1 Idea插件 在idea中按住快捷键 shift command A,输入plugins,搜索visualvm,如下图所示,安装插件。 安装…

Jvisualvm设置中文

从官网上下载的Jvisualvm.exe,一般启动后都为英文版。 如果本地电脑中有安装JDK,只要你使用的是JDK1.6 Update7之后的版本,那么它久已经在你的JDK bin目录里了。(该版本为中文版) 直接启动JDK中bin目录下的jvisualvm.exe即可。

Java VisualVM

文章目录 1.Java VisualVM简介(Introduction to Java VisualVM)1.1 Java VisualVM简介(Introduction to Java VisualVM)1.2 启动Java VisualVM(Starting Java VisualVM)1.2.1 Java VisualVM用户目录&#x…

jvisualvm远程连接的三种方式

文章目录 基于jatatd实现远程连接配置安全策略启动jstatd远程连接 基于JMX实现远程访问远程连接 基于SSH的远程连接启动远程应用ssh端口转发 基于jatatd实现远程连接 jstatd是一个基于RMI (Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的…