当前位置: 首页 > news >正文

手写数字识别实战 - 从传统机器学习到深度学习

关键词:MNIST数据集、SVM、神经网络、模型对比

python

# 第一部分:使用Scikit-learn的SVM识别手写数字
from sklearn import datasets, svm, metrics
from sklearn.model_selection import train_test_split# 加载MNIST数据集
digits = datasets.load_digits()
X, y = digits.images.reshape((len(digits.images), -1)), digits.target# 数据预处理
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建SVM分类器
clf = svm.SVC(gamma=0.001)
clf.fit(X_train, y_train)# 预测与评估
y_pred = clf.predict(X_test)
print(f"分类报告:\n{metrics.classification_report(y_test, y_pred)}")

输出示例

text

precision    recall  f1-score   support0       1.00      1.00      1.00        331       1.00      1.00      1.00        282       1.00      1.00      1.00        333       1.00      0.97      0.99        34
...accuracy                           0.99       360

python

# 第二部分:使用PyTorch实现神经网络
import torch
import torch.nn as nn
import torch.optim as optim# 定义神经网络
class Net(nn.Module):def __init__(self):super(Net, self).__init__()self.fc1 = nn.Linear(64, 128)self.fc2 = nn.Linear(128, 10)def forward(self, x):x = torch.relu(self.fc1(x))x = self.fc2(x)return x# 转换数据为Tensor
X_train_t = torch.FloatTensor(X_train)
y_train_t = torch.LongTensor(y_train)# 训练模型
model = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)for epoch in range(100):optimizer.zero_grad()outputs = model(X_train_t)loss = criterion(outputs, y_train_t)loss.backward()optimizer.step()

关键结论

  • SVM在小型数据集上准确率达99%

  • 神经网络通过特征自动提取获得更强泛化能力

  • 参数量对比:SVM(支持向量) vs NN(权重矩阵)

http://www.dtcms.com/a/319620.html

相关文章:

  • 13-netty基础-手写rpc-消费方生成代理-05
  • Qt——入门
  • 数据赋能(386)——数据挖掘——迭代过程
  • Spring、Spring MVC、MyBatis 和 Spring Boot的关系
  • Ethereum:如何优雅部署 NPM 包中的第三方智能合约?
  • LoadBalancingSpi
  • Beelzebub靶机
  • MyCAT实战环节
  • 动手学深度学习13.10. 转置卷积 -笔记练习(PyTorch)
  • 在新建word中使用以前文件中的列表样式
  • Python调用Shell指令的方法与实践
  • 深海中的类型晨曦
  • Jmeter使用第一节-认识面板(Mac版)
  • 初识C++类的6个默认成员函数
  • 以复合赋值运算符(op=)优化单独运算符(op)的实现
  • BKP 与 RTC 时钟
  • 从Text2SQL到Text2Metrics:衡石指标管理技术跃迁
  • 【Bluedroid】蓝牙音频接收端活动设备切换机制深度解析(sink_set_active_device)
  • 密码学侧信道攻击(Side-channel Attack):从物理泄露中窃取密钥
  • 水库大坝安全监测系统主要概述
  • 护网行动之后:容器安全如何升级?微隔离打造内网“微堡垒”
  • SkyWalking-1--SkyWalking是什么?
  • 基于MATLAB实现支持向量机(SVM)分类
  • `/dev/vdb` 是一个新挂载的 4TB 硬盘,但目前尚未对其进行分区和格式化。
  • WebSocket 在多线程环境下处理 Session并发
  • 多数据中心运维:别让 “分布式” 变成 “混乱式”
  • 机器学习 [白板推导](七)[概率图模型]
  • QtC++ 中使用 qtwebsocket 开源库实现基于websocket的本地服务开发详解
  • 30-Hive SQL-DML-Load加载数据
  • 黄金将变盘【月相】择时交易系统黄金,为何即将变盘?