No.1. 通常情况下,直接将训练得到的模型应用于真实环境中,可能会存在很多问题

No.2. 比较好的解决方法是,将原始数据中的大部分用于训练数据,而留出少部分数据用于测试,即,将数据集切分成训练数据集和测试数据集两部分,先通过训练数据集得到一个模型,然后通过测试数据集来检验模型的性能是否满足我们的要求,根据测试结果的好坏判断模型是否需要进行改进和优化

No.3. 我们通过鸢尾花数据集来测试kNN算法的分类准确性,首先是数据准备工作

No.4. 我们可以将上述过程封装到函数中

No.5. 调用我们封装的数据集切分函数

No.6. 调用自己封装的KNNClassifier类,测试其分类准确性

 
No.7. 调用scikit-learn中的数据集切分函数train_test_split

 
No.8. 接下来,我们再通过sklearn提供的手写数字数据集digits来测试一下kNN算法的分类准确性,首先是数据准备工作

No.9. 查看一下数据集的详细描述信息

从上面的描述信息中可以了解到,这个数据集共有5620个数据实例,每个实例有64个属性(特征),这64个属性实际组成了8x8像素的图片,每个像素点的取值范围是0-16,这个数据集共分为10个类别,即0-9这10个数字。另外需要注意的一点是,这个数据集只是原数据集的一个简化副本,它实际上只存储了不到2000个数据实例。

No.10. 我们具体查看一下数据集的特征

即,数据集共存储了1797个数据实例,每个实例都有64个特征

即,这1797个数据实例都有对应的标签,标签共分为10个类别,分别为0, 1, 2, 3, 4, 5, 6, 7, 8, 9

简单查看前100个数据实例对应的标签,发现这些数据并没有按照不同类别分类存放

简单查看前5个数据实例的具体数据信息,发现每个数据实例对应一个由64个数字构成的向量
 
随便选取一个数据实例进行可视化

No.11. 调用我们实现的数据切分函数对数据集进行切分,再调用我们是实现的KNNClassifier类,测试其分类准确性

No.12. 上面在测试分类准确性的时候,计算准确性的过程还没有进行封装,我们将其封装如下:

测试一下封装好的函数:

No.13. 某些情况下,我们对预测值具体是什么并不感兴趣,我们可能只想知道我们模型预测结果的准确性,这种情况下,是没有必要手动计算一遍预测值的,我们可以封装一个接口,直接获取到模型预测结果的准确性,在kNNClassifier类中添加一个方法实现这个功能:

测试一下这个接口:

No.14. 调用sklearn提供的数据切分函数对数据集进行切分,再调用sklearn提供的KNeighborsClassifier类,测试其分类准确性

