独热编码(One-Hot Encoding)和 LabelEncoder标签编码 区别 数据预处理:(机器学习) sklearn

简介: 独热编码(One-Hot Encoding)和 LabelEncoder标签编码 区别 数据预处理:(机器学习) sklearn

✌ 独热编码和 LabelEncoder标签编码

1、✌ 介绍

对于一些特征工程,我们有时会需要使用OneHotEncoder和LabelEncoder两种编码

这是为了解决一些非数字分类问题。

比如说对于性别这个分类:male和female。这两个值可见是不能放入模型中的,所以就需要将其编码成数字。

例如:

特征 编码
1
0
0
1
0
1

对于LabelEncoder会将其转化成0、1这种数值分类,如果有三类就会变成0、1、2。

而利用OneHotEncoder就会转化成矩阵形式

特征 Sex_男 Sex_女
1 0
0 1
0 1
1 0
0 1
1 0

那么问题来了这两种方法都可以进行编码,有什么区别吗?

  • 使用LabelEncoder该特征仍是一维,但是会产生0、1、2、3这种编码数字
  • OneHotEncoder会产生线性无关的向量
    如果对于红色、蓝色、绿色来说,编码后会产生0、1、2,这是就会产生新的数学关系,如绿色大于红色,绿色和红色的均值为蓝色,而这些类别是相互独立的类别,在转化之前是没有这些关系的。
    但如果用OneHotEncoder,会产生多个线性无关的向量,解决了那种关系的问题,但是这样如果类别较多时,会使特征维度大大升高,造成资源浪费和运算时间长、矩阵过于稀疏等问题,但有些时候可以联系PCA进行使用。

2、✌ 代码测试

2.1 ✌ 导入相关库

import numpy as np
import pandas as pd
# 导入SVC模型
from sklearn.svm import SVC
# 导入评分指标
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve
# 编码库
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# 交叉验证
from sklearn.model_selection import cross_val_score

2.2 ✌ 读取数据

data=pd.read_csv('Narrativedata.csv',index_col=0)
data

2.3 ✌ 查看缺失值

data.isnull().sum()

2.4 ✌ 利用中位数填补年龄

data['Age'].fillna(data['Age'].median(),inplace=True)
data.isnull().sum()

2.5 ✌ 删除Embarked的缺失行

data.dropna(inplace=True)
data.isnull().sum()

2.6 ✌ 查看每个特征的类别

display(np.unique(data['Sex']))
display(np.unique(data['Embarked']))
display(np.unique(data['Survived']))
x=data.drop(columns=['Survived'])
y=data['Survived']

2.7 ✌ 对标签进行LabelEncoder编码

from sklearn.preprocessing import LabelEncoder
y=LabelEncoder().fit_transform(y)
y

2.8 ✌ 利用pandas的哑变量处理

y=data['Survived']
y=pd.get_dummies(y)
y

2.9 ✌ 对特征进行哑变量处理

x=pd.get_dummies(x.drop(columns=['Age']))
x

2.10 ✌ 对特征进行独热编码

from sklearn.preprocessing import OneHotEncoder
x=data.drop(columns=['Survived','Age'])
x=OneHotEncoder().fit_transform(x).toarray()
pd.DataFrame(x)

2.11 、✌ 模型测试

2.11.1 ✌ 独热编码

x=data.drop(columns=['Age','Survived'])
y=data['Survived']
x=pd.get_dummies(x)
x['Age']=data['Age']
y=LabelEncoder().fit_transform(y)
# 模型测试
for kernel in ["linear","poly","rbf","sigmoid"]:
    clf = SVC(kernel = kernel
                ,gamma="auto"
                ,degree = 1
                ,cache_size = 5000
                )
    score=cross_val_score(clf,x,y,cv=5,scoring='accuracy').mean()
    print('{:10s}:{}'.format(kernel,score))

2.11.2 ✌ LabelEncoder编码

