% ~% b0 _2 ?& p' R6 v
为什么要进行数据预处理?
6 X+ V3 ^. |8 i' e 因为原始数据往往是不完整的,含有噪声的以及不一致的,采用这些数据进行机器学习往往得到的结果是不准确的。所谓不完整是指缺少相应的属性值;含有噪声是指数据中存在错误的、异常的数据;而不一致的数据是指数据中可能存在在编码上或者命名上的差异重复。
: q; c2 D" Y6 `) b* a ` i

# K/ t. T( Z% P7 s4 Z3 u+ i: } 如何进行数据预处理?
$ i! x3 ~: I0 _# R! j
数据预处理主要包括以下步骤:数据清洗,数据集成,数据规约以及数据变换
2 W: j7 ?9 ?+ z3 m, N& H8 U3 K, c

. Q( _2 k; C/ I" b: m4 A 一、数据清洗:
* N3 W# d4 I- ^& _$ U8 s3 |" h/ Q (1) 数据清洗的目的:消除错误、冗余和数据噪音。
! |9 H( h T: E4 ?. k (2) 数据清洗过程需要满足的条件:
$ j2 f% P" R' r! N4 v- r4 A- z 1、不论是单数据源还是多数据源,都要检测并且除去数据中所有明显的错误和不一致。
9 f' A; d6 U% N9 @+ a8 w
2、尽可能地减小人工干预和用户的编程工作量,而且要容易扩展到其他数据源。
2 t M8 O. J) D; ~% \& f6 z
3、应该和数据转化相结合。
7 c9 Z) }0 f7 Q. t) ~$ L
4、要有相应的描述语言来指定数据转化和数据清洗操作。
+ n; d6 k/ @ _" k+ ~ 异常数据的清洗过程主要分为以下6个步骤:
9 ^. R% D, r- D$ n) c7 u) W 1、元素化:将非标准的数据,统一格式化成结构数据。
& y7 G: J6 `$ e1 i; l
2、标准化:将元素标准化,根据字典消除不一致的缩写等等。
$ ~0 O# N! A# y2 S 3、校验:对标准化的元素进行一致性校验,即在内容上修改错误。
! V+ C3 Q/ T7 F1 [. ?
4、匹配:在其它记录中寻找相似的记录,发现重复异常。
3 p/ B9 E' ]5 R3 z Y$ r7 V
5、消除重复记录:根据匹配结果进行处理,可以删除部分记录或者多个记录合并为一个更完整信息的记录。
+ I: ~4 g5 L$ A% C2 }5 p) _
6、档案化(documenting):将前5个步骤的结果写入元数据存储中心。这样可以更好地进行后续的清理过程,使得用户容易理解数据库以及更好地进行切片、切块等操作。
2 W0 @9 t4 a4 b8 n+ r! O8 x! S 
$ h+ `: c/ `: ?+ v; a. e' F2 Z
几种发现数据异常的方法:
6 y5 u, G5 C$ {# R4 B; q
1. 基于契比雪夫定理的统计学方法:这种方法可以随机选取样本数据进行分析,加快了检测速度,但是这是以牺牲准确性为代价的。
: B, p1 R9 ^* h
2. 模式识别的方法:基于数据挖掘和机器学习算法来查找异常数据,主要牵涉关联规则算法。
+ x7 R5 w1 V, ]1 t6 f 3. 基于距离的聚类方法(聚类分析是一种新兴的多元统计方法,是当代分类学与多元分析的结合。聚类分析是将分类对象置于一个多维空间中,按照它们空间关系的亲疏程度进行分类。通俗的讲,聚类分析就是根据事物彼此不同的属性进行辨认,将具有相似属性的事物聚为一类,使得同一类的事物具有高度的相似性。):这也是数据挖掘中的算法,重点在于它的类的评测标准为Edit距离,来发现数据集中的重复纪录。
: x9 q8 k& t% m2 I& y 4. 增量式的方法:如果数据源允许,我们可以采取随机的方法获取元组。这允许给异常检测算法一个随机元组流的输入。一些异常检测算法对这种输入可以使用增量、统计学方式,可以发现更多的异常。从数据源中获得元组,然后转换之后作为异常检测算法的输入。
4 Y0 P6 r2 n: E7 }6 {! k7 Y5 D' _) F
二、数据集成:
' S" I5 d2 \4 Q7 Q* x+ a 数据集成的目的:将数据由多个数据源合并成一个一致的数据存储,如数据仓库。该部分主要涉及数据的选择、数据的冲突问题以及不一致数据的处理问题。
& i, \/ k. z- n. ]6 Z2 u1 `8 y& q, k
三、数据归约:
& o( |/ i. i! V4 x% B, Z/ O1 s% R) X3 t 数据归约的目的:是指在对发现任务和数据本身内容理解的基础上,寻找依赖于发现目标的表达数据的有用特征,以缩减数据模型,从而在尽可能保持数据原貌的前提下最大限度的精简数据量。简单的说就是压缩数据。
6 n. `5 G; O; _, I8 t+ Z( C
数据归约的方法:可以通过如聚集、删除冗余特征或聚类来压缩数据的规模。
" K* A6 k U/ z. R7 N0 B 1.数据立方体聚集:把聚集的方法用于数据立方体。
5 D. N8 f% Y6 S+ o N 2.维归约:检测并删除不相关、弱相关或冗余属性。
0 J, y$ P$ W7 ], T
3.数据压缩:选择正确的编码压缩数据集。
* v# _8 k3 ?) H: F& ^
4.数值压缩:用较小的数据表示数据,或采用较短的数据单位,或者用数据模型代表数据。
4 f a. |- T, `! r: F1 A 5.离散化和概念分层生成:使连续的数据离散化,用确定的有限个区段值代替原始值;概
V/ Z5 X# c0 C9 p. D& H

4 N- f1 y( X9 ~3 j" m7 ]
四、数据变换:是找到数据的特征表示,用维变换或转换来减少有效变量的数目或找到数据的不变式,包括规格化、规约、切换和投影等操作。就是指把原始数据转换成为适合数据挖掘的形式
$ k8 o+ W/ L; Y& O4 e 1.光滑:去掉数据的噪声,包括分箱,回归和聚类
. l! O4 [2 J& Z+ N5 G0 I: N* T: L
2.聚集:对数据进行汇总或聚集。这一步通常用来为多粒度数据分析构造数据立方体
5 U+ N( D9 \1 K6 j/ a! E/ C 3.数据泛化:使用概念分层,用高层概念替换底层或原始数据。
7 R( R2 X3 @0 }0 V* g: F5 @, \; E 4.规范化:又称为归一化,指将属性数据按比例缩放,使之落入一个小的特定区间。
2 @) e4 g+ Z/ V, h 
& ^& ~0 Q0 e! @( w! Y 那么运用python如何进行数据预处理呢?其过程主要包括以下6个步骤:导入库、导入数据集、处理缺失数据、解析分类数据、将数据集分为训练集和测试集、特征量化。
) m7 X8 m. A) C- R6 H 
# m+ W! ~2 p+ T6 U8 T6 ~. h7 f 其代码实现如下:
% Q0 v" s q: Z2 O! L: N3 ]( W

D! d, d8 I; P; m: A% D% f7 h' c
以上关于机器学习数据的预处理是在阅读了其它文献资料的基础上总结的,如有错误,希望指正!
L4 |4 l1 f& J2 |% L- H! y