host error什么意思_pyspark建模,为什么做完特征变换后样本减少了?

220c05fb440823e0a8999641b89e073a.png

前几天在用pyspark建模的时候,遇到一个非常怪异的情况,我对特征做完编码后,数据量变为了1/3,我顿时感觉很惊讶,怎么突然少了这么多,那结果还准确嘛?

offline原始dfcnt

这就是当时的数据情况,基本意思是,我对特征做完均值填充后还有642402个样本,到onehot后就只剩下276848个样本了,后面做归一化后又变了,难道做个onehot编码样本数还会变吗?

我又找了具体的代码看了下

ffb981240f4e68022b2d944d3a9a86be.png
具体的pyspark代码

从代码中可以看到,从填充完均值到计算onehot编码,中间经历了StringIndexer编码(函数名貌似写反了)和onehot编码,又找到我的封装函数

bc4d76cb8e18aaa106e29f95c1102bda.png
onehot编码函数

看了函数,觉得也没有异常的地方,唯一有问题的可能就是第95行dropLast=False了,我查了下官方文档,基本意思是说,是否删除最后一个stringindex编码的序号,最后一个就是重复次数最少,特征出现最少的取值,这里是False就是说不丢,即保留原有特征的各个取值,所以这里应该是不会导致出现样本数减少的原因。

继续找,那应该就很大可能是出现在StringIndexer编码上了,上代码:

d680df9e99d91d5a8e0396a9b9750459.png
StringIndex编码

突然发现这里有一个HANDTYPE的参数,之前看了官方文档,没明白其中的含义,这下直接明白了,先看下官方文档

4730fb00ee6f2bb8d825dcda0156eecc.png
setHandleInvalid参数的官方文档说明

之前看着觉得很奇怪,就没有深究,这会再看,豁然开朗,HANDTYPE可以选择skip/error/keep三种值,刚好我选择的是skip,这就意味着在String Index编码时,会过滤掉有空值的样本,这下找到原因了,好了改成keep和error都分别测试了下,果然样本数没减少了

本质上,一般来讲跳过空值可能会对模型有利一些,不过我们得知道样本损失在什么地方了,做到心中有数,模型效果好能知道为什么好,不好又是因为什么而不好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值