机器学习入门:特征初期处理技巧

所谓特征工程,指的就是从数据中抽取包含大量信息的特征,方便模型易于学习的过程。

所有的模型都是错误的,但其中有些是有用的。

下面介绍几个优秀的数据特征处理技巧:

1.数据转换为图像

实例1:用数据集预测电力消耗

热图的纵坐标DOW表示一周7天,横坐标则是一天24小时。很明显,周末整天的用电情况和工作日深夜的用电情况十分类似。由此,创建了一个特征——weekend proximity,它不仅提高了模型得分,还帮我最终赢得了比赛。

实例2:微软恶意软件分类挑战

它的数据集包含一组已知的恶意软件文件,对于每个文件,原始数据包含文件二进制内容的十六进制表示。此前,参赛者在网上从没接触过类似的数据集,而他们的目标是开发最优分类算法,把测试集中的文件放到各自所属的类别中。

数据变图像步骤:恶意文件的字节文档看成黑白图像,其中每个字节的像素强度在0-255之间。然而,标准图像处理技术与n-gram等其他特征不兼容。asm文件是用汇编语言写成的源程序文件。有个团队发现把asm文件转成图像后,图像的前800-1000个像素的像素强度可以作为分类恶意软件的一个可靠特征。所以之后,从asm文件而不是字节文件中提取黑白图像。

2.元数据泄露

当处理过的特征在没有应用任何机器学习的情况下,可以非常完美地解释目标时,这可能发生了数据泄露。

实例3:桑坦德客户价值预测挑战赛

如上图所示,目标变量明显泄漏到了f190486列中。事实上,没有用任何机器学习就得到了0.57分,这在排行榜上是个高分。在竞赛截止日期前二十天左右,主持竞赛的桑坦德银行终于发现了这个问题,但他们最终还是决定继续比赛,让参赛者假设这是一个数据属性。

虽然这种错误非常罕见,但如果只是想在竞赛中取得好排名,你可以在一开始从文件名、图像元数据以及序号等特征中尝试提取模式。请注意,这种做法本身对实际的数据科学问题没有作用。

比起在IDA和其它特征上花费大量时间,如果你真的每次都认真做探索性数据分析了(EDA),你可能会因此发现竞赛“捷径”。

3.表征学习特征

对于资历较老的数据科学参赛者,他们对基础特征工程技巧肯定十分熟悉,比如Label Encoding、one-hot编码、Binning等等。然而,这些方法非常普通,现在每个人都知道它们该怎么用。

Binning是一种图像读出模式,将相邻像元感应的电荷加在一起,以一个像素的模式读出。

为了从人群中脱颖而出,为了在排行榜上占据更高的名次,我们需要发掘一些聪明的方法,比如自编码器。自编码器能从数据样本中进行无监督学习,这意味着算法直接从训练数据中捕捉最显著的特征,无需其他特征工程。

4.均值编码

均值编码其实还是很常见的,这是一种非常适合初学者的技巧,能在解决问题的同时提供更高的准确性。如果我们用训练数据中的目标值替换分类值,这叫Target Encoding;如果我们用平均数这样的统计量度来对分类值进行编码,这就叫均值编码(Mean Encoding)。

下面是一个示例,我们需要基于每类目标变量的value_counts,通过标签数量、目标变量编码标签。

其中,featurelabel是scikit-learn编码的标签,featuremean就是莫斯科标签下的真实目标数量/莫斯科标签下的目标总数,也就是2/5=0.4。

同理,对于Tver标签——

m=Tver标签下的真实目标数量=3

n=Tver标签下的目标总数=4

相应的,Tver编码就是m/n=3/4=0.75(约等于0.8)

问:为什么均值编码优于其他编码方法? 答:如果数据具有高基数类别属性,那么相比其他编码方法,均值编码是更简单高效的一种方案。

数据分析中经常会遇到类别属性,比如日期、性别、街区编号、IP地址等。绝大部分数据分析算法是无法直接处理这类变量的,需要先把它们先处理成数值型量。如果这些变量的可能值很少,我们可以用常规的one-hot编码和label encoding。

但是,如果这些变量的可能值很多,也就是高基数,那么在这种情况下,使用label encoding会出现一系列连续数字(基数范围内),在特征中添加噪声标签和编码会导致精度不佳。而如果使用的是one-hot编码,随着特征不断增加,数据集的维数也在不断增加,这会阻碍编码。

因此,这时均值编码是最好的选择之一。但它也有缺点,就是容易过拟合(提供数据多),所以使用时要配合适当的正则化技术。

5.转换目标变量

严格意义上来说,这不属于特征工程。但是,当我们拿到一个高度偏斜的数据时,如果我们不做任何处理,最后模型的性能肯定会受影响。

如上图所示,这里的数据高度偏斜,如果我们把目标变量转成log(1+目标)格式,那么它的分布就接近高斯分布了。

需要注意的是,提交预测值时,我们需要进行转换:predictions = np.exmp1(log_predictions)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值