美文网首页
数据规范化的几种方法

数据规范化的几种方法

作者: 逍遥_yjz | 来源:发表于2022-08-26 10:39 被阅读0次

    1)在编撰指数,或者综合性指标的时候,必须对数据进行缩放,放到统一的量纲中。因为在权重计算中,如果没有统一的量纲,其实是在变相的给一些量纲大的数据增加权重。比如衡量一个人的综合健康指数,需要采集个人数据,身高、体重、年龄、血压等等,如果不进行量纲缩放和权重设计,单纯将数据相加,得出的指数没有任何意义。

    2)在一些机器学习的算法中,尤其是涉及到距离的计算时,需要对数据的量纲进行缩放。比如在聚类过程中,标准化显得尤为重要。这是因为聚类操作依赖于对类间距离和类内聚类之间的衡量量。如果⼀一个变量量的衡量量标准⾼高于其他变量量,那么使⽤的任何衡量标准都将受到该变量的过度影响。还有的如PCA,KNN以及SVM等。

    3)为了增强数据可解释性,对数据量化到量纲中。比如将机器学习输出的概率转化成分数,便于运营理解,比如10分就是最高,1分就是最低。

    0. Simple Feature scaling 简单特征缩放

    简单特征缩放:将各个特征值除以最大的值,得到的规范化结果在 [-1,1] 范围内。

    # Python
    df["xxx"] = df["xxx"]/df["xxx"].max()
    

    优点是不改变数据集在轴上的稠密程度;但容易受到离群最大值的影响。如果最大值远远大于其他的特征值,这会导致规范化的结果不合理。

    1. Min-max规范化:

    Min-max 规范化Min-max 规范化方法是将原始数据变换到[0,1]的空间中。用公式表示就是:新数值 =(原数值 - 极小值)/(极大值 - 极小值)。

    SciKit-Learn是 Python 的重要机器学习库,它封装了大量的机器学习算法,比如分类、聚类、回归、降维等。此外,它还包括了数据变换模块。我主要使用SciKit-Learn进行数据规范化。

    可以让原始数据投射到指定的空间[min, max],在 SciKit-Learn 里有个函数 MinMaxScaler 是专门做这个的,它允许定一个最大值与最小值,然后将原数据投射到[min, max]中。默认情况下[min,max]是[0,1],也就是把原始数据投放到[0,1]范围内。

    核心代码:

    min_max_scaler= preprocessing.MinMaxScaler()
    
    minmax_x= min_max_scaler.fit_transform(x)
    
    # Python
    df[""] = (df[""]-df[""].min())/(df[""].max()-df[""].min())
    

    同样的,这样的方式也容易受到离群最大最小值的影响。

    2. Z-Score 规范化

    假设 A 与 B 的考试成绩都为 80 分,A 的考卷满分是 100 分(及格 60分),B 的考卷满分是 500 分(及格 300 分)。虽然两个人都考了 80 分,但是 A 的 80 分与 B 的 80 分代表完全不同的含义。那么如何用相同的标准来比较 A 与 B 的成绩呢?Z-Score 就是用来可以解决这一问题的。定义:新数值 =(原数值 - 均值)/ 标准差。假设 A 所在的班级平均分为 80,标准差为10。B 所在的班级平均分为 400,标准差为 100。那么 A 的新数值=(80-80)/10=0,B 的新数值=(80-400)/100=-3.2。那么在 Z-Score 标准下,A 的成绩会比 B 的成绩好。Z-Score 的优点是算法简单,不受数据量级影响,结果易于比较。不足在于,它需要数据整体的平均值和方差,而且结果没有实际意义,只是用于比较。

    在 SciKit-Learn 库中使用 preprocessing.scale() 函数,可以直接将给定数据进行Z-Score 规范化。

    核心代码:

    preprocessing.scale(x)
    

    panda:

    # Python
    df[""] = (df[""]-df[""].mean())/df[""].std()
    

    3. 小数定标规范化:

    通过移动小数点的位置来进行规范化。小数点移动的位数取决于该属性数据取值的最大绝对值。

    例如:属性A的取值范围是-800到70,那么就可以将数据的小数点整体向左移三位即[-0.8,0.07]

    利用numpy对数据进行小数定标规范化的方法如下:

    j = np.ceil(np. log10(np.max( abs(×))))
    scaled_x = x/(10**j)
    
    

    相关文章

      网友评论

          本文标题:数据规范化的几种方法

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