特征归一化针对数值类型的特征。
该归一化对数据做线变换,是结果映射到 [ 0 , 1 ] [0,1] [0,1] 的范围,实现的是等比缩放。公式为:
X n o r m = X − X m i n X m a x − X m i n X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} Xnorm=Xmax−XminX−Xmin
该归一化对数据映射到均值为 0 0 0,方差为 1 1 1 的分布上。公式为:
z = X − μ σ z=\frac{X-\mu}{\sigma} z=σX−μ
其中 μ \mu μ 和 σ \sigma σ 分别为原始特征的均值和方差。
类别型特征(Categorical feature)是指例如性别,血型等只能在有限选项内取值的特征。输入形式通常为字符串。这种输入形式对于逻辑回归、SVM来说是无法处理的,只有将类别型特征转换成数值型特征后才行。
很好理解,就是将类别间具有大小关系的特征赋予一定的序号,这个序号反映了原始类别之间的大小关系。例如身高有“高”,“中”,“低”三个类别,那么就可以将他们转化成 3 > 2 > 1 3>2>1 3>2>1 这样的形式,使转换之后大小关系仍然得以保留。
处理不具有大小关系的特征。如血型(A, B, AB, O)。独热编码会把血型变成一个4维稀疏向量,A为 ( 1 , 0 , 0 , 0 ) (1,0,0,0) (1,0,0,0),B为 ( 0 , 1 , 0 , 0 ) (0,1,0,0) (0,1,0,0),AB为 ( 0 , 0 , 1 , 0 ) (0,0,1,0) (0,0,1,0),O为 ( 0 , 0 , 0 , 1 ) (0,0,0,1) (0,0,0,1)。
需要注意的问题:
第一步:先用序号编码给每个类别予以编号ID,
第二部:将类别ID转换成二进制编码作为最终结果。
本质:利用二进制对ID进行哈希映射。
相比于独热编码:维数较少,节省了空间,降低了过拟合的风险。
血型 | 类别ID | 二进制表示 | 独热编码 | |||||
---|---|---|---|---|---|---|---|---|
A | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
B | 2 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
AB | 3 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
O | 4 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
以逻辑回归为例,假设数据的特征向量为 X = ( x 1 , x 2 , . . . , x k ) X=(x_1,x_2,...,x_k) X=(x1,x2,...,xk),则有,
Y = s i g m o i d ( ∑ i ∑ j w i j < x i , x j > ) Y=sigmoid(\sum_i\sum_jw_{ij}<x_i,x_j>) Y=sigmoid(i∑j∑wij<xi,xj>)
其中 < x i , x j > <x_i,x_j> <xi,xj> 表示 x i x_i xi 和 x j x_j xj 的组合特征, w i j w_{ij} wij 的维度为 ∣ x i ∣ ⋅ ∣ x j ∣ |x_i|\cdot |x_j| ∣xi∣⋅∣xj∣, ∣ x i ∣ |x_i| ∣xi∣ 表示特征 x i x_i xi 不同取值的个数。
假设两个特征的取值个数分比为 m , n m, n m,n,当他们较小是, w w w 的维度大小可以接受。但是当他们较大时,需要学习的参数的规模 m × n m\times n m×n 就非常大。
这时可以将这两个特征用 k k k 维的低维向量来表示 ( k ≪ m , k ≪ n k\ll m,k\ll n k≪m,k≪n),
Y = s i g m o i d ( ∑ i ∑ j w i j < x i , x j > ) Y=sigmoid(\sum_i\sum_jw_{ij}<x_i,x_j>) Y=sigmoid(i∑j∑wij<xi,xj>)
其中 w i j = x i ′ ⋅ x j ′ w_{ij}=x_i'\cdot x_j' wij=xi′⋅xj′, x i ′ x_i' xi′ 和 x j ′ x_j' xj′ 分别表示 x i x_i xi 和 x j x_j xj 对应的低维向量(?个人觉得应该是做了一个低维映射,只是不知道怎么映射的)。
随意的两两组合特征会导致参数过多,过拟合的问题,而且并非所有的组合均有意义。这里使用了构造决策树的方法来组合特征。具体的可以采用梯度提升决策树,每次都在构建的决策树的残差的基础上构建一个决策树。决策树的构建见统计学习方法。这里不多说。
文本:非结构化数据。
将每篇文章看成一袋子词,忽略每个词出现的顺序。将文本以词为单位切开,每篇文章可以表示为一个词向量,向量中每一维表示一个词,该词对应的权重则反映了这个词在文章中的重要程度。常用的计算权重的方法是 TF-IDF(Term frequency-Inverse document frequency)。公式为
T F − I D F ( t , d ) = T F ( t , d ) × I D F ( t ) TF-IDF(t,d)=TF(t,d)\times IDF(t) TF−IDF(t,d)=TF(t,d)×IDF(t)
右边第一项表示单词 t t t 在文档 d d d 中出现的概率,第二项是逆文档频率,用来衡量单词 t t t 对表达语义所起的重要性。简单地说就是如果一个词在很多的文章中出现,如“的”,那么对于区分文章特殊语义的贡献就较小,因此对这个词的权重做一些惩罚。
当连续的单词在一起时才有具体意义的时候,可采用N-gram来将连续出现的n个词组成的词组作为一个单独的特征放到向量表示中去,构成 N-gram 模型。
另外,一词多词性现象也是要考虑的。实际中,会对单词进行词干抽取(Word stemming) 处理,将不同词性的单词统一成为同一词干的形式。
从文本库中发现有代表性的主题(每个主题上面词的分布特性),计算出每篇文章的主题分布。
词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成一个低维空间上的一个稠密向量。得出的结果往往要结合深度学习神经网络来处理,因为神经网络很好地抓住了文本的特征,自动地进行特征工程。
CBOW(Continuous bag of words)目标是根据上下文出现的词语来预测当前词的生成概率,Skip-gram是根据当前词来预测上下文各词的生成概率。
输入层中的每个词由独热编码方式表示。映射层中,K个隐藏单元的取值由N维输入变量和隐藏单元之间的 N × K N\times K N×K 维权重矩阵计算得到。在CBOW中,还需要将各输入此所计算出的隐含单元求和。Skip-gram输出层向量是一个N维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用 Softmax 激活函数,可以计算出每个单词的生成概率。Softmax 激活函数的定义为:
P ( y = w n ∣ x ) = e x n ∑ k = 1 N e x i P(y=w_n|x)=\frac{e^{x_n}}{\sum_{k=1}^N e^{x_i}} P(y=wn∣x)=∑k=1Nexiexn
训练得到维度为 N × K N\times K N×K 和 K × N K\times N K×N 的两个权重矩阵之后,可以选择其中一个作为N个词的K维向量表示。
训练数据不足时,模型从原始数据中获取的信息比较少,这就需要更多先验信息来保证模型的效果。先验信息可以作用在:模型上(模型采用特定的内在结构、条件先设或添加其他一些约束条件)和数据集上(根据特定的先验假设去调整、变换或扩展训练数据)。
采用降低过拟合风险的措施:
主要通过数据扩充。下面的是针对图像分类任务中对每幅图像进行一下变换:
迁移学习。借用一个在大规模数据集上预训练好的通用模型,并在针对目标任务的小数据集上进行微调。因为往往一个好的模型本身已经能够达到很好地效果了。(可参见吴恩达的一篇关于模型的论文,有的时候一个随机初始化的优秀的模型已经赢在起跑线了)。
读书笔记,内容来源于《百面机器学习》。