据预处理是总称,涵盖了数据分析师使用它将数据转处理成想要的数据的一系列操作。例如,对某个网站进行分析的时候,可能会去掉 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. 外卖app的header组件开发

    1.webpack框架创建 # 全局安装 vue-cli $ npm install --global vue-cli # 创建一个基于 webpack 模板的新项目 $ vue init webpa ...

  2. MySQL数据库入门(建库和建表)--陈远波

    建库.建表 1.建库 (1)SQL语句命令建库: Create database数据库名称  (该方法创建的数据库没有设置编码乱码) 1 2 3 4 5 -- 创建数据库时,设置数据库的编码方式 -- ...

  3. 配置linux下apache跨域问题

    1.apache设置允许远程访问 打开FTP,登录服务器,找到etc文件夹下的httpd.conf文件,然后下载到本地 打开本地httpd.conf文件夹,找到对应的端口ip地址,修改如下 <V ...

  4. 《MYSQL》----字符串的复杂函数,检索的七-天-排-重

    接到了一个新的需求,拿到需求的时候瞬间有点头大,因为实在是有些棘手. 我们这个系统本身是个接口系统,总接口数大概在200个左右.外部会有很多用户在 不同的时间拿着不同参数去调我们的这些接口,用户的调集 ...

  5. Robot Framework学习笔记(五)------Collections 库

    Collections 库同样为 Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 1.添加类 在使用之前需要在测试套件(项目)中添加 2.创建字典 字典也是 ...

  6. XCopy命令实现增量备份

    xcopy XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件:使用时源盘符.源目标路径名.源文件名至少指定一个:选用/S时对源目录下及其子目录下的所有文件进行C ...

  7. Jenkins:基于linux构建ivy项目

    Jenkins:基于linux构建ivy项目 (二) 基于以上<Jenkins:VMware虚拟机Linux系统的详细安装和使用教程(一)>的配置再进行对ivy项目构建: 启动tomcat ...

  8. JavaScript Dom入门

    好像代码太杂了,博客园里跑不起来,单独复制到html中本地测试都是没有问题的. JavaScript JavaScript 是属于 web 的语言,它适用于 PC.笔记本电脑.平板电脑和移动电话. J ...

  9. 通过ArcMap发布服务

    打开ArcMap,添加一个空地图 单击添加数据按钮 单击之后出现下图 点击 (连接到文件夹)按钮选择要添加的文件.添加之后如下. 保存为mxd文件 点击保存按钮就可以保存为mxd格式文件. 选择 Fi ...

  10. 基于SpringBoot开发一个Restful服务,实现增删改查功能

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...