让DictVectorizer将数值识别为名义值
我有一个数据集,里面有学生的毕业年份作为一个属性。这个属性其实是名义型的,也就是说它只是用来分类,并没有大小之分。但是在scikit-learn这个库里,DictVectorizer
会把像1988这样的年份转换成数字。那我该怎么让DictVectorizer
把它当作名义型数据来看待呢?
1 个回答
2
你可以把年份的值写成字符串,比如 {'year': '1998'}
,而不是 {'year': 1998}
。这是根据DictVectorizer的说明来的:
当特征值是字符串时,这个转换器会进行一种叫做二进制独热编码(也叫做one-of-K编码)。也就是说,对于特征可能的每一个字符串值,它都会生成一个布尔值特征。例如,一个特征“f”可以取“ham”和“spam”这两个值,那么在输出中就会变成两个特征,一个表示“f=ham”,另一个表示“f=spam”。
举个例子:
from sklearn.feature_extraction import DictVectorizer
d_numerical = [{'year': 1997},
{'year': 1998},
{'year': 1999}]
print DictVectorizer().fit_transform(d_numerical).toarray()
d_categorical = [{'year': '1997'},
{'year': '1998'},
{'year': '1999'}]
print DictVectorizer().fit_transform(d_categorical).toarray()
输出结果:
[[ 1997.]
[ 1998.]
[ 1999.]]
[[ 1. 0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]
在这里,第二种情况似乎就是你想要的结果。