数据预处理(去量钢化)的四大方法与python实现

做数据分析,尤其是数据建模,一半的时间都会花费在数据预处理上。但不进行预处理又不可行,因为不处理就不能很好地进行数据压缩和可视化,也不能满足模型对数据的要求。

数据预处理重要又费时,如何提高数据预处理的效率呢?数据去量钢化预处理四大方法来了, python帮你轻松实现。

01.去量钢化四大方法

  1. 标准化(StandardScaler)

StandardScaler使每个特征的平均值为0,方差为1。优点是确保每一个特征都在同一个数量级上,缺点是不能保证每个特征的最大值和最小值。

  1. 鲁棒标量化(RobustScaler)

RobustScaler原理与StandardScaler类似,使每一个特征的统计属性都位于同一范围。

RobustScalar与StandardScaler不同的是,RobustScaler使用的是中位数和四分位数。

RobustScaler会忽略异常值(即与其他多数点有非常大差异的点)。

  1. 最小最大值标量化(MinMaxScaler)

MinMaxScaler用数值本身减去最小值再除以数据范围(最大值-最小值),也使每一个特征的值都位于0和1之间。对二维数据集来说,就是使所有特征的值都位于以(0,0)和(1,1)互为对角线顶点的正方形内。

在这里插入图片描述

  1. 正态标准化(Normalizer)

Normalizer对每一个数据点进行缩放,使特征向量的欧式长度等于1。对二维数据集来说,缩放后,所有数据点位于半径为1的圆上。

在这里插入图片描述

Normalizer对不同数据点特征的值进行的缩放不是同比例的(缩放比例为其特征向量长度的倒数),即不同数据点的特征值不同,会改变数据点特征的值的相对大小。因此,当只关心数据的变化方向,而不关心数值大小时,才进行Normalizer归一化。

02.去量钢化的python实现(以MinMaxScaler为例)

1.数据准备

(1)调用cancer数据集
在这里插入图片描述

输出结果:

在这里插入图片描述

在这里插入图片描述

注:特征属性summary仅截取了部分

(2)将数据集分为测试集和训练集

分为训练集和测试集,以便后面对比相同伸缩、不同伸缩变换的影响,以及去量钢化对测试集预测精度的影响。
在这里插入图片描述

输出结果显示:测试集和训练集分别有426个数据点、143个数据点,都有30个特征。
在这里插入图片描述

  1. 调用MinMaxScaler,用fit_transform方法进行数据变换

(1)用fit方法拟合缩放器Scaler

在这里插入图片描述

(2)用transform方法进行伸缩变换
在这里插入图片描述

注:四大去量钢化方法中都内建有fit和transfrom方法,fit和transform方法可以合并使用fit_transform。

对比训练集和测试集伸缩变换前后的最小值和最大值:

在这里插入图片描述

训练集最小值、最大值:

在这里插入图片描述

测试集最小值、最大值:

在这里插入图片描述

训练集最小值和最大值分别为0和1,但测试集不是(可能有小于0的数据,也可能有大于0的数据),因为transform方法对测试集进行MinMaxScaler伸缩变换时,最小值和最大值都用的是训练集中的最小值和最大值。

使用MinMaxScaler进行相同伸缩变换后,测试集最小值不为0,最大值不为1。是否有必要对测试集单独进行伸缩变换,使其最小值和最大值分别为0和1呢?不需要,因为我们关心的不是绝对数值,只要量级相同,我们就达到了去量钢化的目的。

  1. 数据呈现与伸缩变换对比

对数据进行去量钢化预处理的主要目的之一是进行数据压缩和可视化,将数据呈现在容易观测的图形中。

可视化后,会发现:如果单独对测试集进行MinMaxScaler伸缩变换,反而会改变测试集相对训练集的数据分布,这也是不能单独对测试集进行伸缩变换的原因之一。

示例如下:

输出结果:我们发现右图中测试集(红色三角)与中间图中测试集的分布不同,并且相对训练集分布发生了变化。

在这里插入图片描述

使用cancer测试集中Feature2和Feature3进行测试,得到了相同的结论:单独对测试集进行伸缩变换后,测试集数据分布相对训练集发生了变化。

在这里插入图片描述

  1. 去量钢化有利于提升测试集预测精度

去量钢化的另一个主要目的是使数据符合模型,提升模型预测精度。

在这里插入图片描述

对比原始测试集和去量钢化后的测试集,发现:去量钢化后测试集的预测精度明显提高了。
在这里插入图片描述

更多数据科学问题,请关注公众号“数据科技社”,或者添加Amandatian1989为好友,邀请您加入群。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据预处理机器学习数据分析中是一个重要的步骤,它包括清洗、转换和整理数据,使其适合进行后续的分析和建模。在Python中,有多种常用的库和方法可以实现数据预处理,下面是其中一种常用的实现方式: 1. 导入所需的库: ```python import pandas as pd from sklearn.preprocessing import Imputer, StandardScaler ``` 2. 读取数据: ```python data = pd.read_csv('data.csv') # 假设数据存储在名为 data.csv 的文件中 ``` 3. 处理缺失值: ```python imputer = Imputer(missing_values='NaN', strategy='mean', axis=0) imputed_data = imputer.fit_transform(data) ``` 这里我们使用sklearn的Imputer类来处理缺失值。可以根据实际情况选择不同的策略,比如使用均值(mean)、中位数(median)或者众数(most_frequent)填充缺失值。 4. 特征缩放: ```python scaler = StandardScaler() scaled_data = scaler.fit_transform(imputed_data) ``` 特征缩放是将特征值缩放到一个指定的范围,常用的方法有标准化(StandardScaler)和归一化(MinMaxScaler)。这里我们使用标准化将特征值缩放为均值为0,方差为1的分布。 5. 其他数据转换操作: 根据具体任务和数据的特点,可能还需要进行其他数据转换操作,比如类别特征编码、特征选择等。这些操作可以使用pandas和其他相关的库来实现。 以上是基本的数据预处理流程,具体的实现方式会根据数据的特点和任务的要求有所不同。希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值