- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Mastering Machine Learning With scikit-learn-中文版-3
特征提取与处理
上一章案例中的解释变量都是数值,比如匹萨的直接。而很多机器学习问题需要研究的对象可能是分
类变量、文字甚至图像。本章,我们介绍提取这些变量特征的方法。这些技术是数据处理的前提——
序列化,更是机器学习的基础,影响到本书的所有章节。
分类变量特征提取
许多机器学习问题都有分类的、标记的变量,不是连续的。例如,一个应用是用分类特征比如工作地
点来预测工资水平。分类变量通常用独热编码 (One-of-K or One-Hot Encoding),通过二进制数来
表示每个解释变量的特征。
例如,假设city变量有三个值:New York, San Francisco, Chapel Hill。独热编码方式就是
用三位二进制数,每一位表示一个城市。
scikit-learn里有DictVectorizer类可以用来表示分类特征:
In [1]:
from sklearn.feature_extraction import DictVectorizer
onehot_encoder DictVectorizer()
instances [{city: New York},{city: San Francisco}, {city: Ch
apel Hill}]
print(onehot_encoder.fit_transform(instances).toarray())
[[ 0. 1. 0.]
[ 0. 0. 1.]
[ 1. 0. 0.]]
会看到,编码的位置并不是与上面城市一一对应的。第一个city编码New York是[ 0. 1. 0.],
用第二个元素为1表示。相比用单独的数值来表示分类,这种方法看起来很直观。New York, San
Francisco, Chapel Hill可以表示成1,2,3。数值的大小没有实际意义,城市并没有自然数顺
序。
文字特征提取
很多机器学习问题涉及自然语言处理 (NLP),必然要处理文字信息。文字必须转换成可以量化的特
征向量。下面我们就来介绍最常用的文字表示方法:词库模型 (Bag-of-words model)。
词库表示法
词库模型是文字模型化的最常用方法。对于一个文档 (document),忽略其词序和语法,句法,将
其仅仅看做是一个词集合,或者说是词的一个组合,文档中每个词的出现都是独立的,不依赖于其他
词是否出现,或者说当这篇文章的作者在任意一个位置选择一个词汇都不受前面句子的影响而独立选
择的。词库模型可以看成是独热编码的一种扩展,它为每个单词设值一个特征值。词库模型依据是用
类似单词的文章意思也差不多。词库模型可以通过有限的编码信息实现有效的文档分类和检索。
一批文档的集合称为文集 (corpus)。让我们用一个由两个文档组成的文集来演示词库模型:
In [2]:
corpus [
UNC played Duke in basketball,
Duke lost the basketball game
]
文集包括8个词:UNC, played, Duke, in, basketball, lost, the, game。文件的单词构成词汇表
(vocabulary)。词库模型用文集的词汇表中每个单词的特征向量表示每个文档。我们的文集有8个
单词,那么每个文档就是由一个包含8位元素的向量构成。构成特征向量的元素数量称为维度
(dimension)。用一个词典 (dictionary)来表示词汇表与特征向量索引的对应关系。
在大多数词库模型中,特征向量的每一个元素是用二进制数表示单词是否在文档中。例如,第一个文
档的第一个词是UNC,词汇表的第一个单词是UNC,因此特征向量的第一个元素就是1。词汇表的最
后一个单词是game。第一个文档没有这个词,那么特征向量的最后一个元素就
是0。CountVectorizer类会把文档全部转换成小写,然后将文档词块化 (tokenize)。文档词块
化是把句子分割成词块 (token)或有意义的字母序列的过程。词块大多是单词,但是他们也可能是
一些短语,如标点符号和词缀。CountVectorizer类通过正则表达式用空格分割句子,然后抽取长
度大于等于2的字母序列。scikit-learn实现代码如下:
In [3]:
from sklearn.feature_extraction.text import CountVectorizer
corpus [
UNC played Duke in basketball,
Duke lost the baske
文档评论(0)