机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

sklearn.feature_extraction模块用来以一种机器学习算法支持的格式提取数据集的特征。实际上,特征提取就是将任意类型的数据,比如说文本或图像,变换为可供机器学习算法使用的数值向量。

加载特征

DictVectorizer类能够用来将字典对象列表表示的特征数据转换为NumPy/SciPy表示形式。Python的字典对象虽然处理速度较慢,但也有一些优势,例如,使用方便,除了存储值以外还可以存储特征的名字。对于类别特征,DictVectorizer类执行one-of-K或one-hot编码规则。类别变量是“属性-值”成对形式,在这里,值被限制到一个无序的离散值列表上。例如,对象类型、标签、名字等等。下面的例子里,city是一个类别属性,而temperature是一个数值特征。

measurements = [{'city': 'Dubai', 'temperature': 33.},{'city': 'London', 'temperature': 12.},{'city': 'San Francisco', 'temperature': 18.},
]
from sklearn.feature_extraction import DictVectorizer
vec = DictVectorizer()
vec.fit_transform(measurements).toarray()

vec.get_feature_names()

文本特征提取

Bag of Words 表示法

文本分析是机器学习算法的一个主要应用领域。然而原始数据通常是一个符号标识序列,不能直接提供给算法,因为这些算法要求具有固定大小的数值型特征向量,而不是原始文档。为了解决这个问题,scikit-learn提供了一组从文本内容里提取数值向量的通用工具。

  • 标记字符串,对每一个可能的记号给予一个整数id, 例如,使用空格或其它标点符号作为记号的分隔符。

  • 计数记号在每个文档里的出现次数。

  • 归一化、加权出现在大多数样本/文档里的重要记号。

在这套方案里,特征和样本定义如下:

  • 每一个记号出现的频数被定义为一个特征。

  • 对一个给定的文档,所有记号频数组成的向量被定义为多维样本。

这样一来,全部文档就可以用一个矩阵表示,其中每个文档对应矩阵的一行,出现在全部文档里的每个记号(例如单词)对应矩阵的一列。我们称将一个文档集转换为一个数值特征向量的过程为向量化(vectorization). 这其中的特殊策略(打记号、计数、归一化)称为Bag of Words表示。文档由词出现频数表示,而完全忽略了词在文档里的相对位置信息。

稀疏性

由于大部分文档典型地只使用了全部词汇中的少数词,这导致结果矩阵有很多特征的值是0(典型的超过99%的特征)。例如,10,000个短文本(例如e-mails)合集将使用一张包括10万个单词的词汇表,而每个文档仅使用100到1000个不同的词。为了实现既能在内存中存储这样的矩阵,又能加快矩阵/向量的代数运算,我们将使用一种稀疏化的矩阵表示,详见scipy.sparse包里可利用的操作。

常见的向量化方法

CountVectorizer类能够执行打标记和出现次数统计。

from sklearn.feature_extraction.text import CountVectorizer

该模型有很多参数,而且参数的默认值对一般情况是合理的。

vectorizer = CountVectorizer()
vectorizer

现在,让我们使用它对一个文档示例打记号和统计词的出现频数。

corpus = ['This is the first document.','This is the second second document.','And the third one.','Is this the first document?',
]
X = vectorizer.fit_transform(corpus)
X

默认的配置通过提取至少有2个字母的词,给字符串打记号。执行这一步的特别函数可以被明确地要求。

analyze = vectorizer.build_analyzer()
analyze("This is a text document to analyze.") == (['this', 'is', 'text', 'document', 'to', 'analyze'])

在拟合的过程里,analyzer找到的每一项都被分配一个唯一的整数index, 对应结果矩阵的一列。按下面的方式查看矩阵列的解释说明:
对应结果矩阵的一列。按下面的方式查看矩阵列的解释说明:

vectorizer.get_feature_names() == (['and', 'document', 'first', 'is', 'one','second', 'the', 'third', 'this'])
X.toarray()

相反,由特征名映射到列index, 存储在vectorizer的vocabulary_属性里。

vectorizer.vocabulary_.get('document')

因此,没有出现在训练集的词将在调用transform方法时完全忽略。

vectorizer.transform(['Something completely new.']).toarray()

精彩内容,请关注微信公众号:统计学习与大数据

