从分类数据中提取特征
from sklearn.feature_extraction import DictVectorizer
onehot_encoder = DictVectorizer() #字典转onehot用DictVectorizer()
instances = [{'city': 'New York'},{'city': 'San Francisco'},{'city': 'Chapel Hill'}]
print (onehot_encoder.fit_transform(instances).toarray())
out:[[0. 1. 0.]
[0. 0. 1.]
[1. 0. 0.]]
从文本中提取特征
最常见的文本展现形式是词袋模型。这个表达方式用了多重分类,或者是袋子来编码出现在文本中的词;这个词袋不管语法和词的顺序,它可以被看做onehot编码的延伸。它为文本中每个感兴趣的单词创建一个特性。“词汇袋”模型是由一种直觉所激发的,即包含相似单词的文档往往具有相似的含义。尽管它编码的信息有限,但它可以有效地用于文档分类和检索。一组文档被称为语料库。让我们使用一个包含下面的两个文档的语料库来检查单词袋模型:
corpus = [
‘UNC played Duke in basketball’,
‘Duke lost the basketball game’
]
这个语料库包含八个独特的单词:UNC, played, Duke, in, basketball, lost,the还有game。语料库的独特词汇组成了它的词汇。词袋模型使用一个含有词汇表中每个单词对应元素的特征向量,来表示每个文档。我们的语料库有八个唯一的单词,所以每个文档将由一个带有八个元素的向量来表示。组成一个特征向量的元素的个数称为向量的维数。字典将词汇表映射到特征向量中的索引。
在最基本的词袋表示方法中,特征向量中的每个元素都是一个二进制值数,表示文档中是否出现相应的单词。例如,第一个文档中的第一个单词是UNC。字典中的第一个词是UNC,所以这个向量中的第一个元素等于1。字典里的最后一个词是game。第一个文档不包含单词game,所以它的第8个元素被设为0。CountVectorizer类可以从一个字符串或文件中生成一个词袋。默认情况下,CountVectorizer将文档中的字符转换为小写,并标记文档。
标记化是将字符串分割为符号或有意义的字符序列的过程。符号经常是单词,但它们也可能是短的序列,包括标点符号和词缀。CountVectorizer类使用一个正则表达式,它可以在空格处拆分字符串,并提取长度为两个或多个字符的字符序列。
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['UNC played Duke in basketball','Duke lost the basketball game']
vectorizer = CountVectorizer()
print (vectorizer.fit_transform(corpus).todense())#将稀疏矩阵转化为完整特征矩阵
print (vectorizer.vocabulary_)