(3)数据--操作

上部分讲了些跟数据有关的概念,这部分来聊一聊操作。

这里讲的操作其实是对数据预处理的操作。大概有以下这些操作。

数据聚合(Aggregation)

数据取样(Sampling)

数据降维

属性子集选取

构建属性

离散化和二分化属性

变量转换

数据聚合

有个思想叫做"less is more",即所谓删繁就简。举个栗子,把超市的日销售记录聚合成月销售,把广州的各个seven-eleven店的销售记录聚合成全广州的销售记录,然后可以跟北京的,深圳的,上海的一起放在一个数据集里。前一Part提到的数据集的粒度问题,其实也涉及了数据聚合。这种聚合通常会使数据记录(个体)变少,这样能够节省存储空间和处理时间,提供一个更高瞻远瞩的视角,同时也必须承受可能丢失的数据细节。

取样

取样就是从现有的数据集里选出一个新的数据集集。取样要达到的效果就是,使用这个新数据集和使用整个数据集作为算法的输入,得到的结果应该是接近的,这样我们就说这个子集取得很有代表性。在进行取样之前,要确定新数据集的大小,以及取样所使用的方法。

取样的常用方法。最直观的就是简单随机抽样咯,每个数据个体(样本)有均等的机会被抽取。简单随机抽样又分为有放回和无放回抽样。有放回是比较简单的,因为每个样本被抽到的概率一直不变吗。当原始数据集相对于待抽出样本集合而言足够大,无放回也可以近似认为是有放回的抽样。主要真正的有放回抽样是可能带来重复样本的。还有些稍微复杂点的抽样方法,比如分层抽样(Stratified Sampling),对属于不同类别的样本按照其比例抽取样本。比如一个班有10名女生和30名男生(应该是个计科的班吧),要选取20人去参加一个合唱比赛,为了表现性别平等,可以按比例抽取男女同学,从女生里随机选择5人,并从男生中随机选择15人。

如果取样的样本数过小的话,通常会丢失较多有用信息。另外如果数据集本身较小的话,也可以通过设定一个更大的取样Size,重复选取某些样本,得到一个更大是数据集。样本数量也可以动态地确定(Adaptive Sampling),从较小的样本数开始,逐步增大样本数,看看对算法结果的影响。这个过程是比较耗时的。

降维

先说说降维的好处吧。首先降维可以减少相关性较弱的属性,及噪声;然后能避免维度灾难。通过降维能得到更易懂的模型,使得数据能更清晰地可视化,还可以减少数据处理的时间空间消耗。降维的主要方式是将现有的属性进行组合,得到新的较少的属性,具体的常用方法有PCA和SVD,在下一节中具体讨论。或者还有更简单粗暴的方法,直接从现有属性中选择一个子集,这种选择通常要依赖于特定的领域知识。特征选取的主要方法有,嵌入式的方法,过滤型方法,Wrapper型方法。所谓嵌入式的方法,就是说所选择的数据挖掘算法,它本身就带有特征选取的能力。举个栗子如决策树,建树的过程就在选取特征。过滤性的方法,就是先选好特征的子集,再来跑算法,而特征选择过程是独立于数据挖掘过程的,例如可以选择相关性较小的一些特征。通常把后两种方法结合在一起是比较好的选择。也就是说,特征的子集有很多很多,这个特征的选择过程是个搜索的过程,我们希望在可接受的时间内找到一种较优的子集。在这个过程中我们不断列举特征的子集,用这些特征来跑算法,用算法结果的优劣来衡量这个子集的优劣。我们不希望耗费太多时间,因此可以设定迭代到一定代数时,或者当结果足够好时停止搜索。

另外如果我们把在特征选取过程中是否保留某个特征用1和0来表示的话,自然而然可以想到,是不是有一种可能,不完全提出某个属性,而是赋予它一个0到1之间的权重。这种变形的特征选取也是很实用的,因为可能某些特征对最终结果的影响大于另一些特征。如何确定这些权值的大小也是个问题,可以依靠领域知识,或者用SVM之类的算法自动确定。

