类别特征、LabelEncoder、One-Hot Encoding Demo

avatar 2024年04月18日20:26:47 0 157 views
博主分享免费Java教学视频,B站账号:Java刘哥

什么是类别特征?

"类别特征"是指表示分类或类别的特征。例如颜色(红、绿、蓝)、血型(A型、B型、O型、AB型)等...

常见类别特征算法

1、Label Encoding

LabelEncoder 会对一组数转换成 [0,n) 的数。

比如把[男,女] 转成 [0, 1];把 [红, 黄,蓝, 红] 转成 [0, 1, 2, 0]

from sklearn.preprocessing import LabelEncoder

# 初始化
le = LabelEncoder()

label_list = ["D", "B", "C", "D", "A", "B"]  # 标签有A、B、C、D四个类别,所以转换为[0, 1, 2, 3]
print(le.fit_transform(label_list))  # [0 1 2 3 0 1]

label_list = ["张三", "李四", "王五", "张三"]  # 标签有张三、李四、王五三个类别,所以转换为[0, 1, 2]
print(le.fit_transform(label_list))  # [0 1 2 0]

label_list = [100, 90, 80, 80, 0, 100]  # 标签是0, 80, 90, 100四个类别,所以转换为[0, 1, 2, 3]
print(le.fit_transform(label_list))  # [3 2 1 1 0 3]

# 注意:LabelEncoder会先排序后编码,所以编码结果是有序的

 

2、One-Hot Encoding

找出所有特征,然后编码时,匹配的位置取1,不匹配取0。

比如将 红黄蓝分别编码为 100,010,001, 三个向量相互正交(垂直),不相关,距离相同。

注意:不要给红黄蓝设置编码为1,2,3。因为1,2,3之间有大小关系,相关

单列示例

from sklearn import preprocessing

encoder = preprocessing.OneHotEncoder()
# 3个特征:即 blue、red、yellow 三种颜色(排序后)
# 分别用 [1, 0, 0]、[0, 1, 0]、[0, 0, 1] 来表示
# red    => 编码为 [0, 1, 0]
# yellow => 编码为 [0, 0, 1]
# blue   => 编码为 [1, 0, 0]
# red    => 编码为 [0, 1, 0]

encoder.fit([
    ['red'],
    ['yellow'],
    ['blue'],
    ['red']
])
print(encoder.transform([['red']]).toarray())  # [[0. 1. 0.]]
print(encoder.transform([['yellow']]).toarray())  # [[0. 1. 0.]]
print(encoder.transform([['blue']]).toarray())  # [[0. 1. 0.]]

多列示例

from sklearn import preprocessing

encoder = preprocessing.OneHotEncoder()
# 8个特征:即 001、002、003、004、女、男、大一、大二   (女排在男前面,大一排在大二前面)

#  学号  性别  年级
#  001  男    大一
#  002  女    大二
#  003  男    大一
#  004  女    大一

encoder.fit([['001', '男', '大一'],
             ['002', '女', '大二'],
             ['003', '男', '大一'],
             ['004', '女', '大一']])


print(encoder.transform([['001', '男', '大一']]).toarray())  # [[1 0 0 0 0 1 1 0]]
print(encoder.transform([['001', '男', '大二']]).toarray())  # [[1 0 0 0 0 1 0 1]]
print(encoder.transform([['001', '女', '大一']]).toarray())  # [[1 0 0 0 1 0 1 0]]
print(encoder.transform([['001', '女', '大二']]).toarray())  # [[1 0 0 0 1 0 0 1]]

print('女' < '男')  # True

 

 

除了类别特征,还有什么特征?

  1. 连续型特征(Numerical Features):连续型特征是指取值范围在一定区间内的数值型特征。例如,身高、体重、温度、价格等都属于连续型特征。这些特征可以是整数型或浮点型。

  2. 时间序列特征(Time Series Features):时间序列特征是指与时间相关的特征,例如日期、时间戳、季节性特征等。时间序列数据通常以时间为自变量,记录某个或某些变量随时间的变化情况。

  3. 文本特征(Text Features):文本特征是指自然语言文本中的特征,例如文档、评论、描述等。文本特征常常需要进行文本预处理和特征提取,以便用于机器学习模型。

  4. 图像特征(Image Features):图像特征是指图像数据中的特征,例如像素值、颜色直方图、纹理特征等。处理图像特征通常需要使用计算机视觉技术。

  5. 空间特征(Spatial Features):空间特征是指与空间位置相关的特征,例如地理位置坐标、区域边界、地形等。这些特征常常用于地理信息系统(GIS)和地理数据分析中。

  6. 信号特征(Signal Features):信号特征是指来自传感器、设备或系统的信号数据,例如声音、振动、电压等。处理信号特征通常需要使用信号处理技术和数字信号处理算法。

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292(群满)
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0