[机器学习与scikit-learn-42]:特征提取-1-从字典中提取特征
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与scikit-learn-42]:特征提取-1-从字典中提取特征相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:
目录
前言:
机器学习算法的输入是样本的多个维度的特征,特征来自于原始样本数据,但有不是原始的样本数据。样本的特征与原始数据之间并非完全等价的,在机器学习算法学习中,大部分生成的原始数据就是特征,然后在解决现实问题时,原始数据往往无法直接作为特征值,如文本数据,语音数据他们都无法直接作为模型的特征数据。
第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-从字典中提取特征的主要内容,如果未能解决你的问题,请参考以下文章