第4章 特征提取

在前面章节中讨论的例子使用了实值解释变量,例如披萨的直径。许多机器学习问题需要从类别变量、文本或者图像中学习。在本章中,我们将学习创建能表示这些变量的特征。

许多问题中的解释变量是类别变量或者名义变量。类别变量的取值范围是一组固定值。例如,一个预测职位薪水的应用可能会使用类似职位所在城市这样的类别变量。类别变量通常使用one-of-k编码算法或者one-hot编码算法进行编码,因此将使用一个二进制特征表示解释变量的所有可能取值。

例如,假设我们的模型中有一个city变量,该变量可以从下面3个值中取值:New York、San Francisco或者Chapel Hill。One-hot编码算法使用每个可能城市的二元特征来表示变量。scikit-learn类库中的Dictvectorizer类是一个可以对类别特征进行one-hot编码的转换器,具体用法如代码4.1所示:

代码4.1

# In[1]:
from sklearn.feature_extraction import DictVectorizer
onehot_encoder = DictVectorizer()
X= [
   {'city': 'New York'},
   {'city': 'San Francisco'},
   {'city': 'Chapel Hill'}
]
print(onehot_encoder.fit_transform(X).toarray())

# Out[1]:
[[ 0.  1.  0.]
 [ 0.  0.  1.]
 [ 1.  0.  0.]]

需要注意的是,特征的顺序在结果向量中是随机的。在第1个训练实例中,city的值是New York。特征向量的第2个元素代表New ...

Get scikit-learn机器学习(第2版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.