让DictVectorizer将数值识别为名义值

1 投票
1 回答
664 浏览
提问于 2025-04-18 00:29

我有一个数据集,里面有学生的毕业年份作为一个属性。这个属性其实是名义型的,也就是说它只是用来分类,并没有大小之分。但是在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.]]

在这里,第二种情况似乎就是你想要的结果。

撰写回答