专栏首页贾志刚-OpenCV学堂使用sklearn随机森林算法实现手写数字识别

使用sklearn随机森林算法实现手写数字识别

一:随机森林算法是怎么工作的

随机森林(random forest)是2001年提出来同时支持数据的回归与分类预测算法,在具体了解随机森林算法之前,首先看一下决策树算法(Decision Tree)决策树算法通过不断的分支条件筛选,最终预测分类做出决定,举个简单的例子,你去找工作,对方给了你一个offer,下面可能就是你决定是否最终接受或者拒绝offer一系列条件就是内部节点(矩形)最终的决定就是外部节点(叶子-椭圆)

后你自己可能一个人根据上述条件决定接受了offer,但是有时候你还很不确定,你就会去很随机的问问你周围的几个朋友,他们也会根据你的情况与掌握的信息作出一系列的决策,做个形象的比喻,他们就是一棵棵单独存在的决策树,最终你根据这些结果决定接受还是拒绝offer,前一种情况你自己做出接受还是拒绝offer就叫决策树算法,后面一种情况,你一个人拿不定主意,还会随机问你周围的几个朋友一起给你参谋,最终做出接受还是拒绝offer的决定方式,你的那些朋友也是一棵棵单独存在的决策树,他们合在一起做决定,这个就叫做随机森林

当你在使用随机森林做决定时候,有时候分支条件太多,有些不是决定因素的分支条件其实你可以不考虑的,比如在决定是否接受或者拒绝offer的时候你可能不会考虑公司是否有程序员鼓励师(啊!!!!),这个时候需要对这么小分支看成噪声,进行剪枝算法处理生成决策树、最终得到随机森林。同时随机森林的规模越大(决策树越多)、它的决策准确率也越高。随机森林算法在金融风控分析、股票交易数据分析、电子商务等领域均有应用。

二:sklearn中随机森林算法函数使用

基于sklearn中随机森林算法函数创建随机森林实现mnist手写数字识别,完整的代码实现如下:

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
import tensorflow.examples.tutorials.mnist.input_data as input_data

data_dir = 'MNIST_data/'
mnist = input_data.read_data_sets(data_dir, one_hot=False)
batch_size = 50000
batch_x, batch_y = mnist.train.next_batch(batch_size)
test_x = mnist.test.images[:10000]
text_y = mnist.test.labels[:10000]

print("start random forest")
for i in range(10, 200, 10):
    clf_rf = RandomForestClassifier(n_estimators=i)
    clf_rf.fit(batch_x, batch_y)

    y_pred_rf = clf_rf.predict(test_x)
    acc_rf = accuracy_score(text_y, y_pred_rf)
    print("n_estimators = %d, random forest accuracy: %f"%(i, acc_rf))

n_estimators

表示树的数量,从运行结果可以看出,随着随机森林树的数目增加,预测的准确率也在不断的提升

本文分享自微信公众号 - OpenCV学堂(CVSCHOOL)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • OpenCV4.0实现人脸识别

    OpenCV4.0深度神经网络模块,支持openface模型的导入,提取人脸的128特征向量,进行相似度比对,实现人脸识别。Openface模型的详细信息看这里

    OpenCV学堂
  • 干货 | OpenCV中KLT光流跟踪原理详解与代码演示

    在视频移动对象跟踪中,稀疏光流跟踪是一种经典的对象跟踪算法,可以绘制运动对象的跟踪轨迹与运行方向,是一种简单、实时高效的跟踪算法,这个算法最早是有Bruce D...

    OpenCV学堂
  • OpenCV基于残差网络实现人脸检测

    OpenCV基于残差网络实现人脸检测 OpenCV3.3版本第一次把深度神经网络(DNN)模块引入到正式发布版本中,最新的OpenCV3.4中DNN模块发布了两...

    OpenCV学堂
  • 【学习】R语言与机器学习学习笔记(2)决策树算法

    算法二:决策树算法 决策树定义 首先,我们来谈谈什么是决策树。我们还是以鸢尾花为例子来说明这个问题。 观察上图,我们判决鸢尾花的思...

    小莹莹
  • 盘点|最实用的机器学习算法优缺点分析,没有比这篇说得更好了

    推荐理由 对于机器学习算法的盘点,网上屡见不鲜。但目前,还没人能结合使用场景来把问题说明白,而这一点正是本文的目的所在。 在文章中,作者将结合他的实际经验...

    AI科技大本营
  • R中t()转置后为什么会变成字符型数据

    数值型数据全部变成了字符型,怎么回事?其实是因为cluster那一列数据并不是数值型,而是字符型。因为这一列代表某一群细胞,如cluster0.所以才会出现这个...

    生信编程日常
  • 简单5步使用即构SDK,实现在线抓娃娃H5产品

    为了保障即构线上抓娃娃H5方案能够普遍的适配所有浏览器,即构团队在视频网络完成视频转码,把视频转成MPEG1。然后,在用户侧H5和视频网络之间加入接入服务器,把...

    BestSDK
  • 简单5步使用即构SDK,实现在线抓娃娃H5产品

    为了保障即构线上抓娃娃H5方案能够普遍的适配所有浏览器,即构团队在视频网络完成视频转码,把视频转成MPEG1。然后,在用户侧H5和视频网络之间加入接入服务器,把...

    企鹅号小编
  • rxjs of操作符传入数组的单步执行

    Observable构造函数接收一个函数作为subscribe的回调函数。我们这个例子,subscribe回调函数通过subscribeToArray构造:

    Jerry Wang
  • Retrofit笔记 | 基本使用步骤

    UserMgrService service = retrofit.create(UserMgrService.class);

    凌川江雪

扫码关注云+社区

领取腾讯云代金券