介绍读书笔记二之后的内容。文中涉及的代码均来自于《特征工程入门与实践》的对应章节的内容。
7. 特征转换
和特征选择相比,区别在于:特征选择得到的特征属于原始数据集中的特征集合,但是特征转换得到的特征并不是如此。
本部分将介绍3部分的内容:(1)PCA;(2)LDA;(3)机器学习流水线。下面将对其进行介绍。
(1)PCA
原理:最大化数据的方差。
类型:无监督学习,属于聚类。
实现的步骤:1)计算数据集的协方差矩阵A;
2)计算A的特征值;
3)保留前k个特征值(将特征值按照由大至小的顺序排列);
4)基于3)中特征值所对应的特征向量,对原始数据集的数据进行转换。
确定k的方法:得到各主成分所占的百分比,然后用图将前k个主成分(k=1,2,...,n,共n个特征值)总共占的百分比以图的形式绘制出。由图确定保留的主成分的个数。画图的语句如下所示:
plt.plot(np.cumsum(explained_variance_ratio))
当然,除了可以用NumPy完成上述的实现步骤,还可以用scikit-learn来完成。导入包的语句如下所示:
from sklearn.decomposition import PCA
按照上述两种方式,最终由4)得到的转换后的数据是不同的。原因在于使用scikit-learn的PCA包时,会将最终的数据进行中心化处理。
PCA:转换后得到的特征是互相独立的(很多模型要求输入的特征是彼此独立的)。
书中将先对数据进行中心化再得到主成分和对数据不做中心化得到主成分这两种方式进行对比,发现最终得到的主成分的矩阵表示结果是一样的。
书中也将先对数据先进行中心化再得到主成分和对数据不做中心化得到主成分这两种方式进行对比,发现最终得到的主成分的矩阵表示结果是不同的。
(2)LDA
原理:减小类内方差,增大类间方差,获得最大的类别可分性。
实现的步骤:1)计算每个类别的均值向量;
2)计算类内与类间的散布矩阵和;
3)计算的特征值和特征向量;
4)降序排列特征值,选择前k个最大的值;
5)找到4)所对应的特征向量,并对原数据集的数据进行投影。
和PCA一样,除了可以用NumPy来完成上述的实现步骤,还可以用scikit-learn来实现。导入包的语句如下所示:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
(3)流水线实现
选择的模型是KNN。
书中分别实现了LDA+KNN、PCA+KNN、数据缩放+LDA+PCA+KNN的流水线过程,结果显示按照最后的方式得到的准确率是最高的。即在流水线中,将多种特征工程工具组合后实现的结果可能最佳。
8. 特征学习
在第7部分中,涉及的PCA和LDA都是线性变换,只能处理定量的数据。从而,对于数据的潜在结构有了限制。本部分将不再受限于该限制,实现对于特征的提取。
本部分的内容可分为2部分:(1)RBM;(2)Word2vector。下面将对其进行介绍:
(1)RBM(受限玻尔兹曼机,Restricted Boltzmann Machine)
原理:使用概率模型学习新特征。
结构:只包含输入层和隐藏层的两层神经网络,是深度信念网络(DBN)的一种。
类别:无监督学习。
常用方式:用RBM提取出特征后,再用这些特征训练线性模型。
学习得到的特征:相比PCA和LDA(提取出的特征维数是等于或少于输入的特征维数的),最终得到的特征的维数不一定等于或少于输入的特征维数。
应用:BernoulliRBM,对原始数据的范围进行约束(输入是0~1之间的数),实现更快地训练。分别用PCA和BernoulliR
BM对MNIST提取特征,结果显示RBM的更好,可以更好地显示不同深度的结果。
scikit-learn中的RBM实现:在scikit-learn中只给出了BernoulliRBM的实现。导入方式如下所示:
from sklearn.neural_network import BernoulliRBM
在机器学习流水线中,分别用LR、PCA+LR、BernoulliRBM+LR对MNIST的原始像素值进行特征提取,结果显示BernoulliRBM+
LR的正确率是最高的。结果表明:对于图像识别等复杂的任务,难以通过线性变换(如PCA、LDA)提取隐藏的特征,但是Ber
noulliRBM是可以的。
(2)Word2vector
之前介绍的“词袋”没有考虑“词项”在文档中的位置信息,可以考虑“词嵌入”的方式,将文档中的每个“词项”表示成n维向量的形式(n表示特征的维数)。当然,对于这种方式也是有局限性的,即依赖于语料库。
词嵌入的两种方式:1)Word2vector,由Google提出,采用DNN的方式来实现;
2)Glove,由StandFord提出,使用一系列的矩阵统计来实现。
该小结只介绍1)。
Word2vector:只有输入层和隐藏层,是浅层的NN;
隐藏层的输出表示得到的n维特征;
可以由Python包gensim来实现;
应用:信息检索,如找出与主题词最相近的句子。
9. 案例分析
本部分基于机器学习流水线,分析面部识别和预测酒店评价数据这两个实例。其中,涉及的特征工程流水线流程和第1部分是一样的,具体内容与第2~7部分保持一致。
(1)面部识别
流水线中用到:缩放模块—Z分数;
PCA模块;
LDA模块;
LR。
最终的训练结果中给出了具体的参数设置。
(2)预测酒店评价数据
涉及LSA(latent semantic analysis,潜在语义分析)。为实现LSA,需要有如下三个步骤:
1)tfidf向量化;
2)PCA(因为文本的稀疏性,这里用SVD);
3)行归一化。
由此,可以得到每个预测的酒店主题中引人关注的短语列表。这里用到的聚类算法是K-Means,结果排序是由tfidf确定的。因为要分析的问题与“词项”的上下文无关,所以没有涉及到Word2vector方法。
10. 小结
至此,对于《特征工程入门与实践》这本书的总结结束了。对于PCA的具体实现过程,自己推荐如下的网址资源https://
redstonewill.com/710/。对于LDA,自己推荐周志华老师的《机器学习》的3.4小节。