Feature extraction 特征提取
参考自官方文档http://scikit-learn.org/stable/modules/feature_extraction.html
注意:特征提取与特征选择不同:前者包括将任意数据(如文本或图像)转换为可用于机器学习的数值特征。后者是应用这些特征的机器学习技术。
从字典加载特征
DictVectorizer类可将表示为标准Python字典(dict)对象列表的特征数组转换为scikit学习估计器能使用使用的NumPy / SciPy表示。
虽然Python的dict不是特别快,但它具有使用方便,稀疏(不需要存储缺失特征)和以键值对存储特征的优点。
measurements=[
{
'city':'Dubai','temperature':33},
{
'city':'London','temperature':12.},
{
'city':'San Fransisico','temperature':18.},
]
from sklearn.feature_extraction import DictVectorizer
vec=DictVectorizer()
vec.fit_transform(measurements).toarray()#这里对文本的处理方式类似于one_hot编码方式。原数据如果是数字类型则不变
array([[ 1., 0., 0., 33.],
[ 0., 1., 0., 12.],
[ 0., 0., 1., 18.]])
vec.get_feature_names()
['city=Dubai', 'city=London', 'city=San Fransisico', 'temperature']
DictVectorizer在自然语言处理(NLP)中也十分有用, 下面是‘The cat sat on the mat.‘中围绕’sat’一词提取的特征
pos_window = [
{
'word-2': 'the',
'pos-2': 'DT',
'word-1': 'cat',
'pos-1': 'NN',
'word+1': 'on',
'pos+1': 'PP',
},
# in a real application one would extract many such dictionaries
]
该描述可以被矢量化成适合于馈送到分类器的稀疏二维矩阵
vec=DictVectorizer()
pos_vectorized=vec.fit_transform(pos_window)
pos_vectorized
<1x6 sparse matrix of type '<class 'numpy.float64'>'
with 6 stored elements in Compressed Sparse Row format>
pos_vectorized.toarray()
array([[ 1., 1., 1., 1., 1., 1.]])
vec.get_feature_names()
['pos+1=PP', 'pos-1=NN', 'pos-2=DT', 'word+1=on', 'word-1=cat', 'word-2=the']
特征散列 Feature Hashing