机器学习模型中的分类变量最多可以有多少个值? 举报 理由 举报 取消 比如说LR回归里面有个 城市变量,那么这个城市变量下面有1000个多个值。这么多值的分类变量模型能够进行很好的运算么?或者有没有其他好的处理方式?? 2017年10月30日 6 条回复 1412 次浏览 学习,数据挖掘,机器,模式识别
回复 ( 6 )
我以前总结过有四个思路:
1、前面有人说过的one-hot编码,优点是简单,缺点是维度高了,太稀。类似的是搞成hash。
2、把分类变量做特征工程,汇总分组啊之类的,降维。
3、把分类变量变成数值变量,例如把不同城市的编码变成对应的经纬度,或是城市人口值,或是Y值,类似于银行信用评级里头WOE的搞法。
4、词向量的思路,对任何一个取值比较多的分类变量,都可以采用类似的向量化嵌入的思路来搞。
第四个思路我最喜欢。
补充一个很好的连接:Beyond One-Hot: an exploration of categorical variables – Will's Noise
多少个都行。如果这些值之间毫无关系,标准的处理方法是one-hot编码,即有多少个值,就用多少维特征,其中对应于值的那一维取1,其余维取0。
当然你会觉得这样做不够好:一下子多出来上千个特征,如果没有庞大的数据量,很难学习出每个特征的权重。这个想法是正确的。仍以城市为例,北京、上海、南京、济南、烟台、龙口这些城市,在我们眼里有很多关联:北京、上海都是直辖市,都是大城市;上海、南京地理位置接近;南京、济南都是省会城市;济南、烟台、龙口都在山东省。但如果我们采用one-hot编码,在计算机眼里这些城市就都是一模一样的,并且毫无关联。因此,我们要做的是针对城市提取一些有意义的特征,比如经纬度、人口数量、是否为直辖市、是否为省会城市、所属省份等等。这样就能有效地降低特征维数,并且把握住各个城市之间的关联。这里面“所属省份”仍然是一个能取几十个值的特征,我们可以继续挖掘它的内涵:位于北方还是南方,东部还是西部,是否沿海,等等。
对排名第一的答主提一个小小的意见。答主用one-hot进行编码,应该是计算机出身的哈。那么统计的角度看,题主用的是LR回归,城市变量有k个取值,设置k个虚拟变量(特征)X1,X2,…Xk的话,恒有X1+X2+…Xk=1,属于完全多重共线性,不能满足回归分析对自变量的独立性要求。 设置(k-1)个虚拟变量可能更加严谨。后面的思路和那位答主是一样的,做特征工程降维。当然如果单纯从工业界的角度看,数据量大起来,再加上特征工程的降维过程,虚拟变量取k个还是(k-1)个应该差别不大。小弟统计硕士研一,各位看官不要太当真(逃
1000算啥,还有上亿的呢,数量小了要机器学习干啥,人拍拍得了。
是否可以考虑根据城市的特性(从业务角度理解)做个分箱处理。
比如将X1作为超大城市变量,X2作为大城市变量。
这样做,比直接用one-hot编码维度要小!
多少个都行,基本上就两种思路,一个变量k个值就转换成k个虚拟变量,或者用类似于Python 下label encoder将categorical 的变量转换成数字。第二种方法局限性较大,一是不适用于建立预测具体数值的模型,比如线性回归,只能用于分类,二是即使用于分类,也有一些模型不适合,三是可能结果的精度不如第一种方法。