tensorflow基础模型之RandomForest(随机森林)算法

随机森林算法原理请参照上篇:随机森林。数据依旧为MNIST数据集。

代码如下:

from __future__ import print_function
?
# Ignore all GPUs, tf random forest does not benefit from it.
import os
?
import tensorflow as tf
from tensorflow.contrib.tensor_forest.python import tensor_forest
from tensorflow.python.ops import resources
?
os.environ["CUDA_VISIBLE_DEVICES"] = ""
?
# 导入 MNIST 数据
from tensorflow.examples.tutorials.mnist import input_data
?
mnist = input_data.read_data_sets("./tmp/data/", one_hot=False)
?
# 参数
num_steps = 500 # Total steps to train
batch_size = 1024 # 每批处理样本数
num_classes = 10 # 10个数字=>10个分类
num_features = 784 # 每张图片 28x28 像素 => 784特征
num_trees = 10
max_nodes = 1000
?
# 输入数据
X = tf.placeholder(tf.float32, shape=[None, num_features])
# 用数字表示随机森林中的标签(类id)
Y = tf.placeholder(tf.int32, shape=[None])
?
# 随机森林参数
hparams = tensor_forest.ForestHParams(num_classes=num_classes,
                                    num_features=num_features,
                                    num_trees=num_trees,
                                    max_nodes=max_nodes).fill()
?
# 建立随机森林
forest_graph = tensor_forest.RandomForestGraphs(hparams)
# 获取训练图,计算损失率
train_op = forest_graph.training_graph(X, Y)
loss_op = forest_graph.training_loss(X, Y)
?
# 计算准确率
infer_op, _, _ = forest_graph.inference_graph(X)
correct_prediction = tf.equal(tf.argmax(infer_op, 1), tf.cast(Y, tf.int64))
accuracy_op = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
?
# 初始化变量和森林资源
init_vars = tf.group(tf.global_variables_initializer(),
                    resources.initialize_resources(resources.shared_resources()))
?
# 启动TensorFlow会话
sess = tf.Session()
?
# 初始化
sess.run(init_vars)
?
# 训练
for i in range(1, num_steps + 1):
  # 准备数据
  # 获取一批图片数据
  batch_x, batch_y = mnist.train.next_batch(batch_size)
  _, l = sess.run([train_op, loss_op], feed_dict={X: batch_x, Y: batch_y})
  if i % 50 == 0 or i == 1:
      acc = sess.run(accuracy_op, feed_dict={X: batch_x, Y: batch_y})
      print(‘Step %i, Loss: %f, Acc: %f‘ % (i, l, acc))
?
# 测试模型
test_x, test_y = mnist.test.images, mnist.test.labels
print("Test Accuracy:", sess.run(accuracy_op, feed_dict={X: test_x, Y: test_y}))
---------------------

原文地址:https://www.cnblogs.com/hyhy904/p/11182994.html

时间: 2024-10-09 06:51:48

tensorflow基础模型之RandomForest(随机森林)算法的相关文章

R语言︱机器学习模型评估方案(以随机森林算法为例)

R语言︱机器学习模型评估方案(以随机森林算法为例) 笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评价模型的方式. 常见的应用在监督学习算法中的是计算平均绝对误差(MAE).平均平方差(MSE).标准平均方差(NMSE)和均值等,这些指标计算简单.容易理解:而稍微复杂的情况下,更多地考虑的是一些高大上的指标,信息熵.复杂度和基尼值等等. 本篇可以用于情感挖

【机器学习基础】随机森林算法

引入 我们回顾一下之前学习的两个算法,Bagging算法中,通过bootstrapping得到不一样的数据,通过这些数据送到一个基本算法之后,得到不同的g,最后对这些g取平均得到G:决策树算法中,通过递归方式建立子树,最终得到一棵完整的树. 这两种算法都有其鲜明的特点,决策树对于不同的数据相对会敏感一些,即其算法的variance很大,而Bagging的特点是通过投票和平均的方式来降低variance的效果.如果将这两种方法结合起来,就是该文要介绍的随机森林,random forest. 1.

