IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 猿创征文|实例展示Sklearn中三种常用的编码方式OneHotEncoderLabelEncoderOrdinalEncoder的使用过程 -> 正文阅读

[Python知识库]猿创征文|实例展示Sklearn中三种常用的编码方式OneHotEncoderLabelEncoderOrdinalEncoder的使用过程

👦👦一个帅气的boy,你可以叫我Love And Program
🖱 ?个人主页:Love And Program的个人主页
💖💖如果对你有帮助的话希望三连💨💨支持一下博主

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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:12:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:35:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码