BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #30593同步于 2018/7/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖

【问题】关于onehot的几个小问题

iLuffy
2018/7/19镜像同步15 回复
小白。。。最近在处理一个CTR的数据集,在数据处理的时候遇到了问题,希望有大神能帮忙解答一下,感激不尽: 1 sklearn的onehotencoder的输入要求一定是整型吗?如果是字符串或其他型的怎么办? 2 对train文件和test文件进行同样的数据处理过程中,如果都使用了onehot编码,那两个文件里相同的类别计算 出来的编码一定是一样的吗? 3 用户ID需要onehot编码吗? 这些问题已经困扰我一天了,希望大家不吝赐教,感激[ema11]
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dxy1机器人#1 · 2018/7/19
【 在 iLuffy 的大作中提到: 】 : 小白。。。最近在处理一个CTR的数据集,在数据处理的时候遇到了问题,希望有大神能帮忙解答一下,感激不尽: : 1 sklearn的onehotencoder的输入要求一定是整型吗?如果是字符串或其他型的怎么办? : 2 对train文件和test文件进行同样的数据处理过程中,如果都使用了onehot编码,那两个文件里相同的类别计算 : ................... onehot只用过数值的,这个其实查一下sklearn的输入就知道了,字符串的我记得有个encoder是可以的 一般使用onehot是一起使用的,因为test可能会出trian里没有的数据 id类特征这个取决于怎么用,或者用不用,用的话也可以
iLuffy机器人#2 · 2018/7/19
【 在 dxy1 的大作中提到: 】 : : onehot只用过数值的,这个其实查一下sklearn的输入就知道了,字符串的我记得有个encoder是可以的 : 一般使用onehot是一起使用的,因为test可能会出trian里没有的数据 : ................... 哇,非常感谢!茅塞顿开[ema26] 那是不是一定要用onehot处理特征呢?如果这个特征个数非常多,onehot以后维度非常大、非常稀疏,比如说上百万了,是不是就不要用这个特征处理了?或者有什么更合适的特征处理的方法呢?
dxy1机器人#3 · 2018/7/19
【 在 iLuffy 的大作中提到: 】 : : 哇,非常感谢!茅塞顿开 : 那是不是一定要用onehot处理特征呢?如果这个特征个数非常多,onehot以后维度非常大、非常稀疏,比如说上百万了,是不是就不要用这个特征处理了?或者有什么更合适的特征处理的方法呢? 一般来说对于lr模型而言,数值类型没有大小之分的类型要做onehot,因为onehot是展开成没有大小的类型了,Python是用系数矩阵存储的,所以一般不用担心存储问题,更合适的是使用决策树,因为决策树是基于划分的,不存在所谓大小分割一说,具体怎么使用要看实际需求,不过一般来说决策树效果要好
iLuffy机器人#4 · 2018/7/19
【 在 dxy1 的大作中提到: 】 : : 一般来说对于lr模型而言,数值类型没有大小之分的类型要做onehot,因为onehot是展开成没有大小的类型了,Python是用系数矩阵存储的,所以一般不用担心存储问题,更合适的是使用决策树,因为决策树是基于划分的,不存在所谓大小分割一说,具体怎么使用要看实际需求,不过一般来说决策树效果要好 谢谢大神
byrssss机器人#5 · 2018/7/19
一热 二冷 @twocold
hu040hu机器人#6 · 2018/7/20
labelencoder可以将字符转化成数值,然后onehot; 将train和test拼接在一起onehot,这样test和train就一致了 维数多我一般是先用稀疏矩阵跑,然后用lgb树模型迭代一次后,根据输出的特征重要性,直接把没有用到的特征值或者小于某个阈值的特征去掉,维度能大大减少而且性能差距不大; 当然我的经验也比较少,ID类还可以按照频度或者熵,把低频的ID或者熵很大,都统一归为一个ID,比如名为other,再进行one-hot; 看你的发帖感觉像我刚入门那会,哈哈,希望能帮到你哦
iLuffy机器人#7 · 2018/7/23
【 在 hu040hu 的大作中提到: 】 : labelencoder可以将字符转化成数值,然后onehot; : 将train和test拼接在一起onehot,这样test和train就一致了 : 维数多我一般是先用稀疏矩阵跑,然后用lgb树模型迭代一次后,根据输出的特征重要性,直接把没有用到的特征值或者小于某个阈值的特征去掉,维度能大大减少而且性能差距不大; : ................... 哈哈 好的好的 谢谢你啦
guduzhe机器人#8 · 2018/7/31
帮你出坑: 1、one_hotting尽量不用sklearn自带的,最好用pandas的get_dummies方法,sklearn的one-hotting坑有点多 2、进行类别特征处理的时候最好把训练集和测试集放在一起处理,如果分开的话 很容易出现训练集和测试集类别特征不一样的情况 3、目前无论是回归、分类还是排序都强烈推荐lightgbm,速度快的一b,秒sklearn和xgboost几条街,同时支持类别特征,性能和xgboost在参数相同的情况不相上下!
guduzhe机器人#9 · 2018/7/31
另外lgb是直接支持类别特征的,把类别特征用pandas转成category格式直接喂给模型即可,这就不用one-hot了,你用sklearn或者xgb都必须one-hot,如果树模型的话,深度容易过高,容易过拟合。一点自己的理解