2020-06-25 One-hot编码

背景

某些数据集的特征并不是连续的数值,而是离散的字符串。而用基于数学运算的机器学习方法,无法处理。这时,需要换一种方式来表示数据。对于某个特定应用来说,如何找到最佳数据表示,这个问题被称为特征工程

image.png

如果用回归进行分类,公式为:

ŷ= w[0] * x[0] + w[1] * x[1] + … + w[p] * x[p] + b > 0

其中 w[i] 和 b 是从训练集中学到的系数, x[i] 是输入特征。当 x[i] 是数字时这个公式才有意义,但如果 x[2] 是 "Masters" 或 "Bachelors" 的话,这个公式则没有意义。显然,在应用 Logistic 回归时,我们需要换一种方式来表示数据。

One-Hot编码

到目前为止,表示分类变量最常用的方法就是使用 one-hot 编码(one-hot-encoding)或N 取一编码(one-out-of-N encoding), 也叫虚拟变量(dummy variable)。 虚拟变量背后的思想是将一个分类变量替换为一个或多个新特征,新特征取值为 0 和 1。


image.png

例如对work class进行编码,利用 4 个新特征对一个特征进行编码。在机器学习算法中使用此数据时,我们将会删除原始的 workclass 特征,仅保留 0-1 特征。

需要用到的python方法

data_dummies = pd.get_dummies(data)

然后对变换后的数组进行处理(分离特征和目标)

# 提取部分行列
features = data_dummies.loc[:, 'age':'occupation_ Transport-moving']
%用value方法将DataFrame转成NumPy格式
X = features.values
y = data_dummies['income_ >50K'].values
print("X.shape: {} y.shape: {}".format(X.shape, y.shape))

小结

有时候数字特征也需要进行One-Hot变换,因为其代表的是离散含义。在处理基因数据时,可以使用One-Hot编码对数据进行预处理。

你可能感兴趣的:(2020-06-25 One-hot编码)