2.6 特征提取
在本节,我们的关注点将转向特征提取,特征提取是根据工作数据集中可用特征或信息扩展为新的特征或者变量。与此同时,我们将讨论一些Apache Spark中特征提取的特殊功能,以及Spark中与特征相关的便捷解决方案。
学完本节之后,我们能够针对各种各样的机器学习项目开发并组织特征。
2.6.1 特征开发的挑战
大部分的大数据机器学习项目通常都不能直接使用大数据集。例如,使用网络日志数据时,它经常以随机文本集形式呈现,显得非常混乱,我们需要从中提取对机器学习有用的信息和特征。例如,我们需要从网络日志数据提取点击次数和展示次数,这样才能使用许多文本挖掘工具和算法。
对于任何特征提取,机器学习从业者需要决定:
采用什么信息,生成哪些特征
使用何种方法和算法
提取什么特征取决于以下几种情况:
数据可用性以及数据特性,比如处理数据缺失情况的难易程度
可用的算法,尽管有很多的算法可用于数据元素的数字组合,但较缺乏文本操作
算法
领域知识,因为涉及解读特征的能力
总体来说,下面几个常用的技术可用于追踪特征:
数据描述
数据合并
时序转换
地理相关技术
主成分分析(PCA)
特征准备的另一项工作是从数百上千个可用特征中进行选择,然后用于我们的机器学习项目。在机器学习中,特别是监督学习,手头上的普遍问题常常是根据一组预测性特征来预测结果。在大数据时代,乍看之下,会自然而然认为我们拥有的特征越多,预测效果会越好。然而,随着特征量的增加也会导致一些问题,如增加计算时间,也会导致生成结果的解读性差。
大多数情况下,在特征准备阶段,机器学习从业者经常使用与回归模型相关的特征选择方法和算法。
2.6.2 基于Spark MLlib的特征开发
特征提取可以使用Spark SQL实现,同时,Spark MLlib也有一些特殊函数完成此项任务,例如TF-IDF和Word2Vec。
MLlib和R语言都有主成分分析包,可以用于特征开发。
如我们所知,在2.2.3节,我们有4个数据表可用于展示说明:
在这里,我们可以对第三方数据应用特征提取技术,然后对最终合并的(连接)数据集进行特征选择。
基于Spark MLlib,我们可以用下面的命令调用TF-IDF:
另外,我们也可以应用Word2Vec,如下面的例子所示。
下面的例子(在Scala中)首先加载一个文本文件,把它解析为一个Seq[String] 类型的RDD,再构建一个Word2Vec实例,之后使用数据拟合Word2VecModel。然后,我们可以显示指定的前40个单词的同义词。这里,我们假定计划提取的文件名为text8,并和运行的Spark shell在同一个目录下。运行下面的代码:
有关使用Spark MLlib进行特征提取的更多信息,请访问:http://spark.apache.org/docs/latest/mllib-feature-extraction.html。
2.6.3 基于R语言的特征开发
前面提到了4个数据表:
正如前面讨论的,我们可以对第三方数据应用特征提取技术,然后对最终合并的(连接)数据集进行特征选择。
如果我们在R语言中利用Spark R notebook实现它们,就必须用到一些R程序包。如果使用ReporteRs,我们可以执行以下命令:
关于ReporteRsR程序包的更多信息请访问:https://cran.r-project.org/web/packages/ReporteRs/ReporteRs.pdf。