sklearn特征提取方法学习

sklearn.feature_extraction模块主要处理从原始数据中特征提取,目前主要包括从文本或图像中提取特征方法。

  • sklearn.feature_extraction.DictVectorizer(dtype=<type ‘numpy.float64’>, separator=’=’,sparse=True, sort=True):将字典列表映射成矩阵
参数说明:
dtype:特征值数据类型,默认值numpy.float64,支持Numpy数组、scipy稀疏矩阵
separator:哑变量构造新特征使用的分隔符,默认‘=’
sparse:表示经过处理后的数据是否是稀疏标识,True表示生产稀疏矩阵,False表示生产数组
sort:训练时,特征名称和特征值是否进行排序标识,默认True
①利用DictVectorizer特征提取例子
a、字典的values都是数字型
In [1]: from sklearn.feature_extraction import DictVectorizer
   ...: import numpy as np
   ...: v = DictVectorizer(dtype=np.float64,sparse=False,sort=True)
   ...: D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}]
   ...: X = v.fit_transform(D)
   ...: print(type(v.fit_transform(D)))
   ...: X
   ...:
   ...:
<class 'numpy.ndarray'>
Out[1]:
array([[ 2.,  0.,  1.],
       [ 0.,  1.,  3.]])
b、字典values是字符型
In [3]: from sklearn.feature_extraction import DictVectorizer
   ...: measurements = [{'city': 'Dubai', 'temperature': 33.},
   ...:                 {'city': 'London', 'temperature': 12.},
   ...:                 {'city': 'San Fransisco', 'temperature': 18.} ]
   ...: vec = DictVectorizer(sparse=True,separator=':',sort=True)
   ...: print(type(vec.fit_transform(measurements)))
   ...: vec.fit_transform(measurements).toarray()
   ...:
<class 'scipy.sparse.csr.csr_matrix'>
Out[3]:
array([[  1.,   0.,   0.,  33.],
       [  0.,   1.,   0.,  12.],
       [  0.,   0.,   1.,  18.]])
从上面两种情况看:若字典的values都是数字型,则将字典的键映射成特征名称,字典values映射成特征值;若字典的values是字符型(即分类类型),则进行哑变量处理,将字符型的"字典字符键+分隔符separator+字典字符values"映射成特征名称,特征值为0或1
②属性值
vocabulary_:返回特征名称及索引组成的字典

In [4]: v.vocabulary_
Out[4]: {'bar': 0, 'baz': 1, 'foo': 2}

In [5]: vec.vocabulary_
Out[5]: {'city:Dubai': 0, 'city:London': 1, 'city:San Fransisco': 2, 'temperatur
e': 3}
feature_names_:返回特征名称组成的列表
In [6]: v.feature_names_
Out[6]: ['bar', 'baz', 'foo']

In [7]: vec.feature_names_
Out[7]: ['city:Dubai', 'city:London', 'city:San Fransisco', 'temperature']
③方法
  • fit(X, y=None)
In [8]: v.fit(D)
Out[8]:
DictVectorizer(dtype=<class 'numpy.float64'>, separator='=', sort=True,
        sparse=False)

In [9]: vec.fit(measurements)
Out[9]:
DictVectorizer(dtype=<class 'numpy.float64'>, separator=':', sort=True,
        sparse=True)
  • fit_transform(X, y=None)
In [10]: v.fit_transform(D)
Out[10]:
array([[ 2.,  0.,  1.],
       [ 0.,  1.,  3.]])

In [11]: vec.fit_transform(measurements).toarray()
Out[11]:
array([[  1.,   0.,   0.,  33.],
       [  0.,   1.,   0.,  12.],
       [  0.,   0.,   1.,  18.]])

In [12]: vec.fit_transform(measurements)
Out[12]:
<3x4 sparse matrix of type '<class 'numpy.float64'>'
        with 6 stored elements in Compressed Sparse Row format>
  • get_feature_names()
In [13]: v.get_feature_names()
Out[13]: ['bar', 'baz', 'foo']

In [14]: vec.get_feature_names()
Out[14]: ['city:Dubai', 'city:London', 'city:San Fransisco', 'temperature']
  • inverse_transform(X, dict_type=<type ‘dict’>)
In [15]: v.inverse_transform(X,dict)
Out[15]: [{'bar': 2.0, 'foo': 1.0}, {'baz': 1.0, 'foo': 3.0}]

In [16]: X2 = vec.fit_transform(measurements).toarray()

In [17]: X2
Out[17]:
array([[  1.,   0.,   0.,  33.],
       [  0.,   1.,   0.,  12.],
       [  0.,   0.,   1.,  18.]])

In [18]: vec.inverse_transform(X2,dict_type=dict)
Out[18]:
[{'city:Dubai': 1.0, 'temperature': 33.0},
 {'city:London': 1.0, 'temperature': 12.0},
 {'city:San Fransisco': 1.0, 'temperature': 18.0}]
  • restrict(support, indices=False)
In [19]: from sklearn.feature_extraction import DictVectorizer
    ...: from sklearn.feature_selection import SelectKBest,chi2
    ...: import numpy as np
    ...: v = DictVectorizer(dtype=np.float64,sparse=False,sort=True)
    ...: D = [{'foo': 1, 'bar': 2}, {'foo': 3, 'baz': 1}]
    ...: X = v.fit_transform(D)
    ...: support = SelectKBest(chi2,k=2).fit(X,[0,1])
    ...: print(support.get_support())
    ...: print(v.restrict(support.get_support()))
    ...: v.get_feature_names()
    ...:
[ True False  True]
DictVectorizer(dtype=<class 'numpy.float64'>, separator='=', sort=True,
        sparse=False)
Out[19]: ['bar', 'foo']
  • transform(X, y=None)
In [20]: v.transform(D)
Out[20]:
array([[ 2.,  1.],
       [ 0.,  3.]])
  • get_params(deep=True)
In [21]: v.get_params()
Out[21]: {'dtype': numpy.float64, 'separator': '=', 'sort': True, 'sparse': Fals
e}
  • set_params(**params)
In [22]: v.set_params(sparse=True)
Out[22]:
DictVectorizer(dtype=<class 'numpy.float64'>, separator='=', sort=True,
        sparse=True)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值