构建属性

属性构建的目的在于通过现有的数据集构建新的数据集,使得信息的表示更有效,或许还能降维呢。常见三种属性构建方法:抽取,映射,创建(实在没别的好名儿了)。

抽取嘛,例如从一张图片(一堆像素点)得到更高级的特性如颜色直方图什么的。映射呢,信号的时域到频域的转换。特征创建要跟普通降维方法所谓的特征创建区分开来。比如有两个属性,重量和体积,那么可以通过计算得到密度这一新的属性,这里依赖的是领域知识而不是属性的值本身之间的数学关系,简单讲敢这么做是因为物理学得好而不是数学棒棒哒。

离散化和二分化

必要性:某些算法要求属性是离散值,关联规则分析中通常要求数据是Binary的。另外也可以把取值较多的离散型属性稍微聚合一下。

对离散值的二分化,来个实例吧,简单直观。对于一个本来取值是{1,2,3,4,5}的属性(nominal或者ordinal都行),可以用三个新的属性X1,X2,X3来表示。辣么用000表示1,001表示2,010表示3...这样做的好处是所用的属性数量不算太多,坏处也很明显,这些新属性之间是有关联的,不独立的。因此还有另一种选择,用五个新的属性。10000表示1,01000表示2,00100表示3...

对于连续值的离散化,就是要找到一些分割点(首先要确定分割点的个数),然后切分,一个数值落在了那个区间就归属于对应的离散值。根据是否使用了类别信息,可以把离散化方法分为无监督的离散化和有监督的离散化。对应无监督离散化而言,只考虑这个属性的值的分布本身。常用的方法有,等间距的划分,等频率的划分,以及聚类方法。等间距划分比较容易受异常值的影响,聚类方法通常表现会优于另两种。对于有监督离散化,要用类别来计算熵。作为一个迭代过程,每次选择使得熵增最小的划分点,然后在下一步中对熵最大的子间隔继续划分。

变量转换

变量的转换主要有简单函数转换和标准化。简单函数,如y=x^k,logx 1/x等。

标准化的目的是避免某些scale较大的变量对结果的影响过大。通常是要得到一组均值为0,标准差为1的属性值:x‘=(x-mean(x))/sx,,这里mean(x)表示变量x的均值,sx是其标准差。注意均值和标准差都对异常值比较敏感,一种可能更好的选择是,用中位数代替均值,用绝对标准差代替标准差。

时间: 2024-10-09 03:53:47

(3)数据--操作的相关文章

计算机系统之汇编---IA32处理器数据格式及数据操作

计算机系统之汇编---IA32处理器数据格式及数据操作 IA32数据格式: Intel用术语"字"表示16位数据类型,因此,称32位数为"双字",称64位数为"四字". Char*这里指的是所有指针类型,注意:c语言新增加的long long是八字节,但是硬件IA32不支持这个类型. 寄存器(8个32位的寄存器,均以%e开头) %eax.%ecx.%edx:调用者保存(数据)寄存器,当过程p调用q,q可以覆盖这些寄存器,但是不会改变p中的数据.

Cocos数据篇[3.4](3) ——XML数据操作

