zoukankan      html  css  js  c++  java
  • sklearn数据预处理-scale

    对数据按列属性进行scale处理后,每列的数据均值变成0,标准差变为1。可通过下面的例子加深理解:

    from sklearn import preprocessing
    import numpy as np

    测试数据:

    X = np.array([[1., -1., 2.], [2., 0., 0.], [0., 1., -1.]])

    使用sklearn进行scale处理时,有两种方式可供选择。

    方式1:直接使用preprocessing.scale()方法:

    X_scaled = preprocessing.scale(X)

    得到的X_scaled中每列的均值为0,方差为1

    方式2:使用StandardScaler类来处理

    scaler = preprocessing.StandardScaler().fit(X)

    得到的scaler会计算得出每个属性列的均值、方差,但并没有得出最终的数据处理结果。要得到X的scale结果,可以继续执行transform方法:

    X_scaled = scaler.transform(X)

    这里刚开始学习时,会有疑问:为什么transform还需要传一个X参数?

    StandardScaler将数据处理分为fit、transform两步。在fit中,仅仅计算出数据预处理算法的一些参数。比如这里主要计算出来每个列属性的均值、方差。但并没有通过算法:(x-mean)/std 对每个数据进行处理,真正的数据处理,放到了transform步骤中。

    transform的参数可以是X,这样得到的效果跟直接使用preprocessing.scale(X)相同。也可以不同,当传入的参数不同时,scale会仍然使用计算好的均值、方差,按照算法:(x-mean)/std 来对每个数据处理。

    分为fit、transform两个步骤后,那么处理训练集X时,可以fit(X),transform(X)。后面处理测试集时,直接使用transform即可。

    这可能就是sklearn.preprocessing的fit、transform两个接口的设计思路吧。

  • 相关阅读:
    windows的80端口被占用时的处理方法
    Ansible自动化运维工具安装与使用实例
    Tomcat的测试网页换成自己项目首页
    LeetCode 219. Contains Duplicate II
    LeetCode Contest 177
    LeetCode 217. Contains Duplicate
    LeetCode 216. Combination Sum III(DFS)
    LeetCode 215. Kth Largest Element in an Array(排序)
    Contest 176 LeetCode 1354. Construct Target Array With Multiple Sums(优先队列,递推)
    Contest 176
  • 原文地址:https://www.cnblogs.com/zc9527/p/6288155.html
Copyright © 2011-2022 走看看