数据分析2_特征编码和标签编码的区别

1 类别特征编码

类别特征编码和标签编码区别:
特征编码:1,顺序编码:OrdinalEncoder()
2,独热编码:OneHotEncoder()

标签编码:1, 二值编码:LabelBinarizer()
2,标签编码:LabelEncoder()
不要混淆。

1.1 特征编码:

示例1:伪代码

from sklearn.preprocessing import OrdinalEncoder
import pandas as pd 
#1,导入数据
file_path=r"  "
fd=pd.read_csv(file_path)
#2,申明使用的方法
oe=OrdinalEncoder()
#3,转换
fd_transrormed=oe.fit_transform(fd) #转换前几列将fd改成fd.iloc[:,1:4]
# 4,将转换后的数据再次发回原始数据中
fd.iloc[:,1:4]=fd_transrormed
print(fd)

示例2:伪代码

from sklearn.preprocessing import OneHotEncoder
import pandas as pd 
import numpy as np 
#1 导入数据
file_path=r"  "
fd=pd.read_csv(file_path)
#2 用什么方法
ohe = OneHotEncoder()
#3 转换数据
fd_transrormed=ohe.fit_transform(fd.iloc[:,1:4]).toarray#转化为np数组
fd_transrormed2=ohe.categories_ #显示编码每列对应的名字
fd_transrormed3 =ohe.get_feature_names()
#将np格式的二维数组转化为pandas格式数据
fd_transrormed4=pd.DataFrame(fd_transrormed,columns=['不开朗','开朗',
'不爱运动','爱运动',
'皮肤不白','皮肤白'])
#4 替换原来数据
fd2=fd.drop(['是否开朗','是否爱运动','是否皮肤白'],axis=1)
fd3=pd.concat((fd2,fd_transrormed4),axis=1)#行
order=['姓名','不开朗','开朗','不爱运动','爱运动','皮肤不白','皮肤白','身高(cm)','体重(kg)','是否被认为帅哥']
fd4=fd3[order]
print(fd4)

1.2 标签编码

标签二值化:LabelBinarizer–是一个用来从多类别列表创建标签矩阵的工具类。

from sklearn.preprocessing import LabelBinarizer
lb=LabelBinarizer()
lb.fit([1,2,6,4,2])
lb_class=lb.classes_	#查看标签名称
print(lb_class)
lb_transformed=lb.transform([1,6])
print(lb_transformed)
···································
输出:
[1 2 4 6]
[[1 0 0 0]
 [0 0 0 1]]

当预测的标签有两种以上的情况,就要用到标签编码

import pandas as pd 
from sklearn.preprocessing import LabelEncoder
#1 导入数据
file_path=r"  "
df=pd.read_csv(file_path)
#2 用哪个方法
le=LabelEncoder()
#3 转换数据
df_transformed=le.fit_transform(df.iloc[:,-1])
df.iloc([:,-1])=df_transformed
print(df)
print(df.class_)

1.3标签离散化

离散化其实是对连续特征进行离散化(量化或装箱),离散化可以把连续属性的数据集变换成只有名义属性(名称属性,名义属性,符号属性,离散属性等)的数据集
One-hot编码的离散化特征,可以使得一个模型更加的有表现力,同时还能保留其可解释性。比如:用离散化器进行处理可以给线性模型引入非线性。

1.3.1 离散化方法一:K-bins离散化

KBinsDiscretizer类使用k个等宽的bins把特征离散化

import pandas as pd 
from sklearn.preprocessing import KBinsDiscretizer

#1 导入数据
file_path=r" "
df=pd.read_csv(file_path)

#2 用哪个方法
kb=KBinsDiscretizer()   #kb=KBinsDiscretizer(strategy='uniform')每组的宽度一样,默认是'quantile'每一组的个数是一样的
#3 转换数据
df_tansform=kb.fit_transform(df.iloc[:,7:9]).toarray())
print(kb.bin_edges_)    #查看每一组的边界
#4 替换到原来数组
df.iloc[:,7:9])=df_tansform
#5 保存
file_path=r""
df=pd.to_csv(file_path,index=0)

1.3.2 离散化方法二:特征二值化

分为两类。

import numpy as np
import pandas as pd 
from sklearn.preprocessing import Binarizer()

file_path=r" "
df=pd.read_csv(file_path)
b=Binarizer(threshold=[160.0,70.0])#括号里,threshold=[]表示门槛,当二值化多个列时,threshold可以以列表的形式。
df_transformed=b.fit_transform(df.iloc[:,7:9])
df.iloc[:,7:9]=df_transformed
print(df)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AppleYRY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值