【1】案例背景

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

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

【2】方法陈述

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

【3】实验代码

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

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,]

步骤二训练模型

#线性核函数

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

letter_classifier

步骤三评估模型

letter_prediction<-predict(letter_classifier,letters_test)

head(letter_prediction)

table(letter_prediction,letters_test$letter)

步骤四改进模型

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所示.







R语言 进行遥感影像分析最长运行时间 r语言图像识别算法_核函数




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



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







R语言 进行遥感影像分析最长运行时间 r语言图像识别算法_R语言 进行遥感影像分析最长运行时间_02




图2 模型训练图



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







R语言 进行遥感影像分析最长运行时间 r语言图像识别算法_svm_03




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



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







R语言 进行遥感影像分析最长运行时间 r语言图像识别算法_核函数_04




图4 改进后正确率图



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







R语言 进行遥感影像分析最长运行时间 r语言图像识别算法_R语言 进行遥感影像分析最长运行时间_05




图5 模型改进后性能图