[唠叨] XML 即 可扩展标记语言,在游戏开发中,常用于保存游戏数据信息,如最高分.游戏等级等信息,和描述一些资源等. 加载动画的plist文件.瓦片地图编辑器到处的地图格式tmx文件,实际上都是特定格式的xml文件. 另外 UserDefault 单例类保存的数据,也是存储在xml文件中的. Cocos2d-x 已经加入了 tinyxml2库 用于xml的解析.3.x版本位于external/tinyxml2下. 本节要介绍的就是:如何使用 tinyxml2库 来操作处理xml文件. [参考

Redis数据操作--字符串

| 储存文字,储存数字(整数,浮点数),二进制数 |  字符串操作 -- 设置字符串     set key value     # 如果字符串键key已经存在,     那么使用新值覆盖原来的旧值 -- 获取字符串     get key     # 返回字符串键key储存的值 -- 仅在键不存在的情况下进行设置     setnx key value     # 仅在键key不存在的情况下,将键key的值设置为value,     效果和set key value NX一样.NX的意思为"N

SQL语言-----数据操作

数据操作 增加数据,insert into 标准格式 insert into 表名 (字段的列表)value(数据列表): 使用set insert into 表名 set 字段1=值,2.....: 从其他数据表取数据插入 insert into 表名 (字段列表)select; 和insert into一样也是分在种,标准写法,set语法,从其它表取数据 标准方式 replace into 表名 (字段的列表) values (数据列表) 使用set: replace into 表名 set

Linux系统crond、rsync、打包备份数据操作实战

Linux系统crond.rsync.打包备份数据操作实战 前面介绍了系统中定时任务.rsync.打包等各种操作,同时也介绍了实际生产环境中的各类案例,今天我们结合这几种功能做一次实战(备份数据) 一:项目背景 某公司WEB服务器数据非常重要,但是如果硬件出现故障,数据就会丢失,人工备份比较费时费力,因些需要进行相关自动备份,并且要备份至指定的备份服务器上 具体备份内容有: 1.网站站点所有目录及相关文件 2.系统相关的配置文件 3.网站的访问日志文件 具体要求如下:(每天0点备份) 1.WEB

MySQL表的创建和表中数据操作

这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑安装了mysql(my.ini下的字符集设置是utf8) 2,确保电脑同时安装navicat(任意版本) 3,保证mysql服务器已经启动 注:若对navicat操作不熟,请参照<<navicat从下载到使用>>这篇文章. ☆ 打开控制台 在navicat的tools(工具)菜单栏选择

数据存储——SQLite语句之DML 数据操作语言和内置函数之聚合函数

一.连接查询之内连接 select   a.字段,b.字段   from   表1   a,表2   b    where   a.字段=b.字段  And ... 二.DML 数据操作语言 1.增  insert  into values 1-insert  into 表名  values (跟所有字段一一对应的值的列表) 2-insert  into 表名(字段列表)  values (跟字段列表一一对应的值的列表) 3-insert  into 表名  select  对应的字段列表  f

数据库表的创建、管理和数据操作(实验一),数据库创建

数据库表的创建.管理和数据操作(实验一),数据库创建 今天我们就以实验的形式对表的创建.管理和数据操作进行学习,上课吧. [实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:利用SQL语言进行数据库表的各种操作:1.数据库表的创建.修改和删除操作.2.向表中进行数据的插入.删除和修改操作.[实验内容]1. 利用数据定义语句在实验一创建的stu_DB库中建立学生管理系统的三个表:Student.Course.SC.2.利用INSERT.UPDATE和DELE

SharedPreference作用及数据操作模式

SharedPreference是Android平台上的一个轻量级的存储类,用来保存应用的一些常用配制,比如Activity状态,Activtiy暂停,将此Activity的状态保存到SharedPreferences中,当Activity重载的时候,系统回调方法onSavedInstanceState,再从SharedPreferences中将值取出,最终以.xml方式保存,效率不太高. 4种数据操作模式: 1.context.MODE_PRIVATE:默认为是私有数据,只有被应用本身访问,在

018_异地数据操作

--[分布式查询]异地数据库的异种数据操作 /* 一.分布式查询定义: MSSQlServer所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或不同种类的数据源, 需要根据数据源的类别来使用相对应的接口.从而实现在服务器跨域或跨服务器访问. 二.执行机制: client(客户端)向服务器请求数据,此时先检查 memcache server(缓冲服务器)(本地)是否有此数据,没有的话就会根据相关数据源的接口调用异地数据,然后更新