我有一个数据集,其中包含学生毕业年份作为属性。当然这样的属性是名义上的。但是scikit-learn中的DictVectorizer
会将像1988这样的值转换为数字。如何让DictVectorizer
将其视为名义上的?
答案 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.]]
第二种情况似乎是你想要的。