数据集特征预处理

编程入门 行业动态 更新时间:2024-10-26 02:37:30

数据集<a href=https://www.elefans.com/category/jswz/34/1769701.html style=特征预处理"/>

数据集特征预处理

1、什么是特征预处理

1.1、什么是特征预处理

  • scikit-learn的解释

provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.

翻译过来:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

可以通过下面那张图来理解

1.2、包含内容

  • 数值型数据的无量纲化:
    • 归一化
    • 标准化

1.3、特征预处理API

sklearn.preprocessing

为什么我们要进行归一化/标准化?
特征的单位或者大小相差较大或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征;

约会对象数据


我们需要用到一些方法进行无量纲化使不同规格的数据转换到同一规格

2、归一化

2.1、定义

通过对原始数据进行变换把数据映射到(默认为[0,1])之间

2.2、公式

作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,
mx,mi分别为指定区间值默认mx为1,mi为0

那么怎么理解这个过程呢?我们通过一个例子

2.3、API

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

2.4、数据计算

我们对以下数据进行运算,在dating.txt中。保存的就是之前的约会对象数据

milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1

import pandas as pd
from sklearn.preprocessing import MinMaxScalerdef minmax_demo():"""归一化演示:return: None"""data = pd.read_csv("dating.txt")print(data)# 1、实例化一个转换器类transfer = MinMaxScaler(feature_range=(0, 1))# 2、调用fit_transformdata = transfer.fit_transform(data[['milage','Liters','Consumtime']])print("最小值最大值归一化处理的结果:\n", data)return Noneif __name__ == '__main__':minmax_demo()

结果:

最小值最大值归一化处理的结果:[[0.44832535 0.39805139 0.56233353][0.15873259 0.34195467 0.98724416][0.28542943 0.06892523 0.47449629]...[0.29115949 0.50910294 0.51079493][0.52711097 0.43665451 0.4290048 ][0.47940793 0.3768091  0.78571804]]

问题:如果数据中异常点较多,会有什么影响?

  • 归一化总结
    注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差(健壮性),只适合传统精确小数据场景。

怎么办?

3、标准化

3.1、定义

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

3.2、公式

  • 作用于每一列,mean为平均值,σ为标准差
    所以回到刚才异常点的地方,我们再来看看标准化
  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

3.3、API

  • sklearn.preprocessing.StandardScaler( )
    • 处理之后每列来说所有数据都聚集在均值0附近标准差差为1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

3.4、数据计算

import pandas as pd
from sklearn.preprocessing import StandardScalerdef stand_demo():"""标准化演示:return: None"""data = pd.read_csv("dating.txt")print(data)# 1、实例化一个转换器类transfer = StandardScaler()# 2、调用fit_transformdata = transfer.fit_transform(data[['milage', 'Liters', 'Consumtime']])print("标准化的结果:\n", data)print("每一列特征的平均值:\n", transfer.mean_)print("每一列特征的方差:\n", transfer.var_)return Noneif __name__ == '__main__':stand_demo()

结果:

标准化的结果:[[ 0.33193158  0.41660188  0.24523407][-0.87247784  0.13992897  1.69385734][-0.34554872 -1.20667094 -0.05422437]...[-0.32171752  0.96431572  0.06952649][ 0.65959911  0.60699509 -0.20931587][ 0.46120328  0.31183342  1.00680598]]
每一列特征的平均值:[3.36354210e+04 6.55996083e+00 8.32072997e-01]
每一列特征的方差:[4.81628039e+08 1.79902874e+01 2.46999554e-01]

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

更多推荐

数据集特征预处理

本文发布于:2023-12-04 07:07:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1660133.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:特征   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!