码迷,mamicode.com
首页 > 其他好文 > 详细

sklearn进行归一化

时间:2018-08-24 23:37:23      阅读:391      评论:0      收藏:0      [点我收藏+]

标签:bsp   sklearn   RoCE   led   standard   利用   std   转换   div   

  利用神经网络预测数据时,突然就被一个以前从来没想过的问题困扰了,训练集与测试集应该分别进行归一化还是合并为一个大的矩阵统一进行归一化?如果放在一起,测试集会参与到模型的训练当中,感觉不对。如果分开,怎么对测试集进行归一化呢?

  咨询老师,得到了答案,记录如下:

  用训练集归一化,并记录归一化需要用到的参数(如果是最大最小归一化,记录最大最小值,如果是z-score,则记录均值与方差),再利用训练集的属性对新来的测试集进行归一化。用训练集代替总体样本分布,这也是机器学习的基本假设。

  z-score归一化,公式为:(X-mean)/std  计算时对每个属性/每列分别进行。将数据按期属性(按列进行)减去其均值,并处以其方差。得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1。

  用sklearn进行可以使用以下两个接口:

  (1)使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化。

>>> from sklearn import preprocessing
>>> import numpy as np
>>> X = np.array([[ 1., -1.,  2.],
...               [ 2.,  0.,  0.],
...               [ 0.,  1., -1.]])
>>> X_scaled = preprocessing.scale(X)

  

>>> X_scaled                                         
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

  

>>>#处理后数据的均值和方差
>>> X_scaled.mean(axis=0)
array([ 0.,  0.,  0.])
 
>>> X_scaled.std(axis=0)
array([ 1.,  1.,  1.])

  (2)使用sklearn.preprocessing.StandardScaler类,使用该类的好处在于可以保存训练集中的参数(均值、方差)直接使用其对象转换测试集数据。正好解释了我一开始关于训练集、测试集归一化问题。

>>> scaler = preprocessing.StandardScaler().fit(X)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)
 
>>> scaler.mean_                                     
array([ 1. ...,  0. ...,  0.33...])
 
>>> scaler.var_                                      
array([ 0.81...,  0.81...,  1.24...])
 
>>> scaler.transform(X)                              
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])
 
 
>>>#可以直接使用训练集对测试集数据进行转换
>>> scaler.transform([[-1.,  1., 0.]])               
array([[-2.44...,  1.22..., -0.26...]])

  

sklearn进行归一化

标签:bsp   sklearn   RoCE   led   standard   利用   std   转换   div   

原文地址:https://www.cnblogs.com/dearL/p/9532288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!