文章目录

  • 随机森林算法描述:
  • 如何对features进行bootstrap?
  • 算法代码实现:

随机森林算法描述:

如何对features进行bootstrap?

我们需要一个feature_bound参数,每次把可以选择的features打乱,从种选出log(d)个,每次选择feature划分时都是这么选择。
原来的决策树代码,是在结点的可选node维度列表里选取:

for feat in self.feats:

现在修改加入随机性:

feat_len = len(self.feats)
# 默认没有随机性
if feature_bound is None:indices = range(0, feat_len)
elif feature_bound == "log":# np.random.permutation(n):将数组打乱后返回indices = np.random.permutation(feat_len)[:max(1, int(log2(feat_len)))]
else:indices = np.random.permutation(feat_len)[:feature_bound]
tmp_feats = [self.feats[i] for i in indices]
for feat in tmp_feats:

实际上这个是拉斯维加斯随机算法,把确定性算法的某一步修改成随机概率方式。

算法代码实现:

# 导入我们自己实现的决策树模型
# 导入我们自己实现的决策树模型
from c_CvDTree.Tree import *
import numpy as np
class RandomForest(ClassifierBase):# 建立一个决策树字典,以便调用_cvd_trees = {"id3": ID3Tree,"c45": C45Tree,"cart": CartTree}def __init__(self):super(RandomForest, self).__init__()self._trees = []# 实现计算的函数@staticmethoddef most_appearance(arr):u, c = np.unique(arr, return_counts=True)return u[np.argmax(c)]# 默认使用 10 棵 CART 树、默认 k = log(d)def fit(self, x, y, sample_weight=None, tree="cart", epoch=10, feature_bound="log",*args, **kwargs):x, y = np.atleast_2d(x), np.array(y)n_sample = len(y)for _ in range(epoch):tmp_tree = RandomForest._cvd_trees[tree](*args, **kwargs)# 每次选取n_sample个样本_indices = np.random.randint(n_sample, size=n_sample)if sample_weight is None:_local_weight = Noneelse:_local_weight = sample_weight[_indices]_local_weight /= _local_weight.sum()# 针对样本进行训练,生成树tmp_tree.fit(x[_indices], y[_indices],sample_weight=_local_weight, feature_bound=feature_bound)# 把生成的树放入森林列表self._trees.append(deepcopy(tmp_tree))# 对个体决策树进行简单组合# 把10棵树的判断的类别放入列表里,这里可能是多个样本所以是matrix,# 把每个样本的类别出现次数最多的类别,即为输出结果def predict(self, x):_matrix = np.array([_tree.predict(x) for _tree in self._trees]).Treturn np.array([RandomForest.most_appearance(rs) for rs in _matrix])

机器学习:随机森林算法及其实现相关推荐

  1. [python] 机器学习 随机森林算法RandomForestRegressor

    前言 随机森林Python版本有很可以调用的库,使用随机森林非常方便,主要用到以下的库 sklearn Scikit learn 也简称 sklearn, 是机器学习领域当中最知名的 python 模 ...

  2. 机器学习-随机森林算法梳理

    学习任务 集成学习概念 个体学习器概念 boosting bagging 结合策略(平均法,投票法,学习法) 随机森林思想 随机森林的推广 优缺点 sklearn参数 应用场景 一.集成学习与个体学习 ...

  3. 机器学习-集成之随机森林算法原理及实战

    Bagging和随机森林 前言 集成学习是目前机器学习的一大热门方向.简单来说,集成学习就是组合许多弱模型以得到一个预测结果比较好的强模型.对于常见的分类问题就是指采用多个分类器对数据集进行预测,把这 ...

  4. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  5. 【机器学习】P25 随机森林算法(2) 实现 “波士顿房价” 预测

    随机森林算法 Random Forest Algorithm 随机森林算法 随机森林算法实现波士顿房价预测 随机森林算法 随机森林(Random Forest)算法 是一种 集成学习(Ensemble ...

  6. python 随机森林调参_Python机器学习实践:随机森林算法训练及调参-附代码

    原标题:Python机器学习实践:随机森林算法训练及调参-附代码 文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 博客园 作者 | 战争热诚 ...

  7. 随机森林分类算法python代码_Python机器学习笔记:随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

  8. Python机器学习笔记——随机森林算法

    随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...

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

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

  10. (转载)机器学习知识点(十七)Bagging与随机森林算法原理小结

    集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Bagging ...

最新文章

  1. [转] linux下查看nginx,apache,mysql,php的编译参数
  2. Linux下修复修改profile文件导致命令不用可的解决方法
  3. Trie树【洛谷P3879】 [TJOI2010]阅读理解
  4. Spring OXM-XStream流化对象
  5. JS回调函数(callback)
  6. 使用kettle将文本文件中的数据导入数据库
  7. spring boot配置logback日志
  8. 【BlackHat】黑帽大会上值得关注的安全工具
  9. bzoj 2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
  10. 计算机启动需输入两次密码,我的电脑开机的时候要输入2次密码,我应当怎么去除?...
  11. 使用@Transactional(SUPPORTS)和不加@Transactional 有什么区别?
  12. jq取第一个子元素为select_Python爬取博客的所有文章并存为带目录的word文档(实例67)...
  13. python的源代码下载_官方下载python源码,编译linux版本的python
  14. 【电路】PT1000/PT100温度采集电路
  15. mysql红黑联盟_MySQL - mysql数据库栏目 - 红黑联盟
  16. Linux 10GE端口,CR19000关于10GE端口切换GE口
  17. 信息检索 | 信息检索方法一览
  18. UWB定位系统在展馆中的应用
  19. 干货:统计学派的18种经典「数据分析方法」
  20. EXCEL转换成十六进制加0x补零

热门文章

  1. php给定一个起始数字,下标值0,递减的值,求出他所有递减值的开头数字和结尾数字。
  2. MySQL 索引和 SQL 调优手册
  3. linux 内核rt,实时操作系统kernel rt
  4. 手机鸿蒙公测选择一个应用,鸿蒙系统公测半个月,首批“差评”很难听,但是却也很真实...
  5. matlab narxnet,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
  6. python第7章实训作业_试图学Python赚外快的第7天
  7. uniapp 页面渲染完成
  8. elk 搜索 语法_ELK学习笔记7| Lucence 的搜索语法
  9. 计算机风机不运转也启动了怎么办,电脑不开机风扇一直转怎么解决_电脑无法开机风扇一直转怎么办-win7之家...
  10. java redis快速入门_SpringDataRedis快速入门