比如说输入变量第一个是各省市,用(1,2,3,4...m)来表示各省市,是一个离散变量,第二个输入变量是车速,是一个连续变量,那要怎么进行数据处理,使得能够进行训练,就是离散变量+连续变量,要对这个离散变量做什么处理呢?
3个回答
处理这种分类变量,要结合模型来看。但总体来说有以下两种处理方式:
第一种是Label Encoder, 直接将分类变量转为数值变量,你的例子里就是使用(1,2,... m)来表示城市,这种方法为变量赋予了顺序的含义,变量的每个。我总结了几个特点:
- 分类变量是有序的话,例如小学,初中,高中这种,可以使用
- 如果模型只是用部分特征值来计算,比如decision tree, random forest,等树类算法适用。原因是数据集里连续变量多时,用One-hot-encoding会让其他非分类变量不被/很少被选入为特征
- 回归算法,neural network算法等不适用
第二种时One-Hot-Encoding,拓增数据集至很多个特征值,你的例子里,以每一个城市为一个特征,值只取0/1,如果有m个城市,则新增m个特征, 这种方法能保证每个分类变量里的取值有同等的重要性,无序的,不正交的变量。特点如下:
- 分类变量如果是无序的话,比如城市,可以使用One-Hot-Encoding
- 回归算法,KNN,Neural network等使用
- 结合PCA降维来使用有奇效,PCA可以找到线性相关的部分,并组合这部分特征
- 缺点就是会占用比较多内存计算空间了,毕竟数据集可能会被扩增到非常大
其余的方法如LightGBM encoding(支持类别变量), Hash encoding, embedding等,不同情况不同采用,这里就不多说了。
Reference:
What is the best method for converting categorical features to something numerical ones.
How LightGBM deals with categorical features
What algorithms require one-hot encoding?
你可以把省份进行独热处理(one-hot encoding),也就是把这一个特征变成m个二元特征。
SofaSofa数据科学社区DS面试题库 DS面经
比如说省份的数量是10个,意思是不是把这10个省份用(0,0,0,0,1,0,0,0,0,0)类似这样的形式考虑?然后在后面加上如速度的数值,比如是30,那这样组合起来的训练集样式就是(0,0,0,0,1,0,0,0,0,0,30)这样的吗?
-
goldminer
2020-04-13 11:37
是的
-
wxw_pku
2020-04-13 23:50
如果你是用python里的sklearn的api,那么你要离散变量处理成连续变量,才能训练
如果你用catboost,其实没有影响,可以直接混合离散变量和连续变量一起训练
SofaSofa数据科学社区DS面试题库 DS面经