首页 > 其他分享 >【scikit-learn基础】--『预处理』之 数据缩放

【scikit-learn基础】--『预处理』之 数据缩放

时间:2023-12-15 09:15:26浏览次数:28  
标签:缩放 min -- 数据 scikit 处理 minmax data

数据的预处理是数据分析,或者机器学习训练前的重要步骤。
通过数据预处理,可以

  • 提高数据质量,处理数据的缺失值、异常值和重复值等问题,增加数据的准确性和可靠性
  • 整合不同数据,数据的来源和结构可能多种多样,分析和训练前要整合成一个数据集
  • 提高数据性能,对数据的值进行变换,规约等(比如无量纲化),让算法更加高效

本篇介绍的数据缩放处理,主要目的是消除数据的不同特征之间的量纲差异,使得每个特征的数值范围相同。这样可以避免某些特征对模型的影响过大,从而提高模型的性能。

1. 原理

数据缩放有多种方式,其中有一种按照最小值-最大值缩放的算法是最常用的。
其主要步骤如下:

  1. 计算数据列的最小值(min)和最大值(max
  2. 对数据列中的每个值进行最小-最大缩放,即将其转换为 **[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实现尺度缩放和平移等等。

进行数据缩放时,需要注意一点,就是缩放处理对异常值非常敏感,
如果数据中存在极大或者极小的异常值时,有可能会破坏原始数据本身。
所以,缩放处理前,最好把异常值过滤掉。

标签:缩放,min,--,数据,scikit,处理,minmax,data
From: https://www.cnblogs.com/wang_yb/p/17902620.html

相关文章

  • C++(cmake-build-debug 和 cmake-build-release)
    cmake-build-debug和cmake-build-release是两个默认的构建目录名称,通常在使用CMake构建项目时生成。以下是它们的主要作用和区别:1.cmake-build-debug:这是一个用于调试构建的默认构建目录名称。在这个目录下,CMake会生成包含调试信息的可执行文件,以方便在调试器中进行调试......
  • 快速探索 Tetragon:基于 eBPF 的安全可观察性和执行工具
    Tetragon是一种灵活的安全可观察性和运行时策略执行工具,可直接使用eBPF应用策略和过滤,从而减少了监控、进程跟踪以及实时执行策略的开销。Tetragon提供了如下功能:监控进程执行监控文件操作监控网络活动执行策略最后一个侧重策略的执行,可以通过发送信号或覆盖系统调用......
  • json好玩的库
    一、DeepDiff DeepDiff是一个Python库,用于比较Python对象的深度差异。能够比较各种数据类型,包括列表、元组、字典、集合、字符串、整数、浮点数等,并给出它们之间的差异。DeepDiff是提供一种简单且易于理解的方式来比较Python对象的差异。安装:pipinstalldeepdiff==6.7.1......
  • Mysql Order 排序的时候占用很长时间解决思路
    MySQL中的连表查询(JOIN)在进行ORDERBY排序时可能会变得很慢,尤其是当处理大量数据时。以下是一些优化策略,可以帮助减少排序操作的时间:索引优化:确保参与排序的列上有索引。如果排序的列是从JOIN的表中来的,那么在这些列上创建索引可能会提高性能。如果可能,尝试将索引的顺序与ORD......
  • os
    os模块(1)导入模块importos(2)获取当前文件路径abspathfile_path=os.path.abspath(__file__)(3)获取当前文件所在文件夹的路径dirnamebase_dir=os.path.dirname(__file__)(4)拼接路径path=os.path.join(r'D:\2023propygo\day\day15\day15','无参装饰器练习.py')ba......
  • 生成器
    生成器生成器一定是迭代器,迭代器不一定是生成器可以在需要时生成数据,通过生成器,可以逐个生成序列中的元素,而无需一次性生成整个序列生成器也能用next()方法,因为生成器是一种特殊的迭代器【一】生成器的两种创建方式(1)列表生成式列表num_list=[iforiinrange(10)......
  • Docker相关概念
    镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。(安装包)容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。仓库(repository):仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库! 一切......
  • 模块与包&相对绝对路径
    【一】模块与包(1)什么是模块在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。(2)模块的来源内置的:python解释器自带的,直接拿来使用的第三方的:别人写的,如果想用,就要先下载在使用自定义的:我们自己写的(3)模块的存在形式......
  • Chrome扩展开发实战:快速填充表单
    大家好,我是dom哥。我正在写关于Chrome扩展开发的系列文章,感兴趣的可以点个小星星。填表单是打工人经常面对的场景,作为一个前端,我经常开发一些PC端的页面,它们主要由表单和表格构成,而输入框又是表单里最常见的表单项。接下来就试着做一个简单的小扩展,用于快速给表单里的输入......
  • 参数校验与国际化:提高代码稳定性和可维护性的重要方法
    在我们日常的工作中,参数校验是一项非常重要的任务。它能够帮助我们确保代码的稳定性和可靠性,避免因为参数错误而导致的意外情况发生。参数校验通常包括对输入参数的合法性、格式的检查等。而为了提高代码的可维护性和可重用性,我们可以使用一些常见的参数校验方法。另外,国际化也是......