目录

1.导入数据

2.数据处理

3.特征计算

4.特征提取

5.构建模型与预测

6.评价一个模型

7.review


1.导入数据

手写信件作为单独的文本文件存储。每个文件以逗号分隔,包含四列:时间戳、笔的水平位置、笔的垂直位置和笔的压力。时间戳是自数据收集开始以来经过的毫秒数。其他变量以规范化单位(0到1)表示。对于笔位置,0表示书写表面的下边缘和左边缘,1表示上边缘和右边缘。

letter = readtable("J.txt");
plot(letter.X,letter.Y)
axis equalletter = readtable("M.txt");
plot(letter.X,letter.Y)
axis equal

 

2.数据处理

手写数据的笔位置以标准化单位(0到1)测量。不过,用于记录数据的平板电脑并非方形。这意味着1的垂直距离对应10英寸,而相同的水平距离对应15英寸。若要更正此问题,应将水平单位调整到范围[0 1.5]而不是[0 1]。

letter = readtable("M.txt")letter.X = 1.5*letter.X;plot(letter.X,letter.Y)
axis equal

时间值没有物理意义。它们表示从数据收集会话开始经过的毫秒数。这使得我们很难通过时间来解释笔迹图。一个更有用的时间变量是从每个字母开始的持续时间(以秒为单位)。

letter.Time = letter.Time - letter.Time(1)
letter.Time = letter.Time/1000plot(letter.Time,letter.X)
plot(letter.Time,letter.Y)

3.特征计算

这些字母的哪些方面可以用来区分J和M或V?我们的目标不是使用原始信号,而是计算将整个信号提取为简单、有用的信息单位(称为特征)的值。
对于字母J和M,一个简单的特征可能是纵横比(字母相对于宽度的高度)。J可能又高又窄,而M可能更方。
与J和M相比,V的写入速度快,因此信号的持续时间也可能是一个区别特征。

letter = readtable("M.txt");
letter.X = letter.X*1.5;
letter.Time = (letter.Time - letter.Time(1))/1000
plot(letter.X,letter.Y)
axis equal
#上面的是前面重复代码
dur = letter.Time(end)
aratio = range(letter.Y)/range(letter.X)

4.特征提取

MAT文件featuredata.MAT包含一个包含470个字母的提取特征的表格,这些字母由不同的人书写。表格特性有三个变量:AspectRatio和Duration(前一节计算的两个特性)和Character(已知字母)。

load featuredata.mat
features

scatter(features.AspectRatio,features.Duration)

尚不清楚这些特征是否足以区分数据集中的三个字母(J、M和V)。gscatter函数生成一个分组散点图,即根据分组变量对点进行着色的散点图。

gscatter(features.AspectRatio,features.Duration,features.Character)

5.构建模型与预测

load featuredata.mat
features
testdata

knnmodel = fitcknn(features,"Character")

根据数据建立模型后,可以使用它对新的观测进行分类。这只需要计算新观测值的特征,并确定它们在预测空间的哪个区域。

predictions = predict(knnmodel,testdata)

默认情况下,fitcknn适合k=1的kNN模型。也就是说,该模型仅使用已知的最接近的一个示例来对给定的观测进行分类。这使得模型对训练数据中的任何异常值(如上图中突出显示的异常值)敏感。离群值附近的新观测可能被错误分类。解决这个问题的一个简单方法是增加k的值(即使用几个邻居中最常见的类)。

knnmodel = fitcknn(features,"Character","NumNeighbors",5)
predictions = predict(knnmodel,testdata)

6.评价一个模型

kNN模型有多好?testdata表包含测试观察的已知类。您可以将已知类与kNN模型的预测进行比较,以了解模型在新数据上的性能。

load featuredata.mat
testdata
knnmodel = fitcknn(features,"Character","NumNeighbors",5);
predictions = predict(knnmodel,testdata)

iscorrect = predictions == testdata.Character

通过将正确预测数除以预测总数来计算正确预测的比例。将结果存储在名为accurity的变量中。可以使用sum函数确定正确预测的数量,使用numel函数确定预测的总数。

accuracy = sum(iscorrect)/numel(predictions)

错误率计算

iswrong = predictions ~= testdata.Character
misclassrate = sum(iswrong)/numel(predictions)

准确度和错误分类率为模型的整体性能提供了一个单一的值,但是可以看到模型混淆的类的更详细的细分。混淆矩阵显示了真实类和预测类的每个组合的观察数。

混淆矩阵通常通过根据元素的值对元素进行着色来可视化。通常对角线元素(正确的分类)用一种颜色着色,而其他元素(错误的分类)用另一种颜色着色。您可以使用confusionchart函数可视化混淆矩阵。

7.review

现在,您有了一个简单的双特征模型,它可以很好地处理三个特定的字母(J、M和V)。这种模式也适用于整个字母表吗?在这个交互中,您将创建和测试与之前相同的kNN模型,但是13个字母(英文字母表的一半)。

