sklearn.feature_extraction.DictVectorizer
sklearn.feature_extraction.DictVectorizer:将字典组成的列表转换成向量。(将特征与值的映射字典组成的列表转换成向量)
1. 特征矩阵行代表数据,列代表特征,0表示该数据没有该特征
from sklearn.feature_extraction import DictVectorizer # 设置sparse=False获得numpy ndarray形式的结果 v = DictVectorizer(sparse=False) D = [{'foo':1, 'bar':2}, {'foo':3, 'baz':1}] # 对字典列表D进行转换,转换成特征矩阵 X = v.fit_transform(D) # 特征矩阵行代表数据,列代表特征,0表示该数据没有该特征 print(X)
[[ 2. 0. 1.] [ 0. 1. 3.]]
2. get_feature_names()获取特征列名
# 获取特征列名 print(v.get_feature_names())
['bar', 'baz', 'foo']
3. inverse_transform将特征矩阵还原成原始数据
# inverse_transform将特征矩阵还原成原始数据 # inverse:相反的 print(v.inverse_transform(X) == D)
True
4. 直接进行转换,不先进行拟合的话,无法识别新的特征
# 直接进行转换,不先进行拟合的话,无法识别新的特征。即没有fit。 print(v.transform([{'foo':4, 'unseen_feature':3}]))
[[ 0. 0. 4.]]
5. 配合特征选择
from sklearn.feature_selection import SelectKBest, chi2 # 使用卡方统计筛选出最好的2个特征 support = SelectKBest(chi2, k=2).fit(X, [0,1]) # 进行筛选,筛选的结果会自动覆盖原有特征矩阵 print(v.restrict(support.get_support())) print(v.get_feature_names())
DictVectorizer(dtype=<class 'numpy.float64'>, separator='=', sort=True, sparse=False) ['bar', 'foo']