据预处理是总称,涵盖了数据分析师使用它将数据转处理成想要的数据的一系列操作。例如,对某个网站进行分析的时候,可能会去掉 html 标签,空格,缩进以及提取相关关键字。分析空间数据的时候,一般会把带单位(米、千米)的数据转换为“单元性数据”,这样,在算法的时候,就不需要考虑具体的单位。数据预处理不是凭空想象出来的。换句话说,预处理是达到某种目的的手段,并且没有硬性规则,一般会跟根据个人经验会形成一套预处理的模型,预处理一般是整个结果流程中的一个环节,并且预处理的结果好坏需要放到到整个流程中再进行评估。

本次,只使用缩放数值数据来说明预处理的重要性,数值数据:值包含数字,缩放:使用基本的运算来改变数据的范围。最后,将会使用真实的数据来演示缩放预处理提升了结果。
首先,简单说一下机器学习和 KNN(k-Nearest Neighblors)的分类问题,分类问题是他们里面最简单的算法。为了体现缩放数据的重要性,还会介绍模型评估方式和训练集、测试集的概念。这些概念和操作都会在分类红酒质量的时演示。演示的时候会看到预处理前后对结果的影响。

机器学习分类问题简介

分类和标记问题是一个们古老的艺术。比如,亚里士多德构建的生物分类系统。现在,分类一般都是作为机器任务任务的一个通用框架,特别是监督学习。监督学习的基本概念也不复杂,这样的数据中包含预测参数和预测目标结果,监督学习的目标是构建善于通过给出的预测参参数预测目标结果的模型。如果目标结果包含分类信息(如,‘good’,'bad'),这就是所说分类学习任务。如果目标结果是不断变化的,这就是一个回归任务。
介绍一个有用的数据集:心脏病数据集,其中有 75 个预测参数,如,‘age’,‘sex’以及目标结果,心脏病患病概率范围是0(无病)-4。对这个数据集的大部分分析集中在预测是否出现心脏病。这就是一个分类任务。如果是预测0-4的实际值,那么,就是回归问题。以后再讨论回归问题。这次主要讨论分类任务重最简单的算法,KNN。

机器学习的 KNN 分类

假设已经有一些标记好的数据,例如,包含红酒特征的数据,预测参数:alcohol content, density, amount of citric acid, pH,目标结果:Quality(good,bad)。然后,使用特征的新数据,没有标记结果,分类任务就是去预测结果 Quality。如果所有的预测参数都是数值,我们就可以想象一个 n 为空间,每行/红酒作为空间中的一个点。KNN 是概念和计算都很简单的分类方法,我们计算这些没有标记的数据行,在 n 维空间中,最近的 K 个已经标记过的邻居。然后,根据这 K 个邻居的标签,good 或 bad,再将命中率最高(占比最高)的标签值给新的预测数据(例如,如果 K=10,其中 7 个 good,3 个 bad,结果就是 good)。注意,这里没有 fit 参数。
   

图说 K 邻近

下面是 KNN 的一个 2D 图。思考一下,中间绿色问好的点应该如何分类。如果 K = 5,分类就是蓝色,,如果 k = 10 ,结果又如何呢?
 

Scikit Learn KNN

我们接下来看一下 KNN 的例子。我们将红酒质量数据集加载到 pandas 的 DataFrame 中,然后通过直方图看下数据基本信息
我们看下这两个预测变量,free sulfur dioxide 的范围 1-72,volatile acidity 的范围是 0.12-1.58。简单的说就是,前一个的的范围和数量级都比后一个大很多。像 KNN 这样的算法,关心的是两个数据点之间的距离,因此,算法可能会将关注点直接放在范围更范围的变量上,这样就会对范围小的变量不公平,像 free sulfur dioxide 可能还会有噪点,这样的数据必然会导致结果准确度有所降低。这就是为什么要缩放我们即将使用的数据。
现在目标结果就是红酒的‘Quality’率,它的范围是 3 到 8。简单起见,将这个范围转换为二分类,大于 5 -> good,小于等于 5 -> bad。下面用直方图说明一下二分类前后目标结果的变化:

接下来我们就准备执行 KNN。我们本次的目的是比较我们的模型在有无缩放处理的情况下的结果优劣,既然要区分结果的优劣我们就需要一个评价标准。
 

如何评价 KNN 结果

有很多对分类的评价方式/指标,最终重要的是,要认识到方式/指标的选择是一个很有深度的领域,并且需要具体问题具体分析。对于平衡类(目标结果,要么是是,要么是否)数据集,通常将准确性作为评价标准。事实上,在 scikit learn 中 KNN 和逻辑回归默认评分方法就是精度。那么,什么是精度呢?它就是正确预测的数量除以预测的总数:
Accuracy = 正确预测数量/预测总数
 

KNN 的使用和训练测试的分割

我们就使用上面介绍的江都作为衡量的标准,如果我们把先有的数据都作为训练模型用,我们应该用什么数据集来作为计算精度的数据呢?我们需要一个能很好推广到新数据的模型。也就是说,如果我们在数据集 A 上训练模型,也使用数据集 A 计算精度,那么得出的结果远远好于实际结果。这就是我们常说的过拟合。为了解决这个问题,通常会选取数据集中的一部分作为训练集,然后,在训练集上训练模型,再使用剩下的数据集进行评估。我们也是要这么做的。一般的经验规则是使用大约 80% 的数据用于训练,剩下 20% 的数据用于测试。现在我们就可以分析红酒质量数据了:
 
