欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器学习:数据特征预处理(归一化以及标准化对比)

程序员文章站 2022-07-16 18:20:11
...

数据特征预处理

通过特定的统计方法(数学方法)将数据转换成算法要求的数据
机器学习:数据特征预处理(归一化以及标准化对比)
第一,二组数据:3个样本,四个特征。通过预处理变成其它的特征。

数值型数据:标准缩放
1.归一化
2.标准化
3.缺失值

类别型数据:one-hot编码
时间类型:时间的切分

sklearn 特征处理API:
-sklearn.preprocessing

归一化:API: sklearn.preprocessing.MinMaxScaler

特点:通过对原始数据进行变换把数据映射到(默认为【0,1】)之间
机器学习:数据特征预处理(归一化以及标准化对比)

机器学习:数据特征预处理(归一化以及标准化对比)
这里我简单的说明一下计算的方法:先看特征1和样本1的归一化计算的值。
特征1这一列最大值是90 最小值是30 mx是1 mi是0
x’=90-60/90-60=1 x’’=1(1-0)+0=1
所以样本1特征1的归一化数值就是1

MinMaxScaler语法:
-MinMaxScalar(feature_range=(0,1)…)
每个特征缩放到给定范围(默认[0,1])
-MinMaxScalar.fit_transform(X)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

归一化步骤:

from sklearn.preprocessing import MinMaxScaler

def mm():
    """归一化处理"""
    #mm=MinMaxScaler(feature_range=(2,3)) 可以设定归一化的范围,默认是[0,1]
    mm=MinMaxScaler()
    data=mm.fit_transform([[90,2,10,40],
                      [60,4,15,45],
                      [75,3,13,46]])
    print(data)
    return None

if __name__ == '__main__':
    mm()

机器学习:数据特征预处理(归一化以及标准化对比)

归一化案例:约会对象数据
相亲约会对象数据,这个样本时男士的数据,三个特征,玩游戏所消耗时间的
百分比、每年获得的飞行常客里程数、每周消费的冰淇淋公升数。然后有一个
所属类别,被女士评价的三个类别,不喜欢didnt、魅力一般small、极具魅力large
也许也就是说飞行里程数对于结算结果或者说相亲结果影响较大,但是统计的
人觉得这三个特征同等重要。
机器学习:数据特征预处理(归一化以及标准化对比)

每个样本有三个特征,一个评价。首先我们看三个特征可以去评价出一些结果:比如说一个样本的飞行里程数,可以看出这个样本可能天天坐飞机,可能很有钱,但是如果天天在飞机上可能在家的时间就会非常少。所以说不能通过一个特征去判断,所以可能其他特征也特别的重要,所有我们需要对数据进行归一化。这只是简单的理解
归一化目的:使一个特征对最终结果不会造成更大的影响

注意:如果数据中异常点比较多,意味着数据不对,这个时候我们需要通过公式去判断,如果说统计了一个数据,最大值为异常点,所以说每一列的特征和归一化计算公式中的数据全部变化了,造成了很大的影响。

归一化的缺点:对异常点的处理不好

归一化总结:
注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性(产品稳定性)较差,只适合传统精确小数据场景。所以一般都不使用归一化

标准化(常用的方法):API scikit-learn.preprocessing.StandardScaler

特点:通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
机器学习:数据特征预处理(归一化以及标准化对比)
简单介绍一下这个算法:
机器学习:数据特征预处理(归一化以及标准化对比)
还是的注意这里是每一列进行计算。
每一列的平均值mean:112.5
方差:std=(90-112.5)²+(60-112.5)²+(75-112.5)²/3
标准差:σ= √std

结合归一化来谈标准化:
异常点对平均值的影响不是很大,对于标准差产生的影响更小。
考虑极端情况下:方差为0,所以说每一个点的特征值都一样,方差越来越大数据离散得就比较开
机器学习:数据特征预处理(归一化以及标准化对比)
StandardScaler语法:
StandardScaler(…)处理之后每列来说所有数据都聚集在均值0附近标准差为1
-StandardScaler.fit_transform(X,y)
X:numpy array格式的数据[n_samples,n_features]
返回值:转换后的形状相同的array

-StandardScaler.mean_
原始数据中每列特征的平均值

-StandardScaler.std_
原始数据每列特征的方差

from sklearn.preprocessing import StandardScaler
def stand():
    """标准化缩放"""
    std=StandardScaler()
    data=std.fit_transform([[ 1., -1., 3.],
                            [ 2., 4., 2.],
                            [ 4., 6., -1.]])
    print(data)

if __name__ == '__main__':
    stand()

机器学习:数据特征预处理(归一化以及标准化对比)
标准化总结:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

create by 0125c