(自己的认知与理解有限,文中错误、不当之处还请诸位不吝指出,大家共同进步)
数据是重要、应该被充分利用的,这一点大家都是认同的,就像我们的个人信息(尤其是手机号)被肆意的售卖,各种推销、诈骗电话屡见不鲜,虽然我们对此大为光火,但是对推销员和诈骗犯来说,人家确实利用到了数据,而且总能钓上几条鱼。作为一名数据挖掘工作者来说,可能没法在一线搜集数据,但是充分理解到手的数据是接下来一切工作的前提,否则可能会白忙活,甚至得到错误的结论。本文中,我打算从数据属性、属性测量、数据收集(采样)、数据预处理这四个方面谈一下自己的理解。
1.数据属性
我们做的所有工作,目的是分析、解决问题,数据搜集也应该以此作为出发点,具体一点就是应该收集哪些数据,比如我们是做疾病预测、预防的,就应该收集涉及健康方面的数据,再具体一点,要做呼吸道疾病相关的预测,则可以收集空气质量数据、呼吸疾病病史信息、咳嗽症状等数据,而不是有没有得灰指甲这种信息,对于一条数据记录来说,空气质量、呼吸疾病病史等都可以称为数据的属性(有的地方也成为特征),因此对于我们的研究目的来说,选择准确的数据属性非常重要,这里“准确”一次的含义,我想至少包含两方面,一个是选择的属性需要与研究目的相关,另外一个就是属性的选择不要冗余,很多属性之间是具有高度相关性的(尽管我们在大多数时候,都是假设属性之间是独立的,毕竟这能大大简化计算过程,不可避免的则会丢失部分准确性),都选择的话可能对改进分析结果帮助不大,但是造成的冗余产生计算量影响可能较大。
像疾病预测这样的应用场景,我们有大量的经验和数据可以借鉴(毕竟仅我中华文明就有上下五千年嘛),因此在选择属性方面会容易一些,而有的应用场景,较为准确的选择属性则并不容易(毕竟数据挖掘过程也是一个探索的过程,要都整的那么明明白白的,就没意思了),对于这种情况,我觉得还是先暂时保留候选属性为好,在数据挖掘的过程中再对该属性做进一步分析。
对于数据属性,还有一个需要着重注意的地方,可能属性自身有一些重要的性质(或者说特征),这些性质直接影响该属性上测量数据的可用性、或者准确性,比如时效性,在一些信息、媒体行业中,数据的时效性是很重要的。
2.属性测量
信息都是要汇总到计算机中进行储存、计算的,因此属性测量是必不可少的步骤,测量的过程可以简单理解为“特征--->数值‘’的过程,既然数据要用来计算,因此数值的改变必然会直接影响计算结果,所以属性测量过程还是很重要滴!
人们依据属性测量值所支持的运算方式,将属性归为如下四类:标称型、序数型、区间型和比率型。标称型的数据只支持相异性判断操作(相同或不同),比如身份证ID;序数型的数据扩充了序数比较操作(大于、小于、大于等于和小于等于),比如程度数据(优、良、中、差);区间型数据扩充了加、减操作,比如个数、次数这样的数据;比率型数据扩充了乘、除操作,比如长度,乘法得到面积,除法得到倍数。标称型、序数型统称为定性型数据,区间型和比率型称为定量型数据。认清不同类型数据支持的操作很必要,这便于我们解释一些结论。
认清属性的类别后,测量过程中的误差问题也需要注意。一般结果中的误差包含系统误差和测量误差(当然系统误差不是一定会存在的),系统误差一般是稳定的,但我们不一定能察觉和发现,这需要我们对分析问题、属性的背景有一定了解,或者需要较为合理的测量手段,但是我们最好能解决掉它,然后再进行测量。测量误差则很常见了,就算是标称型的属性,比如身份证ID,你也可能看错一个数字不是。
3.数据收集
在收集数据时,要么收集全部的数据,要是用采样的方式收集部分数据(当然,没有绝对的全部收集说法,区别在于数据量上),虽然现在的分布式系统已经支持海量数据的存储及计算了,但是在很多应用场景中,采样方法仍然很常见。
收集全部的数据简单粗暴,如果条件完全支持这么做,那么当然是最好的,毕竟收集的信息全,但随之而来的是对数据挖掘者的考验了。这里还是重点提一下采样吧。采样时,常常需要考虑的问题是使用怎样的采样方式,理想的情况当然是希望采样的数据能简洁、全面的包含与待分析问题相关的信息,但通常由于我们对待分析问题的认识不够深刻、或者采样方法不合理,做不到这一点(这也是正常的),所以我们只能尽量做到最好。
对待分析问题的认识暂且不谈,这个带有主观性,这里只说采样方法。采样方法有很多种,从大的方面可以分为概率性采样和非概率性采样。概率性采样中不包含采样人员的主观知识,而非概率性采样中则包含了采样人员的主观知识,并且施加干预。举几个例子,比如概率采样中的系统采样与分层采样,在系统采样中,对样本的编号是随机的,而在分层采样中,每一层中的采样也是随机的。而在非概率采样中,采样人员的干预行为则有较强的主观性,比如对某个景区的建设提供一些策略的支持,调查游客的意见,如果采样人员就愿意调查20~30岁年龄段游客的意见,那么这种采样方式就是非概率性采样。
除了采样方式会改变数据所提供的信息,数据的记录方式(数据记录结构)有时也会误增或者丢失部分数据信息。常见的数据记录形式是
很多数据都可以用这种结构记录,比如记录型数据(如属性n对应的数值是多少)、事务型数据(如属性n对应的商品有没有被购买),甚至是文档型数据(如文档中某个词条出现的次数),但是有些场合则不适合用这种结构,比如记录化合物,你不能简单记录为该化合物中包含了哪些原子、这些原子个数是多少,化合物中是存在化学键的,这些化学键包含了重要信息,甚至能决定到底化合物是什么,如果采用以上的记录形式则会丢失信息。
4.数据预处理
数据预处理是一个非常繁琐的过程,则占用很多时间,但是数据预处理的过程又十分重要,其目的就是让输入计算过程的数据更可用。呈现在我们面前的数据是那么“缤纷多彩”,绝对会让我们惊喜的。。。
预处理的方式有很多,不是所有的数据都需要处理,处理方式的选择依据实际情况来,常见的有以下方法:空值的处理(丢弃还是估计,估计时又采用哪种估计方式,是线性插值还是用中位值等等等)、数据类型转换(数值型还是字符型等等)、值范围限制(有些值记录错误,或者有些范围外的值我们不需要)、归一化、离散化、区间化、规范化、二元化、数据拼接、合并等等等,方式非常多了,我准备后面单独写一篇博客详细说明数据预处理问题。