Bagging与随机森林算法原理小结

在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合.本文就对集成学习中Bagging与随机森林算法做一个总结. 随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力. 1.  bagging的原理 在集成学习原理小结中,我们给Bagging画了下面一张原理图. 从上图可以看出,

R语言︱决策树族——随机森林算法

笔者寄语:有一篇<有监督学习选择深度学习还是随机森林或支持向量机?>(作者Bio:SebastianRaschka)中提到,在日常机器学习工作或学习中,当我们遇到有监督学习相关问题时,不妨考虑下先用简单的假设空间(简单模型集合),例如线性模型逻辑回归.若效果不好,也即并没达到你的预期或评判效果基准时,再进行下换其他更复杂模型来实验. ---------------------------------------------- 一.随机森林理论介绍 1.1 优缺点 优点. (1)不必担心过度拟合

spark 随机森林算法案例实战

随机森林算法 由多个决策树构成的森林,算法分类结果由这些决策树投票得到,决策树在生成的过程当中分别在行方向和列方向上添加随机过程,行方向上构建决策树时采用放回抽样(bootstraping)得到训练数据,列方向上采用无放回随机抽样得到特征子集,并据此得到其最优切分点,这便是随机森林算法的基本原理.图 3 给出了随机森林算法分类原理,从图中可以看到,随机森林是一个组合模型,内部仍然是基于决策树,同单一的决策树分类不同的是,随机森林通过多个决策树投票结果进行分类,算法不容易出现过度拟合问题. 图 3

随机森林算法demo python spark

关键参数 最重要的,常常需要调试以提高算法效果的有两个参数:numTrees,maxDepth. numTrees(决策树的个数):增加决策树的个数会降低预测结果的方差,这样在测试时会有更高的accuracy.训练时间大致与numTrees呈线性增长关系. maxDepth:是指森林中每一棵决策树最大可能depth,在决策树中提到了这个参数.更深的一棵树意味模型预测更有力,但同时训练时间更长,也更倾向于过拟合.但是值得注意的是,随机森林算法和单一决策树算法对这个参数的要求是不一样的.随机森林由于

机器学习——随机森林算法及原理

1. 随机森林使用背景 1.1 随机森林定义 随机森林是一种比较新的机器学习模型.经典的机器学习模型是神经网络,有半个多世纪的历史了.神经网络预测精确,但是计算量很大.上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低.2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果.随机森林在运算量没有显著提

机器学习——Bagging与随机森林算法及其变种

Bagging算法: 凡解:给定M个数据集,有放回的随机抽取M个数据,假设如此抽取3组,3组数据一定是有重复的,所以先去重.去重后得到3组数据,每组数据量分别是s1,s2,s3,然后三组分别训练组合成一个强模型.如下图: 随机森林算法: 一般用于大规模数据,百万级以上的. 在Bagging算法的基础上,如上面的解释,在去重后得到三组数据,那么再随机抽取三个特征属性,选择最佳分割属性作为节点来创建决策树.可以说是 随机森林=决策树+Bagging 如下图 RF(随机森林)的变种: ExtraTre

随机森林 算法过程及分析

简单来说,随机森林就是Bagging+决策树的组合(此处一般使用CART树).即由很多独立的决策树组成的一个森林,因为每棵树之间相互独立,故而在最终模型组合时,每棵树的权重相等,即通过投票的方式决定最终的分类结果. 随机森林算法主要过程: 1.样本集的选择. 假设原始样本集总共有N个样例,则每轮从原始样本集中通过Bootstraping(有放回抽样)的方式抽取N个样例,得到一个大小为N的训练集.在原始样本集的抽取过程中,可能有被重复抽取的样例,也可能有一次都没有被抽到的样例. 共进行k轮的抽取,