第四十七篇 入门机器学习——分类的准确性(Accuracy)的更多相关文章

  1. 第四十三篇 入门机器学习——Numpy的基本操作——Fancy Indexing

    No.1. 通过索引快速访问向量中的多个元素 No.2. 用索引对应的元素快速生成一个矩阵 No.3. 通过索引从矩阵中快速获取多个元素 No.4. 获取矩阵中感兴趣的行或感兴趣的列,重新组成矩阵 N ...

  2. 第四十篇 入门机器学习——Numpy.array的基本操作——向量及矩阵的运算

    No.1. Numpy.array相较于Python原生List的性能优势 No.2. 将向量或矩阵中的每个元素 + 1 No.2. 将向量或矩阵中的所有元素 - 1 No.3. 将向量或矩阵中的所有 ...

  3. 第三十七篇 入门机器学习——Numpy基础

    No.1. 查看numpy版本 No.2. 为了方便使用numpy,在导入时顺便起个别名 No.3. numpy.array的基本操作:创建.查询.修改 No.4. 用dtype查看当前元素的数据类型 ...

  4. 第四十九篇 入门机器学习——数据归一化(Feature Scaling)

    No.1. 数据归一化的目的 数据归一化的目的,就是将数据的所有特征都映射到同一尺度上,这样可以避免由于量纲的不同使数据的某些特征形成主导作用.   No.2. 数据归一化的方法 数据归一化的方法主要 ...

  5. 第四十六篇 入门机器学习——kNN - k近邻算法(k-Nearest Neighbors)

    No.1. k-近邻算法的特点 No.2. 准备工作,导入类库,准备测试数据 No.3. 构建训练集 No.4. 简单查看一下训练数据集大概是什么样子,借助散点图 No.5. kNN算法的目的是,假如 ...

  6. Jmeter(四十七) - 从入门到精通高级篇 - 分布式压测部署之负载机的设置(详解教程)

    1.简介 千呼万唤始出来,这一篇感觉写了好久,总想写的清楚明白简洁,但是还是洋洋洒洒写了好多,希望大家喜欢吧!本来打算将这一篇文章是放在性能测试中讲解和分享的,但是有的童鞋或者小伙伴们私下问的太多了, ...

  7. 第四十四篇 入门机器学习——matplotlib基础——实现数据可视化

    No.1. 绘制一条正弦曲线 No.2. 在一张图中绘制多条曲线 No.3. 可以为曲线指定颜色.线条样式 No.4. 可以指定横纵坐标轴的范围 也可以使用: No.6. 可以为每条曲线添加图示 No ...

  8. 第四十二篇 入门机器学习——Numpy的基本操作——索引相关

    No.1. 使用np.argmin和np.argmax来获取向量元素中最小值和最大值的索引 No.2. 使用np.random.shuffle将向量中的元素顺序打乱,操作后,原向量发生改变:使用np. ...

  9. Python之路(第四十七篇) 协程:greenlet模块\gevent模块\asyncio模块

    一.协程介绍 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 协程相比于线程,最大的区别在于 ...

随机推荐

  1. ZedGraph5.1.5源码分析去掉鼠标悬浮内容闪烁问题(附源码下载)

    场景 在使用ZedGraph绘制曲线图时,将鼠标悬浮时内容闪烁,且频率很高. 找到其源码,发现不论鼠标移动的范围大小,甚至乎不论鼠标是否移动,都要刷新一次Tooltip. 注: 博客主页:https: ...

  2. Java输入和输出数组(加逗号)

    输入示例 61,2,3,4,5,6 输出示例 1,2,3,4,5,61,2,3,4,5,6 import java.util.Scanner; public class Demo01 { public ...

  3. JavaSE学习笔记(3)---面向对象三大特性

    JavaSE学习笔记(3)---面向对象三大特性 面向对象的三大特征:继承.封装.多态 1.封装 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.然 ...

  4. webdriver中的定位\模拟\及实例

    Selenium webdriver 下载 pip install selenium pip install -i https://pypi.doubanio.com/simple/ selenium ...

  5. JS函数深入

    函数的本质是对象 三种定义方式 1.  字面量=function声明 function add() { // body... } add(); 2.  var赋值表达式 var add = funct ...

  6. Java安全笔记

    前言 后端接口开发中,涉及到用户私密信息(用户名.密码)等,我们不能传输明文,必须使用加密方式传输.这次政府项目中,安全测试组提出了明文传输漏洞,抽空研究了下Java加解密相关知识,记录下. 散列函数 ...

  7. densenet思路 以及和残差网络区别,pytorch实现

    densenet思路 以及和残差网络区别,pytorch实现 待办 densenet思路以及和残差网络区别.以及densenet的pytorch实现 https://zhuanlan.zhihu.co ...

  8. LeetCode 728. 自除数

    题目链接:https://leetcode-cn.com/problems/self-dividing-numbers/ 给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数 ...

  9. Leetocode7道买卖股票问题总结(121+122+123+188+309+901+714)

    题目1----121. 买卖股票的最佳时机I: 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ 给定一个数组, ...

  10. Dubbo服务暴露分析

    Dubbo的服务暴露是一个重要的特性,了解其机制很重要.之前有很多人写了有关的源代码分析,在本文中不再重新分析.官方文档中的一篇写的就很好,本文主要是有关内容进行补充与总结. 传送门:服务导出 为什么 ...