前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >随机森林(RF)

随机森林(RF)

原创
作者头像
用户6841540
发布2024-08-20 06:25:19
1040
发布2024-08-20 06:25:19
举报
文章被收录于专栏:安义技术分享

用途

分类或者预测。

思想

(1)每次有放回地从训练集中取出 n 个训练样本,组成新的训练集;

(2)利用新的训练集,训练得到M个子模型;

(3)对于分类问题,采用投票的方法,得票最多子模型的分类类别为最终的类别;对于回归问题,采用简单的平均方法得到预测值。

步骤

第一步:T中共有N个样本,有放回的随机选择N个样本。从N个训练用例(样本)中以有放回抽样的方式每次取一个,取样N次,形成一个训练集(即bootstrap取样:随机有放回的抽样)。这样原本样本中可能不会全部选到。如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决。

这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。

第二步:当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。

第三步:决策树形成过程中每个节点都要按照步骤2来分裂,一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。

第四步:按照步骤1~3建立大量的决策树,这样就构成了随机森林了。

剪枝

剪枝则是为了增加模型的泛化能力,防止过拟合。

考虑决策树的复杂对,对已生成的决策树进行简化,简化的过程称为剪枝。一些简单的剪枝算法包括损失函数(loss function)、代价函数(cost function)等。

使用随机森林法(RF)计算各指标的权重,相关代码如下:

代码语言:python
代码运行次数:0
复制
# -*- coding:utf-8 -*-
# @author:Ye Zhoubing
# @datetime:2024/7/19 10:30
# @software: PyCharm
"""
随机森林法计算各指标权重
"""
# 利用sklearn库求各指标的权重
# 数据文件应该时纯数据,没有表头,表头在下面的df.columns处按列顺序定义
import pandas as pd
import numpy as np

url = 'test.xlsx'
df = pd.read_excel(url, header=None)

#定义各列数据的名称,按自己文件中列的顺序命名
df.columns = ['yiji', 'erji', 'sanji', 'siji', 'wuji', 'liuji', 'qiji',  'baji', 'jiuji']

df.info()#查看文件中数据类型

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
x, y = df.iloc[:, 0:].values, df.iloc[:, 0].values #0表示从第一列开始,即索引下标为0的列
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
feat_labels = df.columns[0:]
forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)
forest.fit(x_train, y_train)
importances = forest.feature_importances_
indices = np.argsort(importances)[::-1] #[::-1]表示将各指标按权重大小进行排序输出
for f in range(x_train.shape[1]):
    print("%2d) %-*s %f" % (f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))

示例文件test.xlsx文件如下:

文件下载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用途
  • 思想
  • 步骤
  • 剪枝
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档