13. 数据变换:考试成绩要求正态分布合理吗?

正态分布

正态分布也叫作常态分布,就是正常状态下,呈现分布的情况。正态分布曲线反映了随机变量的分布规律。理论上的正态分布曲线是一条中间高,两端逐渐下降且完全对称的钟形曲线。

image.png

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

数据挖掘前的准备工作:


image.png

数据变换是数据准备的重要环节,常用的变换方法有:

  1. 数据平滑: 去除数据的噪声,将连续数据离散化。可采用分箱,聚类和回归的方法。
  2. 数据聚集: 对数据进行汇总,在SQL中有些聚集函数可以供我们操作,如Max,Sum等。
  3. 数据概化: 将数据由低的概念抽象成较高的概念,减少数据复杂度。比如上海,杭州,深圳,北京可以概化为中国。
  4. 数据规范化: 使属性数据按比例缩放,将原来的数值映射到一个新的特定区域,常用Min-Max规范化,Z-core规范化,按小数定标规范化。
  5. 属性构造: 构造出新的属性成为新的属性集中。

数据规范的几种方法

  • Min-Max规范化
    将原始数据变换到[0,1]空间,用公式表示就是:新数值 = (原数值 - 极小值)/(极大值 - 极小值)
  • Z-Score规范化
    将数据规范到0均值,1方差的标准正态分布上,减少百分制80和500分制80的数据值差异问题
    新数值 = (原数值 - 均值)/ 标准差
  • 小数定标规范化
    将数据转化为[-1,1]区间中,小数定标规范化通过移动属性A的值的小数点位置进行规范化。小数点的移动位数依赖于A的最大绝对值。
    新数值 = 原数值 / 最大绝对值位数

Python 的 SciKit-Learn 库使用

  • Min-Max规范化
# coding:utf-8
from sklearn import preprocessing
import numpy as np
# 初始化数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[ 0., -3.,  1.],
              [ 3.,  1.,  2.],
              [ 0.,  1., -1.]])
# **将数据进行 [0,1] 规范化**
min_max_scaler = preprocessing.MinMaxScaler()
minmax_x = min_max_scaler.fit_transform(x)
print (minmax_x)

运行结果:

[[0.         0.         0.66666667]
 [1.         1.         1.        ]
 [0.         1.         0.        ]]

  • Z-Score规范化
# coding:utf-8
from sklearn import preprocessing
import numpy as np
# 初始化数据,每一行表示一个样本,每一列表示一个特征
x = np.array([[ 0., -3.,  1.],
              [ 3.,  1.,  2.],
              [ 0.,  1., -1.]])

# 将数据进行 Z-Score 规范化
scaled_x = preprocessing.scale(x)
print (scaled_x)

运行结果:

[[-0.70710678 -1.41421356  0.26726124]
 [ 1.41421356  0.70710678  1.06904497]
 [-0.70710678  0.70710678 -1.33630621]]
  • 小数定标规范化
# coding:utf-8
from sklearn import preprocessing
import numpy as np
# 初始化数据
x = np.array([[ 0., -3.,  1.],
              [ 3.,  1.,  2.],
              [ 0.,  1., -1.]])
# 小数定标规范化
j = np.ceil(np.log10(np.max(abs(x))))
scaled_x = x/(10**j)
print (scaled_x)

运行结果:

[[ 0.  -0.3  0.1]
 [ 0.3  0.1  0.2]
 [ 0.   0.1 -0.1]]

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

我们要让数据满足一定的规律,达到规范性的要求,便于进行挖掘,这是数据变换的作用。


image.png

你可能感兴趣的:(13. 数据变换:考试成绩要求正态分布合理吗?)