跳至主要內容

数据变换

yczha大约 3 分钟Data AnalysisMachine LearningMachine LearningData Analysis

open in new window open in new window

陈旸老师极客时间《数据分析实战45讲》笔记

数据变换在数据分析中的角色

在数据变换前,我们需要先对字段进行筛选,然后对数据进行探索和相关性分析,接着是选择算法模型,然后针对算法模型对数据的需求进行数据变换,从而完成数据挖掘前的准备工作。

所以你从整个流程中可以看出,数据变换是数据准备的重要环节,它通过数据平滑、数据聚集、数据概化和规范化等方式将数据转换成适用于数据挖掘的形式。

**数据平滑:**去除数据中的噪声,将连续数据离散化。这里可以采用分箱、聚类和回归的方式进行数据平滑,我会在后面给你讲解聚类和回归这两个算法;

**数据聚集:**对数据进行汇总,在 SQL 中有一些聚集函数可以供我们操作,比如 Max() 反馈某个字段的数值最大值,Sum() 返回某个字段的数值总和;

**数据概化:**将数据由较低的概念抽象成为较高的概念,减少数据复杂度,即用更高的概念替代更低的概念。

**数据规范化:**使属性数据按比例缩放,这样就将原来的数值映射到一个新的特定区域中。常用的方法有最小—最大规范化、Z—score 规范化、按小数定标规范化等

**属性构造:**构造出新的属性并添加到属性集中。

数据规范化的几种方法

  • Min-max 规范化

    Min-max 规范化方法是将原始数据变换到 [0,1] 的空间中。用公式表示就是:$$x=\frac{x-min(x)}{max(x)-min(x)}$$

  • Z-Score 规范化:x=xmean(x)stdev(x)

  • 小数定标规范化:小数定标规范化就是通过移动小数点的位置来进行规范化。小数点移动多少位取决于属性 A 的取值中的最大绝对值。

使用Python 的 SciKit-Learn 库

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

我现在来讲下如何使用 SciKit-Learn 进行数据规范化。

  • Min-max 规范化

    from sklearn import preprocessing
    import numpy as np
    
    X=np.random.randn(100,128)*20
    print("Origin data shape:",X.shape)
    print("Origin data max:",X.max())
    print("Origin data min:",X.min())
    
    X_minmax = preprocessing.MinMaxScaler().fit_transform(X)
    print("Norm data shape:",X_minmax.shape)
    print("Norm data max:",X_minmax.max())
    print("Norm data min:",X_minmax.min())
    
  • Z-Score规范化

    from sklearn import preprocessing
    import numpy as np
    
    X=np.random.randn(100,128)*20
    print("Origin data shape:",X.shape)
    print("Origin data max:",X.max())
    print("Origin data min:",X.min())
    
    X_zscore = preprocessing.scale(X)
    print("Norm data shape:",X_zscore.shape)
    print("Norm data max:",X_zscore.mean())
    print("Norm data min:",X_zscore.std())
    

数据挖掘中数据变换比算法选择更重要

在数据变换中,重点是如何将数值进行规范化,有三种常用的规范方法,分别是 Min-Max 规范化、Z-Score 规范化、小数定标规范化。其中 Z-Score 规范化可以直接将数据转化为正态分布的情况,当然不是所有自然界的数据都需要正态分布,我们也可以根据实际的情况进行设计,比如取对数 log,或者神经网络里采用的激励函数等。