这一部分主要介绍和特征处理相关的算法,大体分为以下三类:
1)特征抽取:从原始数据中抽取特征
2)特征转换:特征的维度、特征的转化、特征的修改
3)特征选取:从大规模特征集中选取一个子集
在机器学习处理过程中,为了方便相关算法的实现,经常需要把标签数据(一般是字符串)转化成整数索引,或是在计算结束后将整数索引还原为相应的标签。
Spark ML包中提供了几个相关的转换器,例如:StringIndexer、IndexToString、OneHotEncoder、VectorIndexer,它们提供了十分方便的特征转换功能,这些转换器类都位于.spark.ml.feature包下。用于特征转换的的转化器和其他机器学习算法一样,也属于也属于ML Pipeline模型的一部分,可以用来构成机器学习流水线,以StringIndexer为例,其存储着进行标签数值化过程的相关 超参数,是一个Estimator,对其调用fit(..)方法即可生成相应的模型StringIndexerModel类,很显然,它存储了用于DataFrame进行相关处理的 参数,是一个Transformer(其他转换器也是同一原理)
1.StringIndexer
StringIndexer转换器可以把一列类别型的特征(或标签)进行编码,使其数值化,索引的范围从0开始,该过程可以使得相应的特征索引化,使得某些无法接受类别型特征的算法可以使用,并提高诸如决策树等机器学习算法的效率。
索引构建的顺序为标签的频率,优先编码频率较大的标签,所以出现频率最高的标签为0号。
如果输入的是数值型的,我们会把它转化成字符型,然后再对其进行编码。
1引入必要的包,并创建一个简单的DataFrame,它只包含一个id列和一个标签列category:

2)我们创建一个StringIndex

博客介绍了Spark MLlib中用于特征处理的转换器,包括StringIndexer(标签转数值)、IndexToString(数值转标签)和OneHotEncoder(独热编码)。StringIndexer按照标签频率编码,IndexToString则用于反向转换,而OneHotEncoder将类别特征转化为二元连续特征。这些转换器在机器学习流水线中扮演重要角色。

908

被折叠的 条评论
为什么被折叠?



