[机器学习与scikit-learn-42]:特征提取-1-从字典中提取特征

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与scikit-learn-42]:特征提取-1-从字典中提取特征相关的知识,希望对你有一定的参考价值。

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:


目录

前言:

第1章 特征提取概述

1.1 什么是特征提取

1.2 特征提取与特征选项的区别与联系

1.3 特征提取的方法

第2章 字典中提取特征

2.1 概述

2.2 代码案例分析


前言:

机器学习算法的输入是样本的多个维度的特征,特征来自于原始样本数据,但有不是原始的样本数据。样本的特征与原始数据之间并非完全等价的,在机器学习算法学习中,大部分生成的原始数据就是特征,然后在解决现实问题时,原始数据往往无法直接作为特征值,如文本数据,语音数据他们都无法直接作为模型的特征数据。

 

第1章 特征提取概述

1.1 什么是特征提取

特征提取和特征选择都是从原始样本数据中找出最有效(同类样本的不变性、不同样本的鉴别性、对噪声的鲁棒性)的特征。

特征提取提取并不是必须的,有时候,原始的样本数据就可以表达为特征,这时候就不一定需要在记性特征提取了。

有时候,原始的样本数据无法用于机器学习的模型输入,这就需要从原始的数据中提取特征,然后转换成适合机器学习模型训练的特征数据。

1.2 特征提取与特征选项的区别与联系

特征提取:将原始特殊数据转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征数据。

特征选择:从特征集合中挑选一组最具统计意义和典型性的特征,而去掉非典型性、不重要的特征,达到特征的降维。用马克思哲学的观点来看:就是抓住主要矛盾、以及矛盾的主要方面,这就是特征选择 。

1.3 特征提取的方法

(1)字典中提取特征:DictVectorizer

(2)文本中提取特征:词频向量(CountVectorizer) TF-IDF向量(TfidfVectorizer,TfidfTransformer) 特征哈希向量(HashingVectorizer)

(3)图像中提取特征: 提取像素矩阵提取边缘和兴趣点。

第2章 字典中提取特征

2.1 概述

用python中的字典存储原始数据(可能是字符串数据)是一种常用的做法。

其优点是直观、容易理解。

但是sklearn的模型的输入特征必须是numpy或scipy数组,存放的必须是数字

这时候就需要把字典中的字符型特征数据转换成numpy或scipy数组的数字

(1)可以用DictVectorizer从字典中加载特征时候转换成numpy数组

(2)并对非数字的分类特征采用独热编码(one-hot),得到一个经过oneHot编码后的特征数据(这是DictVectorizer最重要的功能

2.2 代码案例分析

from sklearn.feature_extraction import DictVectorizer

# 定义字典 =》 key:value
# 如下有三个样本,每个样本2个特征值:城市、温度
measurements = [
'city': 'Dubai', 'temperature': 33.,
'city': 'London', 'temperature': 12.,
'city': 'San Francisco', 'temperature': 18.,
]
print(measurements)

# 创建一个字典转换特征的对象
vec = DictVectorizer()


# 把measurements字典中的value值(字符串)转换成oneHot编码值
X = vec.fit_transform(measurements).toarray()

print("特征值名称:", vec.get_feature_names())

print("对字符串特征值进行OneHot编码后的特征值:\\n", X)
['city': 'Dubai', 'temperature': 33.0, 'city': 'London', 'temperature': 12.0, 'city': 'San Francisco', 'temperature': 18.0]
特征值名称: ['city=Dubai', 'city=London', 'city=San Francisco', 'temperature']
对字符串特征值进行OneHot编码后的特征值:
 [[ 1.  0.  0. 33.]
 [ 0.  1.  0. 12.]
 [ 0.  0.  1. 18.]]

备注:

(1)城市是分类标签

有三种字符串行分类:Dubai、London、San Francisco,这三种字符型分类,属于样本标签数据,然后字符串分类类型是无法用于模型训练的。经过DictVectorizer变换后,就转换成了OneHot编码值:100、010、001三个标签值。

(2)温度

温度已经是数值数据了,不需要编码转换。

(3)字典转换成数组

字典:key:value

特征数值:需要把key提取出来,作为一列样本数据或标签的名称。key本身不是数据和标签,因此可以保留其名称:如下所示:

temperature    city

33.0                100

12                   010

18                   001

转换后,就可以变成模型所需要的样本数据X, Y了。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:

以上是关于[机器学习与scikit-learn-42]:特征提取-1-从字典中提取特征的主要内容,如果未能解决你的问题,请参考以下文章

Python 与金融数据|生成机器学习的标签和特征

机器学习实战 | 机器学习特征工程最全解读

机器学习 - 特征筛选与降维

如何使用机器学习模型(或其特征系数)来解释该特征是不是与特定类别相关?

机器学习特征筛选:相关系数法(correlation)

[机器学习与scikit-learn-43]:特征工程-特征提取(编码)-2-什么是特征提取以及文本词频向量