数据预处理:特征编码




1、特征编码概述


在机器学习中,处理离散属性(分类特征/类别特征)是一个重要的任务,需要将离散属性转换为可供模型使用的数值表示

机器学习算法本质上都是在基于矩阵做线性代数计算,因此参加计算的特征必须是数值型的,对于非数值型的特征需要进行编码处理

分类特征是用来表示分类的,分类特征是离散的,非连续的。例如性别(男/女)、等级(优/良/合格)等

有些分类特征也是数值,例如,账号ID、IP地址等,但是这些数值并不是连续的。连续的数字是数值特征,离散的数字是分类特征

对于离散型数据的编码,针对小型分类和大型分类,我们通常有以下几种常用的实现方式,它们各有优缺点

2、小型分类特征的编码方式

2.1、序列编码(Ordinal Encoding)


将离散特征的各个类别映射为自然数序号,适用于类别间本来就有一定的排序关系,并且不同样本之间的距离计算有一定的意义。例如,学历中的学士(0)、硕士(1)、博士(2),学士与硕士的距离和硕士与博士的距离相等

以下是序列编码的实现方式:

1)使用Pandas

import pandas as pd

degree_list = ["硕士", "博士", "学士", "硕士"]
data = pd.DataFrame(degree_list, columns=["学历"])
# 手动编码
ordinal_map = {
   "学士": 0, "硕士": 1, "博士": 2}
data["Code"] = data["学历"].map(ordinal_map)
print(data)
'''
   学历  Code
0  硕士     1
1  博士     2
2  学士     0
3  硕士     1
'''

2)使用Scikit-Learn库

Scikit-Learn库提供了序列编码API:OrdinalEncoder

官方文档:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OrdinalEncoder.html

中文官方文档:https://scikit-learn.org.cn/view/744.html

import numpy as np
from sklearn.preprocessing import OrdinalEncoder

# 序列编码器
enc = OrdinalEncoder()

# fit_transform():拟合数据,自动编码,需要一个2D数组
data["Code"] = enc.fit_transform(np.array(data["学历"]).reshape(-1, 1))
print(data)
'''
   学历  Code
0  硕士   2.0
1  博士   0.0
2  学士   1.0
3  硕士   2.0
'''
# 解码
print(enc.inverse_transform(np.array(data["Code"]).reshape(-
  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值