[机器学习与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博客

本文网址:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值