字典特征提取DictVectorizer(特征工程之特征提取)

什么是特征工程

特征工程:是指使用专业背景知识和技巧处理数据使得特征能够在机器学习算法上发挥更好作用的过程。
意义:会直接影响机器学习的效果。
业界内有句流行的话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
特征工程包含的内容:特征提取、特征预处理、特征降维等。

一、什么是特征提取?

比如下图是一篇英文短文,我们想做文本分类,用某些算法去做。算法的内部是一些数学公式运算之类的,数学公式能够处理字符串吗?是不能的,这个时候需要通过一些方法,将文本字符串之类的转换成数值类型。但是怎么转换比较合适,怎么转换才能达到我们的目的呢,这就是特征提取要考虑的事情。
在这里插入图片描述
再比如泰坦尼克号的数据集中的性别,还是存储成了字符串male和femal,表示类别。同样要用机器学习算法去处理之前还是要将类型转换成数值(ont-hot编码或者哑变量)。在这里插入图片描述
所以特征提取可以这样说:特征提取是将任意数据(如文本或者图像)转换为机器学习的数字特征(特征值化是为了让计算机更好的去理解数据),包括字典特征抽取、文本特征提取、图像特征提取(深度学习)等。本文介绍字典特征抽取。

二、字典特征抽取举例

将类别转换成了one-hot编码

1.DictVectorizer()使用默认参数会返回一个稀疏矩阵

代码如下:

#1)实例化一个转换器类 2)调用fir_transform()方法
from sklearn.feature_extraction import  DictVectorizer#导包
#下面的data是数据
data=[{
    
    'city':'北京','tempreature':100},
      {
    
    'city':'上海','tempreature':60},
      {
    
    'city':'深圳','tempreature':30},]

#1实例化一个转换器类
transfer=DictVectorizer()
#2调用一fit_transform()方法
data_new=transfer.fit_transform(data)
print("看一下转换的结果data_new:\n",data_new)
print("看一下特征的名字:\n",transfer.get_feature_names())

运行结果如下:
看一下转换的结果data_new:
(0, 1) 1.0
(0, 3) 100.0
(1, 0) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
看一下特征的名字:
[‘city=上海’, ‘city=北京’, ‘city=深圳’, ‘tempreature’]

2.DictVectorizer(sparse=False)会返回一个one-hot编码矩阵

代码如下:

#1)实例化一个转换器类 2)调用fir_transform()方法
from sklearn.feature_extraction import  DictVectorizer#导包
#下面的data是数据
data=[{
    
    'city':'北京','tempreature':100},
      {
    
    'city':'上海','tempreature':60},
      {
    
    'city':'深圳','tempreature':30},]

#1实例化一个转换器类
transfer=DictVectorizer(sparse=False)
#2调用一fit_transform()方法
data_new=transfer.fit_transform(data)
print("看一下转换的结果data_new:\n",data_new)
print("看一下特征的名字:\n",transfer.get_feature_names())

运行结果如下:
看一下转换的结果data_new:
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
看一下特征的名字:
[‘city=上海’, ‘city=北京’, ‘city=深圳’, ‘tempreature’]

3.对比两个结果理解一下稀疏矩阵和ont-hot编码

在这里插入图片描述
sparse稀疏矩阵将非0值按照位置表示出来,这样做有什么好处呢?右边的是将类别转换成为one-hot编码,如果类别特别多呢?假设有几百个的时候,这样会使得0特别多,这时候用左边的稀疏矩阵可以提高加载效率,节省内存。
(备注:使用one-hot编码是为了让类别更加公平一点,相互之间没有优先级,在特征中对类别信息常用ont-hot编码处理)

三、应用场景

数据集当中类别数据如sex、Pclass比较多,将数据集中的特征转换为字典类型,再用DictVectorizer()转换;
本身拿到的数据类型就是字典类型;等。

总结

以上就是讲了一下DictVectorizer提取内容并对比了一下稀疏矩阵和one-hot编码矩阵。(如果您发现我写的有错误,欢迎在评论区批评指正)。

猜你喜欢

转载自blog.csdn.net/qq_27328197/article/details/113807051