字典特征和文本特征数据抽取

一.字典特征数据抽取

把字典中一些类别数据,分别进行转换成特征数据(one-hot).

在机器学习中为了方便日后的数据处理,我们需要对数据进行抽取,如:{‘name’:'李华','age':23}这样一条数据,数据量很小,处理起来很方便,但是当数据量非常大的时候,直接处理就会显得很是耗费处理资源,所以,可以对数据进行特征提取。

如下:一个list

[{‘name’:'李华','age':23},{‘name’:'张红','age':22}]

sparse矩阵表示如下:

(0, 0) 23.0   #(0,0)是23.0的坐标,下面都一样
(0, 2) 1.0
(1, 0) 22.0
(1, 1) 1.0

代码如下:

from sklearn.feature_extraction import DictVectorizer
#字典特征抽取
def dictvec():
    dict = DictVectorizer()

    data=dict.fit_transform([{'name':'李华','age':23},{'name':'张红','age':22}])
    print(data)

    return None

if __name__ == '__main__':
    dictvec()

可能还是不明白为什么?下面进一步?

不用sparse矩阵

from sklearn.feature_extraction import DictVectorizer
#字典特征抽取
def dictvec():
    dict = DictVectorizer(sparse=False)

    data=dict.fit_transform([{'name':'李华','age':23},{'name':'张红','age':22}])
    print(dict.get_feature_names())
    print(data)

    return None

if __name__ == '__main__':
    dictvec()

结果如下:

['age', 'name=张红', 'name=李华']
[[23.  0.  1.]
 [22.  1.  0.]]
这种编码方式叫:One-hot

现在可以清楚的看出特征处理后的数据形式了,就是每一列是一个属性(特征),相应的位置对应相应的值。

第一行[23. 0. 1.] 就是

(0,0) 23

(0,1)  0

(0,2) 1  此时表示是李华

二.文本特征数据抽取

统计单词个数

from sklearn.feature_extraction.text import CountVectorizer
#文本特征抽取
def dictvec():
    cv = CountVectorizer()

    data=cv.fit_transform(["life is short, i like life"])
    print(cv.get_feature_names())
    print(data.toarray())

    return None

if __name__ == '__main__':
    dictvec()
['is', 'life', 'like', 'short']
[[1 2 1 1]]
原文地址:https://www.cnblogs.com/little-monk96/p/14308689.html