sklearn.feature_extraction.DictVectorizer
DictVectorizer ( * , dtype =<class 'numpy.float64'> , separator='=' , sparse=True , sort=True )
将特征值映射列表转换为向量。
该转换器将特征名称到特征值的映射列表(类似字典的对象)转换为 Numpy 数组或 scipy.sparse 矩阵,以便与 scikit-learn 估计器一起使用。
当特征值是字符串时,此转换器将执行二进制 one-hot(又名 one-of-K)编码:为该特征可以采用的每个可能的字符串值构造一个布尔值特征。
如果特征值是一个序列或一组字符串,则此转换器将迭代这些值并计算每个字符串值的出现次数。
但是,请注意,当特征值为字符串类型时,此转换器只会执行二进制 one-hot 编码。如果分类特征表示为数值,例如 int 或字符串的可迭代,则可以使用 DictVectorizer OneHotEncoder来完成二进制 one-hot 编码。
构造参数:
dtype:dtype, default=np.float64* 特征值的类型。作为 dtype 参数传递给 Numpy array/scipy.sparse 矩阵构造函数。
separator:str, default=”=”* 为 one-hot 编码构建新功能时使用的分隔符字符串。
sparse:bool, default=True* 变换是否应该产生 scipy.sparse 矩阵。
sort:bool, default=True* 是否feature_names_
和vocabulary_
应该在拟合时排序
属性:
vocabulary_: 特征名称和特征索引的映射字典。
feature_names_: 一个包含所有特征名称的,长度为特征名称个数的列表。
方法:
方法名称 | 功能 |
---|---|
fit(X[, y]) | 了解功能名称列表 -> 索引映射。 |
fit_transform(X[, y]) | 学习特征名称列表 -> 索引映射和变换 X。 |
get_feature_names() | 已弃用:get_feature_names 在 1.0 中已弃用,并将在 1.2 中删除。 |
get_feature_names_out([input_features]) | 获取用于转换的输出特征名称。 |
get_params([deep]) | 获取此估计器的参数。 |
inverse_transform(X[, dict_type]) | 将数组或稀疏矩阵 X 转换回特征映射。 |
restrict(support[, indices]) | 使用功能选择将功能限制为支持的功能。 |
set_params(**params) | 设置这个估计器的参数。 |
transform(X) | 将 feature->value dicts 转换为数组或稀疏矩阵。 |
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer(sparse=False) #注若字典中包含非数字的值,需要进行特征抽取时,将sparse选为false
list = [{'城市':'北京', '国家':'中国', '其他':'美丽'}, {'城市':'西雅图', '国家':'美国', '其他':'优雅'}, {'城市':'巴黎', '国家':'法国', '其他':'浪漫'}]
result = vec.fit_transform(list)
print(result)
result = vec.inverse_transform(result)
print(result)
print(vec.get_feature_names())
#运行结果为 行数为输入列表中词典的数量,每个词典中包含多个特征,这些特征的取值总个数为列数
[[0. 0. 1. 1. 0. 0. 1. 0. 0.]
[1. 0. 0. 0. 0. 1. 0. 0. 1.]
[0. 1. 0. 0. 1. 0. 0. 1. 0.]]
[{'其他=美丽': 1.0, '国家=中国': 1.0, '城市=北京': 1.0}, {'其他=优雅': 1.0, '国家=美国': 1.0, '城市=西雅图': 1.0}, {'其他=浪漫': 1.0, '国家=法国': 1.0, '城市=巴黎': 1.0}]
['其他=优雅', '其他=浪漫', '其他=美丽', '国家=中国', '国家=法国', '国家=美国', '城市=北京', '城市=巴黎', '城市=西雅图']
#注:如本例中键值对包含非数值化的数据,需要将sparse设置为False,若不进行此操作默认sparse为True运行结果如下:
# (0, 2) 1.0
# (0, 3) 1.0
# (0, 6) 1.0
# (1, 0) 1.0
# (1, 5) 1.0
# (1, 8) 1.0
# (2, 1) 1.0
# (2, 4) 1.0
# (2, 7) 1.0
注:DictVectorizer一般用在机器学习模型训练和测试中,如果训练阶段使用fit_transform,则在测试阶段只需要对测试样本进行transform就行了
参考网站:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.DictVectorizer.html#sklearn.feature_extraction.DictVectorizer