x=data.drop(columns=['Age','Survived'])
y=data['Survived']
df=pd.DataFrame()
# 循环拼接特征矩阵
for i in x.columns:
    df=pd.concat([df,pd.DataFrame(LabelEncoder().fit_transform(x[i]))],axis=1)    
y=LabelEncoder().fit_transform(y)
for kernel in ["linear","poly","rbf","sigmoid"]:
    clf = SVC(kernel = kernel
                ,gamma="auto"
                ,degree = 1
                ,cache_size = 5000
                )
    score=cross_val_score(clf,df,y,cv=5,scoring='accuracy').mean()
    print('{:10s}:{}'.format(kernel,score))  


目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 Python
从零到一:手把手教你完成机器学习项目,从数据预处理到模型部署全攻略
【10月更文挑战第25天】本文通过一个预测房价的案例,详细介绍了从数据预处理到模型部署的完整机器学习项目流程。涵盖数据清洗、特征选择与工程、模型训练与调优、以及使用Flask进行模型部署的步骤,帮助读者掌握机器学习的最佳实践。
178 1
|
3月前
|
机器学习/深度学习 算法 数据可视化
【机器学习】决策树------迅速了解其基本思想,Sklearn的决策树API及构建决策树的步骤!!!
【机器学习】决策树------迅速了解其基本思想,Sklearn的决策树API及构建决策树的步骤!!!
|
5月前
|
机器学习/深度学习 数据采集 算法
机器学习到底是什么?附sklearn代码
机器学习到底是什么?附sklearn代码
80 4
|
5月前
|
Java 前端开发 容器
Struts 2:在技术变革的风暴中航行,探索框架的革命性未来与创新融合之路
【8月更文挑战第31天】Struts 2作为一款成熟的企业级Java Web框架,凭借其稳定性和灵活性自2007年以来广受欢迎。它基于MVC设计模式,支持插件架构和RESTful服务,并能与Spring框架良好集成。然而,面对微服务架构和容器化技术(如Docker和Kubernetes)的兴起,Struts 2需提供更轻量级和支持指南来适应变化。通过深化与现代前端框架(如React和Vue.js)及AI技术的集成,并强化安全性与开发工具,Struts 2有望保持竞争力并迎接未来挑战。
61 0
|
5月前
|
机器学习/深度学习 SQL 数据采集
"解锁机器学习数据预处理新姿势!SQL,你的数据金矿挖掘神器,从清洗到转换,再到特征工程,一网打尽,让数据纯净如金,模型性能飙升!"
【8月更文挑战第31天】在机器学习项目中,数据质量至关重要,而SQL作为数据预处理的强大工具,助力数据科学家高效清洗、转换和分析数据。通过去除重复记录、处理缺失值和异常值,SQL确保数据纯净;利用数据类型转换和字符串操作,SQL重塑数据结构;通过复杂查询生成新特征,SQL提升模型性能。掌握SQL,就如同拥有了开启数据金矿的钥匙,为机器学习项目奠定坚实基础。
51 0
|
5月前
|
机器学习/深度学习 数据采集 算法
如何使用机器学习神器sklearn做特征工程?
如何使用机器学习神器sklearn做特征工程?
52 0
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
Sklearn入门指南:构建你的第一个机器学习模型
【7月更文第22天】在数据科学与机器学习领域,Scikit-learn(简称sklearn)是一个广泛使用的Python库,以其简洁的API和丰富的功能集而著称。本指南将引领你从安装到使用sklearn构建你的第一个机器学习模型,以一个简单的线性回归任务为例,逐步深入理解这个强大的工具。
160 2
|
5月前
|
机器学习/深度学习
机器学习中label如何实现多标签编码?
介绍了在机器学习中处理多标签分类问题时的一种标签编码方法。
73 0
|
6月前
|
机器学习/深度学习 安全 算法
机器学习 -之one-hot编码技术
One-hot编码是一种数据处理技术,主要用于将分类变量转换为适合机器学习算法处理的格式。
80 0
|
7月前
|
机器学习/深度学习 数据采集 自然语言处理
机器学习之sklearn基础教程
机器学习之sklearn基础教程