数据变换

假设 A 考了 80 分,B 也考了 80 分,但前者是百分制,后者 500 分是满分,如果我们把从这两个渠道收集上来的数据进行集成、挖掘,就算使用效率再高的算法,结果也不是正确的。因为这两个渠道的分数代表的含义完全不同。

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

数据变换是数据准备的重要环节,它通过数据平滑、数据聚集、数据概化及规范化等方式将数据转换成适用于数据挖掘的形式。
数据平滑:去除数据中的噪声,将连续数据离散化。这里可以采用分箱、聚类和回归的方式。
数据聚集:对数据进行汇总,在 SQL 中有一些聚集函数可以供我们操作(max(), min())。
数据概化:将数据由较低的概念抽象成为较高的概念,减少数据复杂度,即用更高的概念替代更低的概念。比如说上海、杭州、深圳、北京可以概化为中国。
数据规范化:使属性数据按比例缩放,这样就将原来的数值映射到一个新的特定区域中。常用的方法有最小—最大规范化、Z—score 规范化、按小数定标规范化等。
属性构造:构造出新的属性并添加到属性集中。这里会用到特征工程的知识,因为通过属性与属性的连接构造新的属性,其实就是特征工程。比如说,数据表中统计每个人的英语、语文和数学成绩,你可以构造一个“总和”这个属性,来作为新属性。

数据规范化的方法

1.min-max规范化

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

2.Z-Score 规范化

新数值 =(原数值 - 均值)/ 标准差
假设 A 所在的班级平均分为 80,标准差为 10。B 所在的班级平均分为 400,标准差为100。那么 A 的新数值 =(80-80)/10=0,B 的新数值 =(80-400)/100=-3.2。
Z-Score 的优点是算法简单,不受数据量级影响,结果易于比较。不足在于,它需要数据整体的平均值和方差,而且结果没有实际意义,只是用于比较。

3.小数定标规范化

小数定标规范化就是通过移动小数点的位置来进行规范化。小数点移动多少位取决于属性A 的取值中的最大绝对值。
比如属性 A 的取值范围是 -999 到 88,那么最大绝对值为 999,小数点就会移动 3 位,即新数值 = 原数值 /1000。那么 A 的取值范围就被规范化为 -0.999 到 0.088。

Python的scikit-learn库使用

1.min-max规划化
from sklearn import preprocessing
import numpy as np

x = np.array([[0., -3., 1.],
              [3., 1., 2.],
              [0., 1., -1.]])

min_max_scaler = preprocessing.MinMaxScaler()
minmax_x = min_max_scaler.fit_transform(x)
print(minmax_x)
2.Z_Score规范化
y = np.array([[0., -3., 1.],
              [3., 1., 2.],
              [0., 1., -1.]])
scaled_x = preprocessing.scale(y)
print(scaled_x)
每行每列的值减去平均值,除以方差
3.小数定标规范化
z = np.array([[0., -3., 1.],
              [3., 1., 2.],
              [0., 1., -1.]])
j = np.ceil(np.log10(np.max(abs(z))))
scaled_x = x/(10**j)
print(scaled_x)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容