现在我构建 KNN 模型,对测试集进行预测,为了评估模型,我们需要对比预测值和真实值:
在 scikit learn 中精度是 KNN 的默认评分方法,精度的结果是 61%,这个结果并不好,但对于没有任何预处理的结果来说,也并不是太坏。
 
预告 [数据预处理]-中心化 缩放 KNN(二)
使用其他的评估方法(reacll,f1)重新评估结果
使用预处理将精度结果再提高 10% 左右
完整的代码
 
 

[数据预处理]-中心化 缩放 KNN(一)的更多相关文章

  1. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)

    上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何? 首先我们先了解一下 召回率和 f1. 真实结果 预测结果 预测结果   正例 反例 正例 TP 真 ...

  2. 机器学习实战基础(九):sklearn中的数据预处理和特征工程(二) 数据预处理 Preprocessing & Impute 之 数据无量纲化

    1 数据无量纲化 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”.譬如梯度和矩阵为核心的算法中,譬如逻辑回 ...

  3. 一个轻client,多语言支持,去中心化,自己主动负载,可扩展的实时数据写服务的实现方案讨论

    背景 背景是设计一个实时数据接入的模块,负责接收client的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(兴许提供HBase上的查询),或先持久化到Kafka里.方便兴许进行一些 ...

  4. 数据预处理:规范化(Normalize)和二值化(Binarize)

    注:本文是人工智能研究网的学习笔记 规范化(Normalization) Normalization: scaling individual to have unit norm 规范化是指,将单个的样 ...

  5. 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用  c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网

    任何国家都无法限制数字货币.为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用  c.分布式算法的实现 d.数据存储技 ...

  6. 数据预处理 | 使用 Pandas 进行数值型数据的 标准化 归一化 离散化 二值化

    1 标准化 & 归一化 导包和数据 import numpy as np from sklearn import preprocessing data = np.loadtxt('data.t ...

  7. 机器学习实战基础(十二):sklearn中的数据预处理和特征工程(五) 数据预处理 Preprocessing & Impute 之 处理分类特征:处理连续性特征 二值化与分段

    处理连续性特征 二值化与分段 sklearn.preprocessing.Binarizer根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量.大于阈值的值映射为1,而小于或等于阈值的值 ...

  8. python数据预处理for knn

    机器学习实战 一书中第20页数据预处理,从文本中解析数据的程序. import numpy as np def dataPreProcessing(fileName): with open(fileN ...

  9. Scikit-learn:数据预处理Preprocessing data

    http://blog.csdn.net/pipisorry/article/details/52247679 本blog内容有标准化.数据最大最小缩放处理.正则化.特征二值化和数据缺失值处理. 基础 ...

随机推荐

  1. 由linux命令谈学习操作系统的重要性

    linux命令妙趣横生,喜欢敲命令行的人会深有体会,但是没有系统学习过操作系统的话,很多命令还是难以理解的.讲实在话,大多数linux爱好者常敲的都是这些方面的: 文件系统 磁盘 网络 系统状态 账户 ...

  2. Git详解之四:服务器上的Git

    服务器上的 Git 到目前为止,你应该已经学会了使用 Git 来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我们不鼓励这样做 ...

  3. Asp.net MVC在Razor中输出Html的两种方式

    http://qubernet.blog.163.com/blog/static/177947284201485104616368/ Razor中所有的Html都会自动编码,这样就不需要我们手动去编码 ...

  4. Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理

    对于传统的使用关系型数据库的大型软件产品,后台数据库的持续开发和维护可能会产生大量的脚本文件,针对这些脚本文件应该怎样比较方便的进行版本管理,以及如何快捷的在团队之间进行权限等协作管理呢?不同的数据库 ...

  5. Python的__getattr__和__getattribute__

    __getattr____getattr__在当前主流的Python版本中都可用,重载__getattr__方法对类及其实例未定义的属性有效.也就属性是说,如果访问的属性存在,就不会调用__getat ...

  6. IntelliJ IDEA2017.3 激活

    网上IntelliJ IDEA激活方式大多均已失效,目前常用激活方式为License Server 激活: http://idea.imsxm.com/ NOTE: 在上周五2017-12-1那天还是 ...

  7. [js高手之路]html5 canvas动画教程 - 边界判断与反弹

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 边界反弹: 当小球碰到canvas的四个方向的 ...

  8. [js高手之路] 我的开源javascript框架gdom - 选择器用法

    gdom框架是我开发的一款dom和字符串处理框架,目前版本是1.0.0. 使用方法跟jquery是差不多的, 会用jquery就会用gdom,目前 1.0.0版本的选择器完全支持CSS3选择器.没有做 ...

  9. 深入理解cookie和session

    cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结. 1.cookie存在于浏览器 随意打开一个网址,用火狐的调试工具,随意选取一个链 ...

  10. python基础(八)生成器,迭代器,装饰器,递归

    生成器 在函数中使用yield关键字就会将一个普通的函数变成一个生成器(generator),普通的函数只能使用return来退出函数,而不执行return之后的代码.而生成器可以使用调用一个next ...