load featuredata13letters.mat
features
testdata
gscatter(features.AspectRatio,features.Duration,features.Character)
xlim([0 10])
knnmodel = fitcknn(features,"Character","NumNeighbors",5);
predictions = predict(knnmodel,testdata);
misclass = sum(predictions ~= testdata.Character)/numel(predictions)
confusionchart(testdata.Character,predictions);

机器学习--手写英文字母1--分类流程相关推荐

  1. 简单的卷积神经网络,实现手写英文字母识别

    简单的卷积神经网络,实现手写英文字母识别 1 搭建Python运行环境(建议用Anaconda),自学Python程序设计 安装Tensorflow.再安装Pycharm等环境.(也可用Pytorch ...

  2. Pytorch快速搭建Alexnet实现手写英文字母识别+PyQt实现鼠标绘图

    Pytorch快速搭建Alexnet实现手写英文字母识别+PyQt实现鼠标绘图 前言 一.案例要求 二.训练数据准备 1.下载手写英文字母数据集 2.构建自己的数据集 三.AlexNet实现 1.Al ...

  3. [图像识别]pytorch实现手写英文字母识别:

    pytorch搭建CNN实现手写英文字母识别: 目录 pytorch搭建CNN实现手写英文字母识别: Part1.数据集选取: `The Chars74K` dataset: `EMNIST` dat ...

  4. 基于OCR模板匹配的手写英文字母数字识别matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 OCR技术中使用模板匹配法时首先要建立标准的模板字符库,接着将待识别字符图像与模板字符库中字符进行匹 ...

  5. 【图像识别】基于模板匹配算法实现手写英文字母识别matlab代码

    1 简介 人类文明的发展离不开信息的传递.文字一直是人们传递信息的一个重要媒介,承载着记录人类文明的重要使命.随着科技的发展,积累的文字信息日益增多,有效的存储和利用这些文字信息成为一个亟待解决的问题 ...

  6. 手把手写深度学习(8)——用LSTM生成手写英文文章

    前言:本系列前文介绍了用GANs生成手写数字,生成手写数字的任务是一件非常简单.入门的事情,因为MNIST数据集提供的,像素点非常低,最后生成的效果也非常模糊.要知道,高分辨率的生成一直是深层生成问题 ...

  7. python机器学习手写算法系列——逻辑回归

    从机器学习到逻辑回归 今天,我们只关注机器学习到线性回归这条线上的概念.别的以后再说.为了让大家听懂,我这次也不查维基百科了,直接按照自己的理解用大白话说,可能不是很严谨. 机器学习就是机器可以自己学 ...

  8. 手写英文油漆字体字体_通过手写创建字体

    手写英文油漆字体字体 At YourFonts.com you can create a font based on a sample of your handwriting, then use it ...

  9. FlyAI竞赛服务平台赛题上新——手写英文字体识别(名企内推)

    人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供 ...

最新文章

  1. junit5_使用Junit测试名称
  2. TabLayout让Fragment在ViewPager中的滑动切换更优雅
  3. 机器学习基础——支持向量机
  4. .NET Remoting
  5. Going Dutch BAPC( 状态转移DP)
  6. 估值150亿,账上还有近10亿现金,却减员500人,这家公司CEO的说法你认同吗?...
  7. PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则
  8. Java —— Reflect反射机制
  9. 关于easyui还有一个问题:easyui的开发者是国人?
  10. 数据挖掘06-基于标准差和箱体图的单指标异常点检测【原理、数据及代码】
  11. linux c 开发
  12. 卸载JLink驱动弹出“could not open INSTALL.LOG file”的解决方法
  13. layui 模板判断_浅谈layui使用模板引擎动态渲染元素要注意的问题
  14. couchbase 报 The Content of this Observable is already released. Subscribe earlier or tune the Couch
  15. bzoj 3653 [湖南集训]谈笑风生
  16. 独立站卖家如何利用Google广告引流
  17. JetBrains Fleet 初体验
  18. 微信小程序低功耗蓝牙(BLE)开发总结
  19. 使用云空间存储游戏素材
  20. z390能装2012服务器系统,b360/h370/z390主板可以安装win7系统(完美支持)

热门文章

  1. 简析NFT交易平台的发展历程及4F评估模型
  2. how2j:学习笔记
  3. mysql数据库技术答案_MySQL数据库高级技术高校邦2020答案
  4. 三星、华为、索尼、联发科等公司已参与 谷歌的 Fuchsia 项目
  5. OpenBSD,FreeBSD,Linux硬盘速度对比
  6. python异常处理
  7. HDC.Cloud 华为开发者大会2021.04.24 学习记录
  8. 智慧黄金眼(通达信指标 副图 源码 测试图)
  9. 微信小程序 手写签名_小程序手写签名(wepy)
  10. vue PC端微信扫码登录