随机森林算法(RandomForest)实现MNIST手写体数字识别

一、准备:

第三方库 sklearn

二、代码:

# -*- coding: utf-8 -*-
# @Time    : 2018/8/21 9:35
# @Author  : Barry
# @File    : mnist.py
# @Software: PyCharm Community Edition

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]
test_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(test_y,y_pred_rf)
    print("n_estimators = %d, random forest accuracy:%f" %(i,acc_rf))
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是Python实现Mnist手写数字识别的代码: ```python import numpy as np import tensorflow as tf from tensorflow.keras.datasets import mnist # 加载数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 数据预处理 x_train = x_train.reshape(-1, 28 * 28).astype(np.float32) / 255.0 # 归一化 x_test = x_test.reshape(-1, 28 * 28).astype(np.float32) / 255.0 y_train = y_train.astype(np.int32) y_test = y_test.astype(np.int32) # 构建模型 model = tf.keras.models.Sequential([ tf.keras.layers.Dense(256, activation=tf.nn.relu), tf.keras.layers.Dense(10) ]) # 定义损失函数和优化器 loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True) optimizer = tf.keras.optimizers.Adam() # 训练模型 model.compile(optimizer=optimizer, loss=loss_fn, metrics=['accuracy']) model.fit(x_train, y_train, epochs=5, batch_size=64, validation_data=(x_test, y_test)) # 评估模型 model.evaluate(x_test, y_test, verbose=2) ``` 这个代码使用了 TensorFlow 框架,首先从 Mnist 数据集中加载训练集和测试集。然后对数据进行归一化处理,将像素值从 0-255 缩放到 0-1 之间。接着构建一个简单的神经网络模型,包含一个具有 256 个神经元的全连接层和一个输出层,输出层的神经元数为 10,对应数字 0-9。模型的损失函数使用了交叉熵,优化器使用了 Adam。在训练过程中,使用了验证集来监测模型的性能。最后,使用测试集对模型进行评估。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一摩尔自由

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值