使DictVectorizer将数值识别为名义值

时间:2014-03-29 21:29:57

标签: python scikit-learn

我有一个数据集,其中包含学生毕业年份作为属性。当然这样的属性是名义上的。但是scikit-learn中的DictVectorizer会将像1988这样的值转换为数字。如何让DictVectorizer将其视为名义上的?

1 个答案:

答案 0 :(得分:2)

根据DictVectorizer的文档,您可以将年份值指定为字符串,例如{'year': '1998'}而不是{'year': 1998}

  

当特征值是字符串时,此变换器将执行二进制一热(也称为一个K)编码:为特征可以采用的每个可能的字符串值构造一个布尔值特征。例如,可以采用值“ham”和“spam”的功能“f”将成为输出中的两个功能,一个表示“f = ham”,另一个表示“f =垃圾邮件”。

一个例子:

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.]]

第二种情况似乎是你想要的。