龙空技术网

数据特征处理之字典型数据(One-hot编码)

统计学毕业的程序员 96

前言:

现时你们对“常用数据特征值”大概比较着重,兄弟们都需要了解一些“常用数据特征值”的相关内容。那么小编在网上收集了一些关于“常用数据特征值””的相关知识,希望你们能喜欢,各位老铁们快快来了解一下吧!

数据源存储的数据格式有多种形式,如文本型,数值型,JSON…, 其中JSON类型数据在python中也被称为字典类型,本篇文章则介绍的是字典型数据的特征抽取(特征值化)

仍然是借助机器学习工具模块sklearn来完成字典型型数据的特征抽取

# -*- coding:utf-8 -*-# @Author: 数据与编程之美# @File: dictionary.pyfrom sklearn.feature_extraction import DictVectorizerdef dict():    """    字典型数据特征值化    :return:    """    dic = DictVectorizer()    data = dic.fit_transform([{'name': '李四', 'age': 18},                              {'name': '张三', 'age': 30},                              {'name': '王五', 'age': 21}])    # 输出词条列表    print(dic.get_feature_names())    # 输出特征值化后的数据    print(data)if __name__ == "__main__":    dict()

输出结果如下

结果分析说明:

转换后的数据结果是以坐标的形式来显示

上述的坐标值数据结构其实是一个稀疏矩阵(Sparse matrix),意思是元素大部分为零的矩阵,稀疏矩阵还有一个明显的特征就是只存储非零数据,这样做的目的是使运算速度更快和压缩存储达到节省空间,其实它和下图的本质是一样的

其中,行数是字典的个数,列数是转换后的特征列表值种类个数。

第0行,第0列存储的值是18,换种解释就是在第一个字典数据中,age值是18就转换为18

第0行,第1列存储的值是0,意思是第一个字典数据中,没有张三记为0

第0行,第2列存储的值是1,意思是第一个字典数据中,有李四记为1

第0行,第3列存储的值是0,意思是第一个字典数据中,没有王五记为0

规律:

1、字典类型数据中,数值型(age)在转换后的特征列表中是以key作为特征名称的,而对于(name)这样的文字型(类似的还有:性别)数据而是以每种value值作为单独的一个特征名称放入特征列表中;

2、典类型数据中,数值型数据是多少转换后的值就是多少,文本型有对应的值就用1表示,没有就用0来表示(专业术语叫:One-hot编码、热编码

平常呢,对于输出稀疏矩阵这样的结果看起来很不直观,此时我们给DictVectorizer()加上参数sparse=False,再看看下结果

此时结果已变为我们常见的二维矩阵形式

结果分析说明

在没有加入参数sparse=False之前,字典数据特征值化后的结果是一个稀疏矩阵(sparse matrix),加入参数后变成了我们常见的二维矩阵形式,其实这两者结果没有什么本质上不同,只不过稀疏矩阵是以坐标的形式展示数据,并且只显示数据不为0的坐标,这样做的目的是使节约内存以及快速读取计算。

针对上述提及的One-hot编码的处理风格,我们再看看个例子会更加理解

现有一数据集如下:

特征有:name、Sex、Hobby、Height等。对于这样的数据是不能输入到算法中的,有时候我们会给每种数据做一个标记,如种类特别多的标记的数字也越多,此时对于这样数据集,因为0、1、2、3、4、5、6等标记的不同可能会产生优先级的臆想,为了消除这种现象,于是就有了One-hot编码,通过特征重构,将有的得标记为1,没有的标记为0。

以上内容就是字典型数据进行特征值化的具体操作方法,案例很简单,思想很重要。

---END---

首发地址: 公众号:数据与编程之美

标签: #常用数据特征值