【scikit-learn基础】--『预处理』之 数据缩放
数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以
- 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
- 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
- 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效
本篇介绍的数据缩放处理,主要目的是消除数据的不同特征之间的量纲差异,使得每个特征的数值范围相同。这样可以避免某些特征对模型的影响过大,从而提高模型的性能。
1. 原理
数据缩放有多种方式,其中有一种按照最小值-最大值缩放的算法是最常用的。
其主要步骤如下:
- 计算数据列的最小值(
min)和最大值(max) - 对数据列中的每个值进行最小-最大缩放,即将其转换为 **[0,1]区间 **之内的一个值
缩放公式为:\(new\_data = \frac{data -min}{max-min}\)
实现缩放的代码如下:
# 数据缩放的实现原理
data = np.array([10, 20, 30, 40, 50])
min = np.min(data)
max = np.max(data)
data_new = (data - min) / (max-min)
print("处理前: {}".format(data))
print("处理后: {}".format(data_new))
# 运行结果
处理前: [10 20 30 40 50]
处理后: [0. 0.25 0.5 0.75 1. ]
数值被缩放到 **[0,1]区间 **之内。
这个示例只是为了演示缩放的过程,实际场景中最好使用scikit-learn库中的函数。
scikit-learn中的minmax_scale函数是封装好的数据缩放函数。
from sklearn import preprocessing as pp
data = np.array([10, 20, 30, 40, 50])
pp.minmax_scale(data, feature_range=(0, 1))
# 运行结果
array([0. , 0.25, 0.5 , 0.75, 1. ])
使用scikit-learn中的minmax_scale函数得到的结果是一样的,数据也被压缩到 **[0,1]区间 **之内。
所以 数据缩放 的这个操作有时也被称为归一化。
不过,数据缩放不一定非得把数据压缩到 **[0,1]区间 **之内,
通过调整feature_range参数,可以把数据压缩到任意的区间。
# 压缩到[0, 1]
print(pp.minmax_scale(data, feature_range=(0, 1)))
# 压缩到[-1, 1]
print(pp.minmax_scale(data, feature_range=(-1, 1)))
# 压缩到[0, 5]
print(pp.minmax_scale(data, feature_range=(0, 5)))
# 运行结果
[0. 0.25 0.5 0.75 1. ]
[-1. -0.5 0. 0.5 1. ]
[0. 1.25 2.5 3.75 5. ]
2. 作用
数据缩放的作用主要有:
2.1. 统一数据尺度
通过缩放处理,将不同量纲、不同尺度、不同单位的数据转换成一个统一的尺度,
避免由于数据量纲不一致而导致的数据分析结果失真或误导。
2.2. 增强数据可比性
通过缩放处理,将不同量纲、不同尺度、不同单位的数据转换成一个统一的尺度,使得不同数据之间的比较更加方便和有意义。
例如,在评价多个样本的性能时,如果采用不同的量纲、不同尺度、不同单位进行比较,会导致比较结果不准确甚至误导。
通过统一的缩放处理之后,可以消除这种影响,使得比较结果更加准确可信。
2.3. 增强数据稳定性
通过缩放处理,将数据的数值范围调整到一个相对较小的区间内,
增加数据的稳定性,避免由于数据分布范围过大或过小而导致的分析误差或计算误差。
2.4. 提高算法效率和精度
通过缩放处理,使得一些计算算法的效率和精度得到提高。
例如,在神经网络算法中,如果输入数据的尺度过大或过小,会导致算法训练时间过长或过短,同时也会影响算法的精度和稳定性。
而缩放处理之后,就可以使算法的训练时间和精度得到优化。
3. 总结
在scikit-learn库中,处理数据缩放不是只有上面的最小值-最大值缩放,
还可用StandardScaler进行标准化缩放;用RobustScaler实现尺度缩放和平移等等。
进行数据缩放时,需要注意一点,就是缩放处理对异常值非常敏感,
如果数据中存在极大或者极小的异常值时,有可能会破坏原始数据本身。
所以,缩放处理前,最好把异常值过滤掉。
【scikit-learn基础】--『预处理』之 数据缩放的更多相关文章
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- 『TensorFlow』TFR数据预处理探究以及框架搭建
一.TFRecord文件书写效率对比(单线程和多线程对比) 1.准备工作 # Author : Hellcat # Time : 18-1-15 ''' import os os.environ[&q ...
- Python基础『一』
内置数据类型 数据名称 例子 数字: Bool,Complex,Float,Integer True/False; z=a+bj; 1.23; 123 字符串: String '123456' 元组: ...
- Python基础『二』
目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...
- 『TensorFlow』专题汇总
TensorFlow:官方文档 TensorFlow:项目地址 本篇列出文章对于全零新手不太合适,可以尝试TensorFlow入门系列博客,搭配其他资料进行学习. Keras使用tf.Session训 ...
- 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理
Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...
- 『Matplotlib』数据可视化专项
一.相关知识 官网介绍 matplotlib API 相关博客 matplotlib绘图基础 漂亮插图demo 使用seaborn绘制漂亮的热度图 fig, ax = plt.subplots(2,2 ...
- 『Numpy』内存分析_高级切片和内存数据解析
在计算机中,没有任何数据类型是固定的,完全取决于如何看待这片数据的内存区域. 在numpy.ndarray.view中,提供对内存区域不同的切割方式,来完成数据类型的转换,而无须要对数据进行额外的co ...
- 『cs231n』计算机视觉基础
线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...
- 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
下图Github地址:Mask_RCNN Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...
随机推荐
- Minio 安装部署
minio 入门 简介 简介 自己看官网 https://min.io/docs/minio/kubernetes/upstream/ 安装部署 (1)Linux服务器安装 minio 可以采用以下几 ...
- 《Kali渗透基础》08. 弱点扫描(二)
@ 目录 1:OpenVAS / GVM 1.1:介绍 1.2:安装 1.3:使用 2:Nessus 2.1:介绍 2.2:安装 2.3:使用 3:Nexpose 本系列侧重方法论,各工具只是实现目标 ...
- C#中的ConcurrentExclusiveSchedulerPair类
为什么使用ConcurrentExclusiveSchedulerPair? 现实生活中的例子是一个停车场的入口和出口,多辆车可以同时进入和离开停车场,但是只有一个车辆可以进入或离开一次. 这时候就需 ...
- Hadoop单击模式运行wordcount例子
1.进入Hadoop安装目录 cd /zwy/soft/hadoop-2.7.1 2.创建文件夹input mkdir input 3.写一段文字到文件file.txt echo "hell ...
- Seata AT和XA模式
一.分布式事务产生得原因: 1.1.数据库分库分表 当数据库单表一年产生的数据超过1000W,那么就要考虑分库分表,具体分库分表的原理在此不做解释,以后有空详细说,简单的说就是原来的一个数据库变成了多 ...
- Solution -「HNOI 2010」城市建设
Description Link. 修改边权的动态 MST. Solution 讲清楚点. 修改边权的 MST,考虑对时间分治.设我们当前操作的操作区间是 \([l,r]\),直接暴力找 MST 是不 ...
- #POWERBI_指标监控(第二部分,周期内下降天数及日期明细)
在指标监控的第一部分文章中,我们已经讲了,如何用DAX去查询一段周期内连续下降或者上升指标. 需要复习的同学可以点击下方链接: https://www.cnblogs.com/simone331/p/ ...
- PostgreSQL学习笔记-6.基础知识:ALTER、TRUNCATE 、View(视图)、TRANSACTION 事务、LOCK 锁
ALTER TABLE 命令 在 PostgreSQL 中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列. 另外你也可以用 ALTER TABLE 命令添加和删除约束. 语法 用 ...
- FreeRTOS 操作系统
FreeRTOS操作系统 01 FreeRTOS 的定义和概述 定义:FreeRTOS(Free-Real-Time Operating System)是一个开源的实时操作系统内核,专门为嵌入式系统设 ...
- 传纸条 luoguP1006
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排坐成一个 mm 行 nn 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈 ...