首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第一章:机器学习概述与Python基础
第二章:数据预处理与特征工程
第三章:监督学习基础
第四章:决策树与随机森林
第五章:支持向量机与核函数
第六章:逻辑回归与多层感知机
第七章:K近邻算法与协同过滤
第八章:聚类分析与层次聚类
第九章:主成分分析与因子分析
第十章:降维技术在机器学习中的应用
第十一章:实战一:手写数字识别
第十二章:实战二:情感分析
第十三章:实战三:新闻分类
第十四章:实战四:推荐系统
第十五章:实战五:股票预测
第十六章:实战六:图像识别
第十七章:实战七:文本生成
第十八章:实战八:异常检测
第十九章:实战九:语音识别
第二十章:实战十:自然语言处理
第二十一章:高级技巧一:Python机器学习库的比较与选择
第二十二章:高级技巧二:特征选择与特征提取
第二十三章:高级技巧三:模型评估与选择
第二十四章:高级技巧四:模型调优与超参数优化
第二十五章:高级技巧五:集成学习方法
第二十六章:高级技巧六:深度学习基础
第二十七章:高级技巧七:神经网络与卷积神经网络
第二十八章:高级技巧八:循环神经网络与长短期记忆网络
第二十九章:高级技巧九:强化学习基础
第三十章:高级技巧十:生成对抗网络
第三十一章:案例分析一:Python机器学习在金融领域的应用
第三十二章:案例分析二:Python机器学习在医疗领域的应用
第三十三章:案例分析三:Python机器学习在推荐系统中的应用
第三十四章:案例分析四:Python机器学习在图像识别中的应用
第三十五章:案例分析五:Python机器学习在自然语言处理中的应用
第三十六章:案例分析六:Python机器学习在语音识别中的应用
第三十七章:案例分析七:Python机器学习在自动驾驶中的应用
第三十八章:案例分析八:Python机器学习在智能家居中的应用
第三十九章:案例分析九:Python机器学习在游戏开发中的应用
第四十章:案例分析十:Python机器学习在物联网中的应用
第四十一章:扩展阅读一:Python机器学习经典书籍与资源
第四十二章:扩展阅读二:Python机器学习框架比较与选择
第四十三章:扩展阅读三:Python机器学习最佳实践
第四十四章:扩展阅读四:Python机器学习性能测试与调优
第四十五章:扩展阅读五:Python机器学习自动化测试与验证
第四十六章:扩展阅读六:Python机器学习代码审查与质量控制
第四十七章:扩展阅读七:Python机器学习持续集成与持续部署
第四十八章:扩展阅读八:Python机器学习开源项目与工具推荐
第四十九章:扩展阅读九:Python机器学习在移动设备上的应用
第五十章:扩展阅读十:从高级程序员到Python机器学习专家之路
第五十一章:高级技巧十一:Python机器学习中的高级特性与技巧
第五十二章:高级技巧十二:Python机器学习中的实时数据传输与同步
第五十三章:高级技巧十三:Python机器学习中的高级性能优化
第五十四章:高级技巧十四:Python机器学习中的内存优化策略
第五十五章:高级技巧十五:Python机器学习中的线程优化策略
第五十六章:高级技巧十六:Python机器学习中的性能瓶颈分析与优化
第五十七章:高级技巧十七:Python机器学习中的安全性与合规性
第五十八章:高级技巧十八:Python机器学习中的自动化测试与验证
当前位置:
首页>>
技术小册>>
Python机器学习实战
小册名称:Python机器学习实战
### 第十一章:实战一:手写数字识别 #### 引言 在机器学习的广阔领域中,手写数字识别是一个经典而富有挑战性的入门级项目,它不仅考验了算法的理解与实现能力,还涵盖了数据预处理、模型训练、评估与优化等多个关键环节。本章将带领读者通过Python及其强大的机器学习库——如scikit-learn和TensorFlow(或PyTorch,根据读者偏好),亲手实现一个手写数字识别系统。我们将以著名的MNIST数据集为例,该数据集包含了大量手写数字的灰度图像及其对应的标签,是学习和测试图像识别算法的理想选择。 #### 1. MNIST数据集介绍 MNIST(Modified National Institute of Standards and Technology database)是一个大型的手写数字数据库,广泛用于训练各种图像处理系统。它包含了60,000个训练样本和10,000个测试样本,每个样本都是一张28x28像素的灰度图像,表示一个从0到9的手写数字。 - **下载与加载MNIST数据集**: 在Python中,我们可以使用多种方式来下载和加载MNIST数据集。最方便的是通过`tensorflow.keras.datasets`或`sklearn.datasets`模块直接获取。以下示例展示了如何使用`tensorflow.keras.datasets`加载MNIST数据集: ```python import tensorflow as tf (train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data() # 归一化数据 train_images, test_images = train_images / 255.0, test_images / 255.0 ``` #### 2. 数据预处理 在将图像数据送入模型之前,进行适当的预处理是提升模型性能的关键步骤。对于MNIST数据集,虽然图像已经是灰度且尺寸统一,但进行归一化(将像素值从[0, 255]缩放到[0, 1])可以加快训练速度并提高收敛性。 此外,根据所选模型的不同,可能还需要进行图像增强(如旋转、缩放、平移等)以增加数据的多样性,从而提高模型的泛化能力。然而,对于初学者而言,首先掌握基本的流程更为重要。 #### 3. 构建模型 接下来,我们将根据任务需求选择合适的机器学习模型。手写数字识别是一个典型的图像分类问题,因此,我们可以选择多种模型,包括但不限于逻辑回归、决策树、随机森林、K-近邻以及深度学习模型(如卷积神经网络CNN)。由于CNN在图像识别任务中表现出色,这里我们以构建一个简单的CNN模型为例。 ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), MaxPooling2D(2, 2), Conv2D(64, (3, 3), activation='relu'), MaxPooling2D(2, 2), Conv2D(64, (3, 3), activation='relu'), Flatten(), Dense(64, activation='relu'), Dropout(0.5), Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` #### 4. 模型训练 准备好数据集和模型之后,就可以开始训练了。训练过程中,模型会学习如何将输入的图像映射到其对应的数字标签上。 ```python model.fit(train_images[..., tf.newaxis], train_labels, epochs=10, validation_data=(test_images[..., tf.newaxis], test_labels)) ``` 注意,由于MNIST数据集是二维的,而CNN通常期望三维输入(高度、宽度、通道数),因此在训练时需要添加一个新的维度来模拟通道(对于灰度图像,通道数为1)。 #### 5. 模型评估 训练完成后,我们需要对模型进行评估,以了解其在未见过的数据上的表现。这通常涉及在测试集上运行模型,并计算准确率、损失等指标。 ```python test_loss, test_acc = model.evaluate(test_images[..., tf.newaxis], test_labels, verbose=2) print('\nTest accuracy:', test_acc) ``` #### 6. 预测与可视化 最后,我们可以使用训练好的模型对手写数字进行预测,并可视化预测结果。这有助于直观地理解模型的工作方式及其性能。 ```python import numpy as np import matplotlib.pyplot as plt # 预测单个图像 predictions = model.predict(test_images[0:1, ..., tf.newaxis]) print(np.argmax(predictions)) # 输出预测的数字 # 可视化预测结果 plt.imshow(test_images[0], cmap=plt.cm.binary) plt.show() ``` #### 7. 进一步优化 虽然我们已经构建了一个能够执行手写数字识别的基本模型,但仍有许多优化空间。例如,可以尝试调整模型结构(如增加卷积层、改变激活函数)、使用不同的优化器、调整学习率、应用正则化技术以防止过拟合等。此外,通过数据增强来增加训练集的多样性也是一个有效提升模型泛化能力的方法。 #### 结论 本章通过实现一个手写数字识别系统,带领读者深入了解了机器学习项目从数据预处理到模型构建、训练、评估及优化的全过程。希望这一过程不仅能够帮助读者掌握相关的技术知识,还能激发他们对机器学习领域的兴趣和探索欲望。未来,随着技术的不断进步和应用的深入,机器学习必将在更多领域展现出其巨大的潜力和价值。
上一篇:
第十章:降维技术在机器学习中的应用
下一篇:
第十二章:实战二:情感分析
该分类下的相关小册推荐:
Python与办公-玩转Excel
Python合辑5-格式化字符串
Python自动化办公实战
剑指Python(万变不离其宗)
Python面试指南
Python编程轻松进阶(二)
剑指Python(磨刀不误砍柴工)
Python甚础Django与爬虫
Python合辑6-字典专题
机器学习算法原理与实战
Python爬虫入门与实战开发(下)
Python合辑11-闭包函数