本教程主要目标
Ø一个知识点,一个案例,一段代码,理论与实践结合
Ø通俗简单易懂,每个案例代码都非常简短.
Ø代码注解非常清楚
Ø系统化学习,包括编程,数学,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
领取专属 10元无门槛券
私享最新 技术干货