从类别变量中提取特征
许多问题中的解释变量是类别变量或者名义变量,通常使用one-of-k编码算法或者one-hot编码算法进行编码,使用一个二进制特征表示解释变量的所有可能值。
假设有个city变量,取值包括:Beijing、Shanghai和Guangzhou。one-hot编码算法使用每个可能city的二元特征来表示变量。scikit-learn类库中的Dictvectorizer类是一个可以对类别特征进行one-hot编码的转换器。
from sklearn.feature_extraction import DictVectorizer
onehot_encoder = DictVectorizer()
X = [
{'city': 'Beijing'},
{'city': 'Shanghai'},
{'city': 'Guangzhou'}
]
print(onehot_encoder.fit_transform(X).toarray())
[[1. 0. 0.]
[0. 0. 1.]
[0. 1. 0.]]
特征标准化
前面讲过,当学习算法使用标准化数据进行训练时会有更好的性能。标准化数据有零平均值和单位方差。
除了前面使用的StandardScaler转换器,proprocessing模块中的scale函数也可以用于单独对数据集的任何轴进行标准化。
from sklearn import preprocessing
import numpy as np
X = np.array([
[0., 0., 5., 13., 9., 1.],
[0., 0., 13., 15., 10., 15.],
[0., 3., 15., 2., 0., 11.]
])
print(preprocessing.scale(X))
[[ 0. -0.70710678 -1.38873015 0.52489066 0.59299945 -1.35873244]
[ 0. -0.70710678 0.46291005 0.87481777 0.81537425 1.01904933]
[ 0. 1.41421356 0.9258201 -1.39970842 -1.4083737 0.33968311]]
另外,除了StandardScaler还可以选择RobustScaler,它对与异常值具有更好的鲁棒性,StandardScaler会从每个实例值上减去特征均值,然后除以特征的标准差。为了减轻异常值的影响,RobustScaler会减去中位数,然后除以四分位差。
从文本中提取特征
待补充
从图像中提取特征
待补充








网友评论