背景
某些数据集的特征并不是连续的数值,而是离散的字符串。而用基于数学运算的机器学习方法,无法处理。这时,需要换一种方式来表示数据。对于某个特定应用来说,如何找到最佳数据表示,这个问题被称为特征工程。
如果用回归进行分类,公式为:
ŷ= 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。
例如对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编码对数据进行预处理。