Python sklearn库三种常用编码格式实例

 更新时间:2022年9月16日 00:21  点击:19 作者:LoveAndProgram

OneHotEncoder独热编码实例

class sklearn.preprocessing.OneHotEncoder(*, categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')

  • 目的:将分类要素编码为one-hot数字数组
  • 输入:为整数或字符串之类的数组,表示分类(离散)特征所采用的值。
  • 这将为每个类别创建一个二进制列,并返回一个稀疏矩阵或密集数组(取决于稀疏参数)默认情况下,编码器会根据每个功能中的唯一值得出类别(可改为手动)
  • 适用于GBDT、XGBoost、Lgb模型中效果都不错 注意:在最新版本的sklearn中,所有的数据都应该是二维矩阵,所以当它只是单独一行或一列需要进行reshape(1, -1)数据转换,否则会报错ValueError: Expected 2D array, got 1D array instead

以下面数据为例(数据源):

from sklearn.preprocessing import OneHotEncoder
import pandas as pd
train = pd.read_csv('./train.csv')
enc = OneHotEncoder(handle_unknown='ignore')
numerical_feature = ['policy_annual_premium','insured_education_level','capital-gains','incident_type','incident_severity',\
                   'property_damage','bodily_injuries','police_report_available','total_claim_amount','injury_claim','property_claim','vehicle_claim']
data = train[numerical_feature]
c = enc.fit_transform(data.values.reshape(1,-1))
c.toarray()#查看转化后的数据

输入数据由处理后的这种格式:

经过编码后得出编码后的数据(数据量过大用元组的形式展现),全部由二进制数0、1表示:

注意:在一对多的情况下y标签需要使用 sklearn.preprocessing.LabelBinarizer() 函数将多类标签转换为二进制标签

LabelEncoder标签编码实例

  • 目的:对目标标签进行编码,其值介于0和n_classes-1之间
  • 输入可以是数字标签,也可以是非数字标签,这里需要注意的是返回的类型是NumPy的array形式,上述OneHotEncoder ()返回的是系数矩阵形式。

from sklearn.preprocessing import LabelEncoder
Enc=LabelEncoder()
def yuchuli(data):
    numerical_feature = ['policy_annual_premium','insured_education_level','capital-gains','incident_type','incident_severity',\
                       'property_damage','bodily_injuries','police_report_available','total_claim_amount','injury_claim','property_claim','vehicle_claim','auto_year']
data=pd.DataFrame()
for fea in numerical_feature:
    data.insert(len(data.columns),fea,Enc.fit_transform(train[fea].values))
    return data
train_data = yuchuli(train)

经过编码后得出编码后的数据:

其中最清晰的就是标黑的property_damage一列,使用One-hot编码转换后变成属于0,Yes属于2,No属于1。

LabelEncoder()只有一个class_属性,是查看每个类别的标签,在上述基础上尝试即最后一个特征所对应的属性标签,通俗来讲就是这里面需要被编码的个数就是这些数:

  • 果然不出所料,因为这是循环,所以对应的最后一个是auto_year,原数据如下图:

注意:开头提到的编码值介于 0 和 n_classes-1 之间于下图可以清晰理解,里面有n种不同的值,就分成 n-1 类,因为还包括 0

不过 LabelEncoder 标签编码我想对用的比较少,一般我都是使用 One-hot 独热编码去处理离散特征。

OrdinalEncoder特征编码实例

  • 目的:将分类特征编码为整数数组。
  • 输入:是一个类似数组的整数或字符串,表示分类(离散)特征所采用的值,特征会被转换为序数整数

from sklearn.preprocessing import OrdinalEncoder
import pandas as pd
import numpy as np
train = pd.read_csv('./train.csv')
test = pd.read_csv('./test.csv')
train.drop_duplicates()
Enc=LabelEncoder()
Enc=OneHotEncoder()
def yuchuli(data_train):
    numerical_feature = ['incident_severity', 'insured_hobbies', 'vehicle_claim', 'auto_model', 'insured_education_level', 'insured_zip', 'insured_relationship', 'incident_date','auto_year']
    data = pd.DataFrame()
    for fea in numerical_feature:
        data.insert(len(data.columns), fea, (Enc.fit_transform(train[fea].values.reshape(-1, 1))).tolist())
#     return data
train_data = yuchuli(train)

但是我通过输出每一个特征结果的时候发现他和LabelEncoder()编码出的数据大差不离,特征编码则通过categories_查看编码特征

总而言之就是结果数据是一样的,但是类型上是不同的,我通过本文了解到它们本质的区别:

  • OrdinalEncoder 用于形状为 2D 的数据 (n_samples, n_features)
  • LabelEncoder用于形状为 1D 的数据(n_samples,)

至于为什么,我们从上面两者的代码中就可以发现,OrdinalEncoder 编码出的数据要想fit_transform拟合,就得使用.reshape(-1, 1)转换成二维数据,这一块和OneHotEncoder编码相同,而LabelEncoder则直接放入即可拟合出数据来,这里也是使用过程中最容易出现的问题。

OrdinalEncoder编码还是有两点需要注意的,第一点,他可以接受np.nan缺失值,可根据需求选择是否处理缺失值;第二点,他有 这么一个参数->handle_unknown=error(默认) ,通过判断是否存在未知的特征来选择是否继续进行程序,当我们们选择handle_unknown=use_encoded_value时会将存在的未知特征打上unknown_value标签

#将缺失值全部处理为-1
Enc.set_params(encoded_missing_value=-1,handle_unknown=use_encoded_value).fit_transform()

以上就是Python sklearn库三种常用编码格式实例的详细内容,更多关于Python sklearn库编码格式的资料请关注猪先飞其它相关文章!

原文出处:https://juejin.cn/post/7142325338553450503

相关文章

  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • python实现双色球随机选号

    这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • Python getsizeof()和getsize()区分详解

    这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • Python导入数值型Excel数据并生成矩阵操作

    这篇文章主要介绍了Python导入数值型Excel数据并生成矩阵操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-09
  • 解读python基于netconf协议获取网元的数据

    大多数企业都需要网络支撑企业的ICT运行,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,如下就以华为的NE40E网元为例,说明如何通过python基于netconf协议实现对于网元配置数据的获取。...2021-05-18
  • Python爬虫基础之selenium库的用法总结

    今天带大家来学习selenium库的使用方法及相关知识总结,文中非常详细的介绍了selenium库,对正在学习python的小伙伴很有帮助,需要的朋友可以参考下...2021-05-25