zoukankan      html  css  js  c++  java
  • 机器学习之归一化和标准化总结

    一般做机器学习应用的时候大部分时间是花费在特征处理上,其中很关键的一步就是对特征数据进行归一化,为什么要归一化呢?

    很多同学并未搞清楚,维基百科给出的解释:

    1)归一化后加快了梯度下降求最优解的速度, 主要是加快梯度下降法收敛速度。

    2)归一化有可能提高精度。下面我简单扩展解释下这两点。

    1.什么是归一化

    有两种实现方法:

    (1)常用的方法是通过对原始数据进行线性变换把数据映射到[0,1]之间,变换函数为:

        

      其中max为样本数据的最大值,min为样本数据的最小值。

    缺点:这种方法有个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义

      另外,最大值与最小值非常容易受异常点影响,

      所以这种方法鲁棒性较差,只适合传统精确小数据场景

    2. 标准化

    常用的方法是z-score标准化,经过处理后的数据均值为0,标准差为1,处理方法是:

    其中,其中μ是样本的均值, σ是样本的标准差。

    特点: 该种归一化方式要求原始数据的分布可以近似为高斯分布,否则标准化的效果会变得很糟糕。它们可以通过现有样本进行估计。

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

    以上为两种比较普通但是常用的归一化技术,那这两种归一化的应用场景是怎么样的呢?下面做一个简要的分析概括:
    1、在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。
    2、在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
    import numpy as np
    import pandas as pd
    
    def standardize(X):
        m, n = X.shape
        for j in range(n):
            features = X[:,j]
            meanVal = features.mean(axis=0)
            std = features.std(axis=0)
            if std != 0:
                X[:, j] = (features-meanVal)/std
            else:
                X[:, j] = 0
        return X
    
    def normalize(X):
        m, n = X.shape
        for j in range(n):
            features = X[:,j]
            minVal = features.min(axis=0)
            maxVal = features.max(axis=0)
            diff = maxVal - minVal
            if diff != 0:
               X[:,j] = (features-minVal)/diff
            else:
               X[:,j] = 0
        return X
    
    result = pd.read_table(r'E:Python
    esourcehouse.txt',sep='s+')
    X=result.as_matrix()
    normResult = normalize(X)
    standardResult = standardize(X)
    print(normResult)
    print(standardResult)

     house.txt 数据格式如下

    面积   间数 价钱
    2104 3 399900
    1600 3 329900
    2400 3 369000
    1416 2 232000
    3000 4 539900
    1985 4 299900

     

  • 相关阅读:
    用Visual C#创建Windows服务程序(转)
    输入字符串的格式不正确(异常详细信息: System.FormatException: 输入字符串的格式不正确。)
    pv操作二
    双进程struct sigaction中mask阻塞信号
    pv操作一
    sigprocmask
    共享内存二
    面向接口编程
    类之间的几种关系
    sigaction函数一
  • 原文地址:https://www.cnblogs.com/gylhaut/p/9367208.html
Copyright © 2011-2022 走看看