随机森林算法实现

随机森林是一个包含多个决策树的分类器,该分类器的输出结果是由所有决策树输出结果的众数而定,

每个决策树都生长于一个被称为bootstrap样本的训练数据集之上,所谓“bootstrap样本”的构造原理为:

对于容量为n原始训练数据,采取重复抽样的方式抽样n次,形成一组新的训练数据,被称为原始数据

的一个bootstrap样本。在bootstrap样本上构造决策树的原理与传统的构造决策树的方法大致相同,但也

存在一些差别,不同之处在于:在对非叶节点分裂时,需要从所有的m个属性中随机地选取p个属性

(一般建议取p的值为m的平方根),再从这p个属性中选取最佳分裂属性以及相应的最佳分裂阀值,在该

bootstrap样本上最终生成的决策树不需要剪枝。在原始训练数据上生成多个bootstrap样本,利用上述

方法就会得到多颗完全生长的决策树,因为取样过程以及变量选取过程都是随机的,因此被形象地称为

随机森林。

算法的为代码如下:


本文利用Python语言实现随机森林算法,构建的每颗决策树都基于CART算法,所有代码都位于一个文件

randomforests.py中,

  1. from __future__ import division 
  2. import numpy as np 
  3. import math 
  4.  
  5. class node: 
  6.     def __init__(self, col=-1, value=None, results=None, trueBranch=None, falseBranch=None): 
  7.         self.col = col 
  8.         self.value = value 
  9.         self.results = results 
  10.         self.trueBranch = trueBranch 
  11.         self.falseBranch = falseBranch 
  12.          
  13.     def getLabel(self): 
  14.         if self.results == None
  15.             return None 
  16.         else
  17.             max_counts = 0 
  18.             for key in self.results.keys(): 
  19.                 if self.results[key] > max_counts: 
  20.                     label = key 
  21.                     max_counts = self.results[key] 
  22.         return label 
  23.  
  24. class RandomForestsClassifier: 
  25.     def __init__(self, n_bootstrapSamples=20): 
  26.         self.n_bootstrapSamples = n_bootstrapSamples 
  27.         self.list_tree = [] 
  28.          
  29.     def divideSet(self, samples, column, value): 
  30.         splitFunction = None 
  31.         if isinstance(value,int) or isinstance(value,float): 
  32.             splitFunction = lambda row: row[column] >= value 
  33.         else
  34.             splitFunction = lambda row: row[column] == value 
  35.         set1 = [row for row in samples if splitFunction(row)] 
  36.         set2 = [row for row in
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值