【sklearn第五讲】特征提取(上)相关推荐

  1. sklearn特征的提取(上)

    首先必须知道什么是特征工程 什么是特征工程 特征工程是通过对原始数据的处理和加工,将原始数据属性通过处理转换为数据特征的过程,属性是数据本身具有的维度,特征是数据中所呈现出来的某一种重要的特性,通常是 ...

  2. sklearn保存svm分类模型_【菜菜的sklearn】07 支持向量机(上)

    小伙伴们大家好~o( ̄▽ ̄)ブ,我是菜菜,这里是我的sklearn课堂第7期,今天分享的内容是支持向量机(上),下周还有下篇哦~ 我的开发环境是Jupyter lab,所用的库和版本大家参考:Pyth ...

  3. python 密度聚类 使用_使用python+sklearn实现硬币图像上的结构化Ward层次聚类演示...

    注意:单击此处https://urlify.cn/EFRn6b下载完整的示例代码,或通过Binder在浏览器中运行此示例使用Ward层次聚类计算二维图像的分割,由于聚类在空间上受到了限制,所以每个分割 ...

  4. sklearn模型的训练(上)

    模型的介绍 根据问题特点选择适当的估计器estimater模型:分类(SVC,KNN,LR,NaiveBayes,-) 回归 (Lasso,ElasticNet,SVR,-) 聚类(KMeans,-) ...

  5. 【OpenCV 例程 300篇】235. 特征提取之主成分分析(sklearn)

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]235. 特征提取之主成分分析(sklearn) 特征提取是指从原始特征中通过数学变 ...

  6. 【机器学习】特征提取

    特征提取 目标 应用DictVectorizer实现对类别特征进行数值化.离散化 应用CountVectorizer实现对文本特征进行数值化 应用TfidfVectorizer实现对文本特征进行数值化 ...

  7. tfidf处理代码_tf idf公式及sklearn中TfidfVectorizer

    在文本挖掘预处理之向量化与Hash Trick中我们讲到在文本挖掘的预处理中,向量化之后一般都伴随着TF-IDF的处理,那么什么是TF-IDF,为什么一般我们要加这一步预处理呢?这里就对TF-IDF的 ...

  8. 深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?

    原文:http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650718717&idx=1&sn=85038d7c906c ...

  9. 吴麒pdf 自动控制原理下_自动控制原理 第五讲 频域分析(下)

    接上一篇自动控制原理 第五讲 频域分析(上) 提纲如下 四.几何表示法(Bode图) 1.Bode图相关 (讲述了Bode图坐标纸的绘制和Bode里面三频段的绘制.) 五.Bode图判稳 (这里考察的 ...

  10. python独热编码作用_关于sklearn独热编码

    一.数值型类别变量 #简单来说 LabelEncoder 是对不连续的数字或者文本进行编号 from sklearn.preprocessing import LabelEncoder le = La ...

最新文章

  1. 如何知道协议在哪个OSI层上运行?—Vecloud微云
  2. 云服务器怎么打开_香港云服务器怎么样?
  3. 【转】Python可变长度的函数参数
  4. QString与中文问题
  5. docker设置镜像加速器
  6. 内网python 仓库_GitHub - xanarry/LanTrans-desktop: 这是一个用python写的局域网传文件工具, 跨平台, 仓库中还有安卓版的工程...
  7. 使用Spring Boot来加速Java web项目的开发
  8. java工程展示问题
  9. java在线视频源码_java在线视频会议源代码
  10. pdf转换器注册码及pdf转换器使用步骤
  11. JVM 内存分配策略
  12. 杭州师范大学计算机科学与技术怎么样,杭州师范大学2020年本科专业录取分数大排名,计算机类专业最低...
  13. 写给安徽合肥高三的你——少年不惧岁月长,敢挽桑弓射玉衡
  14. Elasticsearch 文档内容检索插件 ingest attachment 安装
  15. WINCC的SQL应用,无需修改任何源码
  16. 让图片和文字在一行中垂直居中对齐的方法
  17. MapGuide 6.5、MapGuide Open Source 和MGEnterprise2007区别
  18. 暖通空调的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 163.Oracle数据库SQL开发之 SQL优化——优化工具
  20. 浅谈伺服电机三种控制方式

热门文章

  1. phonegap安装中的问题
  2. 我是如何写作一本软件+哲学式的书籍的(上)
  3. C++ GUI Qt4 自学笔记
  4. .net学习笔记之协变和抗变(原创)
  5. 怎么用javascript进行拖拽[zt]
  6. .NET 中的序列化
  7. 使用Python来调用电脑音响
  8. Jsoup爬虫新手一
  9. 数组中只出现一次的数字(python解法)
  10. python supper()函数