一.字典特征数据抽取
把字典中一些类别数据,分别进行转换成特征数据(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]]