R语言实现光学字符识别(数据科学导引)

【1】案例背景

光学字符识别(Optical Character Recognition, OCR)是指扫描仪等电子设备通过检测暗、亮的模式确定字符形状, 并使用字符识别方法将形状翻译成计算机字符的过程. 如何除错或利用辅助信息提高识别正确率, 是OCR最重要的课题, OCR技术的发展对于信息自动化和办公自动化的普及具有极大的推动作用.

此案例所给数据集共有26 个英文大写字母的20000个样本, 每一个样本代表光学图像中的一个矩形区域. 该区域只包含单个字符, 每个样本包含16 个输入特征和目标特征” letter” , “ letter” 特征表示当前样本是哪一个字母. 在此构建支持向量机模型实现对光学字符的分类.

【2】方法陈述

SVM模型通过使用最大分类间隔来确定最优的划分超平面, 以获得良好的泛化能力. SVM通过核函数的方法将低维数据映射到高维空间, 并使得在高维空间中的数据是线性可分的,从而处理低维空间中线性不可分的情况. SVM主要应用于模式识别领域中. 因此, 在此构建SVM模型实现光学字符的分类.

【3】实验代码

  1. 步骤一 数据准备,划分训练集和测试集

rm(list=ls())

library(kernlab)

letters <- read.csv("letterecognition.csv")

letters$letter=as.factor(letters$letter)

str(letters)

letters_train<-letters[1:16000,]

letters_test<-letters[16001:20000,]

  1. 步骤二训练模型

#线性核函数

letter_classifier<-ksvm(letter~.,data=letters_train,kernel="vanilladot")

letter_classifier

  1. 步骤三评估模型

letter_prediction<-predict(letter_classifier,letters_test)

head(letter_prediction)

table(letter_prediction,letters_test$letter)

  1. 步骤四改进模型

agreement<-letter_prediction==letters_test$letter

table(agreement)

prop.table(table(agreement))

#1.polydot核函数

letter_classifier_polydot<-ksvm(letter~.,data=letters_test,kernel="polydot")

letter_prediction_polydot<-predict(letter_classifier_polydot,letters_test)

agreement_polydot<-letter_prediction_polydot==letters_test$letter

table(agreement_polydot)

prop.table(table(agreement_polydot))

#2.rbfdot核函数

letter_classifier_rbf<-ksvm(letter~.,data=letters_test,kernel="rbfdot")

letter_prediction_rbf<-predict(letter_classifier_rbf,letters_test)

agreement_rbf<-letter_prediction_rbf==letters_test$letter

table(agreement_rbf)

prop.table(table(agreement_rbf))

【4】结果分析

步骤一导入数据后使用str()函数检查数据框中数据变量及类型. 如: kernlab包中的ksvm函数要求将letter转换为factor类型才可运行. 转换后数据如图1所示.

图1 letters中数据变量及类型图

步骤二训练模型后如图2所示, 并不能通过此直接看出模型的优劣, 因此进行测试集的数据分析.

图2 模型训练图

步骤三评估模型,将测试数据的预测值与实际值作比较,结果如图3所示.

图3 测试值与实际值比较图

由图3发现将B类正确分类121个,错误地将5个分给了D,2个分给了E等。在此只需要判断预测的字母是正确的还是错误的,不需要找到其类型。因此对模型做出改进,改进后模型正确率如图4所示,正确率为84%.

图4 改进后正确率图

将模型进一步改进,通过更加复杂的核函数,将数据映射到更高维的空间,并获得更好的模型拟合度,如图5所示,发现运用polydot核函数,正确率达到88%,运用rbfdot核函数,正确率达到91%.

图5 模型改进后性能图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

engineer致远

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

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

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

打赏作者

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

抵扣说明:

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

余额充值