首页
学习
活动
专区
工具
TVP
发布

人工智能学习案例-决策树

本教程主要目标

Ø一个知识点,一个案例,一段代码,理论与实践结合

Ø通俗简单易懂,每个案例代码都非常简短.

Ø代码注解非常清楚

Ø系统化学习,包括编程,数学,numpy,tensorflow,matplotlib

让大家更快,更好的掌握人工智能

花两小时改变自己的命运

1.决策树

决策树是一种基本的分类与回归方法,决策树模型呈树形结构。在分类问题中,它可以看作是if-then规则的集合,也可以看作是定义在特征空间与类空间上的条件概率分布。主要优点是模型具有可读性,分类速度快。

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。

其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别

使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

总结来说:

决策树模型核心是下面几部分:

Ø结点和有向边组成

Ø结点有内部结点和叶结点俩种类型

Ø内部结点表示一个特征,叶节点表示一个类

1.1.随机森林

鉴于决策树容易过拟合的缺点,随机森林采用多个决策树的投票机制来改善决策树,我们假设随机森林使用了m棵决策树,那么就需要产生m个一定数量的样本集来训练每一棵树,如果用全样本去训练m棵决策树显然是不可取的,全样本训练忽视了局部样本的规律,对于模型的泛化能力是有害的

产生n个样本的方法采用Bootstraping法,这是一种有放回的抽样方法,产生n个样本

而最终结果采用Bagging的策略来获得,即多数投票机制

随机森林的生成方法:

1.从样本集中通过重采样的方式产生n个样本

2.假设样本特征数目为a,对n个样本选择a中的k个特征,用建立决策树的方式获得最佳分割点

3.重复m次,产生m棵决策树

4.多数投票机制来进行预测

(需要注意的一点是,这里m是指循环的次数,n是指样本的数目,n个样本构成训练的样本集,而m次循环中又会产生m个这样的样本集)

随机森林是一种有监督学习算法。就像你所看到的它的名字一样,它创建了一个森林,并使它拥有某种方式随机性。所构建的“森林”是决策树的集成,大部分时候都是用“bagging”方法训练的。 bagging方法,即bootstrap aggregating,采用的是随机有放回的选择训练数据然后构造分类器,最后组合学习到的模型来增加整体的效果。

简而言之:随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。随机森林的一大优势在于它既可用于分类,也可用于回归问题,这两类问题恰好构成了当前的大多数机器学习系统所需要面对的。接下来,将探讨随机森林如何用于分类问题,因为分类有时被认为是机器学习的基石。下图,你可以看到两棵树的随机森林是什么样子的:

from__future__importprint_function

importtensorflowastf

fromtensorflow.python.opsimportresources

fromtensorflow.contrib.tensor_forest.pythonimporttensor_forest

fromtensorflow.examples.tutorials.mnistimportinput_data

importos

#忽略所有gpu

os.environ["CUDA_VISIBLE_DEVICES"]=""

#读取MNIST_data

mnist=input_data.read_data_sets("./MNIST_data",one_hot=False)

num_steps=500#训练总轮数

batch_size=1024#每批数据量

#类别个数,总共10个数字

num_classes=10

#特征数量,每个图像是 28*28像素

num_features=784

#树的个数

num_trees=10

#最大节点数

max_nodes=1000

#定义输入数据

x=tf.placeholder(tf.float32,shape=[None,num_features])

#定义标签数据,或者结果数据

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()))

withtf.Session()assess:

#初始化全部变量

sess.run(init_vars)

foriinrange(1,num_steps+1):

#读取下一批数据

batch_x,batch_y=mnist.train.next_batch(batch_size)

#执行训练,损失操作

_,l=sess.run([train_op,loss_op],feed_dict=)

ifi%50==ori==1:

#计算准确率

acc=sess.run(accuracy_op,feed_dict=)

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=))

Step 1, Loss: -0.000000, Acc: 0.115234

Step 50, Loss: -122.800003, Acc: 0.832031

Step 100, Loss: -272.399994, Acc: 0.884766

Step 150, Loss: -423.000000, Acc: 0.898438

Step 200, Loss: -582.200012, Acc: 0.909180

Step 250, Loss: -741.799988, Acc: 0.913086

Step 300, Loss: -903.599976, Acc: 0.928711

Step 350, Loss: -998.000000, Acc: 0.907227

Step 400, Loss: -998.000000, Acc: 0.916016

Step 450, Loss: -998.000000, Acc: 0.929688

Step 500, Loss: -998.000000, Acc: 0.922852

test accuracy: 0.9201

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180519G174DV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券