我的数据中有两千多个特征,其中大部分都是这样的:在同一个特征中,取值既可能为数值,也可能是字母。比如,特征A表示在现居地居住了多久,其中的值可能是具体的数,如2年、5年、8年,也可能是字母M、T、C,这些字母表示出于某些原因,得不到具体居住了多久的数据。
但如果我想运行算法,需要先将这些字母转换为数值。毕竟不是纯类别特征,中间还夹杂了有意义的数值,应该如何处理呢?
首先..一点..你不知道这些字母的含义...到底是居住了多久...或者是其他的含义啊.. 然后你要做算法的时候,要将这些字母转换成数值...这个数值的转换公式是什么呢.. 你不知道字母的含义,然后又去转换成数值,如果这个特征的确实存在那样的数值, 你不是就混淆了吗. 要么弄清楚这些字母的具体含义,要么直接去除. 不然就是做逻辑混淆的.
不管是字母还是数字 还是中文 转换的前提的你得知道这个规则吧 。
其实知道规则了 转换不转换 都不重要了 不转就是处理的时候 多个分支呗。
一般会对这种字符串类型的数据进行量化,要么是数值映射,要么是one-hot编码。
可以参考我之前的文章https://zhouchen.blog.csdn.net/article/details/101435593。
如果你是表格型特征,pandas有个很方便的处理函数。
https://blog.csdn.net/extremebingo/article/details/80402312
https://www.jianshu.com/p/20abe9f204b1
https://zhuanlan.zhihu.com/p/90782025
离散变量数值化处理
参考https://zhuanlan.zhihu.com/p/88921408
比如2年、5年、8年;分别使用001,010和100表示
例如,有个特征为m,取值有A,B,C,可以将其拆分为3个特征m_A,m_B,m_C,为A则m_A为1其他为0。
或者你可以先去全数据扫一下..看看出现这样的情况多还是不多。但是数据量大肯定耗时.动手总比空想强
你首先要把数字列非数字的值和缺省的剔除掉 机器学习是数学运算...字母是算不了的... 你数据多且字母占比小的话,建议直接删除这个行... 找了一篇数据处理的,你有兴趣可以看一下... https://www.cnblogs.com/wkslearner/p/8933685.html
具体转化上,可以使用两种方式:1. 序号编码。 2. 独热编码。
序号编码通常用于处理类别间具有大小关系的数据。例如成绩,可以分为低、中、高三档,我们可以将其编码分别为1、2、3进行表示。
独热编码通常用于处理类别间不具有大小关系的数据。具体使用时,可以采用稀疏向量进行表示。
机器学习特征处理——独热编码:
https://www.jianshu.com/p/42e93acacc52