python预处理之特征值转换

二分类(男女为10)、三分类、标准化处理、独热编码、二进制编码

二分类:

data["Sex"] = (data["Sex"]== "male").astype("int")

对其解析:

将 "Sex" 列中所有值为 "male" 的行转换为 1,而将所有值为 "female" 的行转换为 0,是通过先将 "Sex" 列中的每个值与 "male" 进行比较,将比较结果转换为布尔值(True 或 False),然后使用 astype() 函数将布尔值转换为整数(True 转换为 1,False 转换为 0)实现的。最后,将转换后的结果存储回 "Sex" 这一列中,从而完成了对 "Sex" 列的转换操作。

三分类:

labels = data["Embarked"].unique().tolist() 

data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))

对其解析:

  1. 使用 apply() 函数对 "Embarked" 列中的每个特征值进行遍历和操作。

  2. 对于每个特征值 x,使用匿名函数 lambda x: labels.index(x) 的方式,将其转换为该特征值在上一步中得到的特征值列表 labels 中的索引号(即将分类数据转换为数字值),并将转换结果赋值给原来的 "Embarked" 列。

eg:如果 "Embarked" 列包含三个不同的特征值 S, C, Q,则在应用上述代码后,S 将被转换为 0,C 将被转换为 1,Q 将被转换为 2。需要注意的是,这种转换只适用于特征包含枚举类型的分类变量。

标准化数据:

airline_features = pd.concat([L, airline_selection.iloc[:, 2:]], axis=1)
print('构建的LREMC特征前5行为:\n', airline_features.head())

# 对数据进行标准化处理,StandardScaler() 是一个用于特征缩放的类,它可以将特征缩放到均值为 0,标准差为 1 的标准正态分布中
from sklearn.preprocessing import StandardScaler
data = StandardScaler().fit_transform(airline_features)
np.savez('./airline_scale.npz',data)
print('标准化后LRFMC五个特征为:\n', data[:5,:])

运行结果:

拓展:独热编码或二进制编码

一.   

独热编码又称为 one-hot 编码,是最常用的分类变量编码方法之一。对于一个有 N 个不同取值的分类变量,独热编码将其转换为一个 N 维向量,其中只有一维的值为 1,其余维度的值都为 0。例如,如果一个分类变量有三个取值 A, B, C,则独热编码将其转换为如下三维向量:

独热编码取值
[1, 0, 0]A
[0, 1, 0]B
[0, 0, 1]C
from sklearn.preprocessing import OneHotEncoder

# 定义一个包含三个取值的分类变量
categorical_values = ['A', 'B', 'C']

# 创建一个 OneHotEncoder 对象,并拟合数据
encoder = OneHotEncoder(categories=[categorical_values])
encoder.fit(categorical_values.reshape(-1, 1))

# 使用 encoder 进行独热编码
one_hot_encoded = encoder.transform(categorical_values.reshape(-1, 1))
print(one_hot_encoded.toarray())

二.   

二进制编码是一种将分类变量转换为二进制数的编码方式。它的原理是将每个分类变量的取值映射到一个二进制数上,然后再将这些二进制数拆分成几个二进制位,在数据矩阵中占据相应的列。例如,假设有一个分类变量有四个取值 A, B, C 和 D,则可以将其转换为如下 2 位二进制数:

取值二进制编码
A00
B01
C10
D11

然后,将这些 2 位二进制数拆分成两列分别表示二进制数的第 1 和第 2 位,从而得到如下数据矩阵:

ABCD
1000
0100
0010
0001

相比于独热编码,二进制编码能够使数据占用的空间更少,并且在存储和计算上的效率更高。但对于分类变量的取值数量较少的情况,使用独热编码更加简单明了。

from sklearn.preprocessing import LabelBinarizer

# 定义一个包含四个取值的分类变量
categorical_values = ['A', 'B', 'C', 'D']

# 创建一个 LabelBinarizer 对象,并拟合数据
encoder = LabelBinarizer()
encoder.fit(categorical_values)

# 使用 encoder 进行二进制编码
binary_encoded = encoder.transform(categorical_values)
print(binary_encoded)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值