本篇文章主要介绍内容:数据去噪,采样,特征工程
数据去噪:
无论是数据挖掘的比赛也好,还是日常生活中的各种项目也好,我们拿到手的数据集含有噪声数据是很正常的。噪声会降低我们的数据质量,从而影响我们模型的效果。因此,对噪声的处理是必须的,这一点是众所周知的事情。但是,在去噪的过程中我们也要注意以下问题。
在我们这些天做的一个比赛上,一个队友,拿着没有好好处理噪音的数据集却误打误撞跑出了最高的分数,这一点着实令人感到沮丧和产生弃赛的想法。昨天看一本机器学习的书的时候才知道:在训练集中引入噪声数据能起到提升模型健壮性的作用。
提高模型的健壮性,会使得模型对噪声数据不再那么敏感。因此,当你准备处理噪声数据对时候,要权衡模型对健壮性和模型的效果。
另外注意,数据去噪主要是去除数据中标注带噪声的实例,去除这样的噪声数据是有利的。但去除特征带噪声的数据,往往效果变差。可见,噪声特征也带有一定信息,能用来构建模型。说一句比较哲学的话:没有特征也是一个特征。
采样:
无放回简单随机抽样,有放回简单抽样,这两个我想不用多提。
主要了解一下:
平衡采样,分层采样
整群采样
我们在分类问题上,经常会遇到不平衡的分类问题。比如说正样本10000条,负样本才100条。这是我们应该采用平衡采样,或者分层采样。对于上述例子来说,平衡采样会将负样本复制10遍,将正样本随机删除,直至留下1000条。如此一来正负样本数目一致。也就是说,对大样本进行下采样,对小样本进行上采样。而对于分层采样来说,他会将数据分层,保证正负样本数据比例仍然为100:1,否则可能会出现全是正样本,没有负样本,或负样本极少的情况。
整群采样则是将数据集分组成N个簇,这些簇彼此互斥。然后从N个簇中随机采样p个为样本集。
交叉验证:
1.留出法:一种很简单的方法,只需要将数据划分为两部分,一部分为训练集,一部分为测试集。对于留出法我的下意识觉得这种做法太low,毫无用处。但这种想法是完全错误的,绝不能因为原理简单而轻视任何算法。当数据有明显的时间序列因素的时候,就应该采用留出法,因为这样可以体现时间因素的作用。
2.K折交叉验证:这种算法不用多说,大家应该很清楚了。我要说的是,K折交叉验证也有其不足之处。当你选择这种做法的时候,可能会因为单次K份数据划分导致数据分布发生变化而引入偏差。这时候我们可以进行多次K折交叉验证,取均值。另外,当K=N(N为数据的条数)时,K折交叉验证有了另一个名字:留一法。即每一条样本当测试集,其余数据作训练集。这种算法计算成本很高,但是在数据稀疏的时候,很实用。
自助法:即自主采样,使用有放回的重复采样的方式进行训练集,测试集构建。在数据集小的时候很有用。建议放入知识库中。
对特征工程的一些理解:
1.所谓特征工程,就是将原始数据空间变换为新的特征空间。但注意,将原始数据转化为实向量之后,对应的特征空间不一定是最佳的。
2.线性模型我们需要将类别变量进行one-hot,但是对树模型来说,如lgb,可以直接处理categorical类型变量。
3.特征的挖掘与专业领域知识强相关。特征工程即该领域的业务逻辑的一种数据层面的表现。特征提取即是用特征描述业务逻辑的过程
4.先做探索性数据分析(EDA)。