美文网首页Tensorflow实践
使用Sklearn的MinMaxScaler做最简单的归一化

使用Sklearn的MinMaxScaler做最简单的归一化

作者: 一块自由的砖 | 来源:发表于2020-01-02 18:44 被阅读0次

    什么是归一化

    归一化是一种无量纲处理手段,使物理系统数值的绝对值变成某种相对值关系。简化计算,缩小量值的有效办法。

    为什么要做归一化两个好处

    1.提升模型的收敛速度

    如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)


    image

    2.提升模型的精度

    归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
    在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。
    在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析。数据标准化也就是统计数据的指数化。数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值都处于同一个数量级别上,可以进行综合测评分析。
    从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。


    image

    使用MinMaxScaler进行数据归一化和还原

    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import MinMaxScaler
    
    #数据处理
    #从csv读取数据
    dataset = pd.read_csv('./000001.csv', encoding = 'gb18030')
    #print(dataset)
    #数据集的维度
    print(dataset.shape)
    #将开盘价转换为整数
    dataset['开盘价'] = dataset['开盘价'].astype(int)
    # 列名选取行
    dataframeDataset = dataset.loc[1:, ['日期', '开盘价']]
    ndarrayDataset = dataframeDataset.values
    #print(ndarrayDataset)
    #画图大盘数据图
    #plt.plot(narrayDataset[:,0], narrayDataset[:,1])
    #plt.show()
    #对大盘数据进行,数据归一化
    stock_dataset = narrayDataset[:,1]
    #显示部分数据 0-10条
    print(stock_dataset[0:10])
    #开盘价数据维度
    print('reshap before:',stock_dataset, stock_dataset.shape)
    #奖开盘价数据转换为nx1列的数据
    stock_dataset = stock_dataset.reshape(-1,1)
    #显示部分数据 0-10条
    print('reshap after:', stock_dataset[0:10], stock_dataset.shape)
    #初始化MinMaxScaler
    sc = MinMaxScaler(feature_range=(0, 1))  
    #转换
    stock_dataset_transform = sc.fit_transform(stock_dataset)
    #显示部分数据 0-10条
    print('transformed:', stock_dataset_transform[0:10])
    #反归一化,回复原有数据,显示部分数据 0-10条
    stock_dataset_inverse = sc.inverse_transform(stock_dataset_transform)
    print('inversed:', stock_dataset_inverse[0:10])
    

    输出:


    image.png

    全部代码

    到github查看https://github.com/horacepei/tensorflow_study

    相关文章

      网友评论

        本文标题:使用Sklearn的MinMaxScaler做最简单的归一化

        本文链接:https://www.haomeiwen.com/subject/qmmooctx.html