0


【pyspark学习从入门到精通18】机器学习库_1

我们使用了严格操作 RDDs 的 Spark MLlib 包。在本文,我们将转到严格操作 DataFrames 的 Spark ML 部分。根据 Spark 文档,现在 Spark 的主要机器学习 API 是包含在 spark.ml 包中的基于 DataFrame 的模型集。

让我们开始吧!

在本文中,你将学习如何执行以下操作:

  • 准备转换器、估计器和管道
  • 使用 ML 包中的模型预测婴儿的生存机会
  • 评估模型的性能
  • 执行参数超参数调整
  • 使用包中提供的其他机器学习模型

包的概述

在最顶层,该包公开了三个主要的抽象类:转换器(Transformer)、估计器(Estimator)和管道(Pipeline)。我们将很快用一些简短的例子解释每一个。我们将在本章的最后一节提供一些模型的更具体的例子。

转换器(Transformer)

顾名思义,转换器类通过(通常)向您的 DataFrame 添加新列来转换您的数据。

在高层次上,当从转换器抽象类派生时,每一个新的转换器都需要实现一个 .transform(...) 方法。该方法作为第一个并且通常也是唯一的强制性参数,需要传递一个要转换的 DataFrame。当然,这在 ML 包中的方法之间会有所不同:其他流行的参数是 inputCol 和 outputCol;然而,这些通常默认为一些预定义的值,例如,例如,inputCol 参数的 'features'。

spark.ml.feature 中提供了许多转换器,我们将在这里简要描述它们(之后在本章中我们将使用其中一些):

  • Binarizer:给定一个阈值,该方法将连续变量转换为二元变量。
  • Bucketizer:类似于 Binarizer,此方法采用一系列阈值(splits 参数),并将连续变量转换为多项式变量。
  • ChiSqSelector:对于分类目标变量(考虑分类模型),此功能允许您选择通过 numTopFeatures 参数参数化的预定义数量的特征,这些特征最能解释目标中的方差。选择是通过 Chi-Square 测试完成的,正如方法名称所建议的。这是两步方法之一:首先,您需要 .fit(...) 您的数据(以便该方法可以计算卡方检验)。调用 .fit(...) 方法(您将 DataFrame 作为参数传递)将返回一个 ChiSqSelectorModel 对象,然后您可以使用 .transform(...) 方法转换您的 DataFrame。
  • CountVectorizer:这对于标记的文本(例如 [['Learning', 'PySpark', 'with', 'us'],['us', 'us', 'us']])很有用。它是两步方法之一:首先,您需要 .fit(...),即从数据集中学习模式,然后才能使用由 .fit(...) 方法返回的 CountVectorizerModel 进行 .transform(...)。此转换器对于前面所示的标记文本的输出将类似于:[(4, [0, 1, 2, 3], [1.0, 1.0, 1.0, 1.0]),(4, [3], [3.0])]。
  • DCT:离散余弦变换接受一个实数值向量,并返回相同长度的向量,但具有不同频率的余弦函数之和的振荡。这样的转换对于提取数据中的一些潜在频率或数据压缩很有用。
  • ElementwiseProduct:返回一个向量,其元素是传递给方法的向量和作为 scalingVec 参数传递的向量的乘积。例如,如果您有一个 [10.0, 3.0, 15.0] 向量,而您的 scalingVec 是 [0.99, 3.30, 0.66],那么您将得到的向量如下:[9.9, 9.9, 9.9]。
  • HashingTF:这是一个哈希技巧转换器,它接受一个标记文本列表,并返回一个向量(预定义长度)与计数。从 PySpark 的文档:
    "由于使用简单的模运算将哈希函数转换为列索引,建议使用特征数量参数 numFeatures 的二的幂;否则,特征将不会均匀映射到列。"
  • IDF:此方法计算一系列文档的逆文档频率。请注意,文档需要已经表示为向量(例如,使用 HashingTF 或 CountVectorizer)。
  • IndexToString:StringIndexer 方法的补充。它使用 StringIndexerModel 对象的编码将字符串索引反向转换为原始值。顺便说一下,请注意,这有时可能不起作用,您需要从 StringIndexer 指定值。
  • MaxAbsScaler:将数据重新缩放到 [-1.0, 1.0] 范围内(因此,它不会移动数据的中心)。
  • MinMaxScaler:类似于 MaxAbsScaler,不同之处在于它将数据缩放到 [0.0, 1.0] 范围内。
  • NGram:此方法接受标记文本列表,并返回 n-gram:成对、三元组或 n 个以上的连续单词。例如,如果您有一个 ['good', 'morning', 'Robin', 'Williams'] 向量,您将得到以下输出:['good morning', 'morning Robin', 'Robin Williams']。
  • Normalizer:使用 p-范数值(默认情况下是 L2)将数据缩放到单位范数。
  • OneHotEncoder:此方法将分类列编码为二进制向量列。
  • PCA:执行主成分分析的数据降维。
  • PolynomialExpansion:对向量执行多项式展开。例如,如果您有一个符号写成 [x, y, z] 的向量,该方法将产生以下展开:[x, xx, y, xy, yy, z, xz, yz, zz]。
  • QuantileDiscretizer:类似于 Bucketizer 方法,但不是传递 splits 参数,而是传递 numBuckets。然后该方法通过计算数据的近似分位数来决定分割应该是什么样的。
  • RegexTokenizer:这是使用正则表达式的字符串分词器。
  • RFormula:对于那些热衷于 R 的用户,您可以传递一个公式,例如 vec ~ alpha * 3 + beta(假设您的 DataFrame 有 alpha 和 beta 列),它将根据表达式产生 vec 列。
  • SQLTransformer:类似于前面的,但不是使用类似 R 的公式,而是可以使用 SQL 语法。
  • StandardScaler:使列标准化,使其具有 0 的均值和标准差等于 1。
  • StopWordsRemover:从标记文本中删除停用词(例如 'the' 或 'a')。
  • StringIndexer:给定一列中所有单词的列表,这将产生一个索引向量。
  • Tokenizer:这是默认的分词器,它将字符串转换为小写,然后按空格分割。
  • VectorAssembler:这是一个非常有用的转换器,它将多个数值(包括向量)列合并为具有向量表示的单个列。例如,如果您的 DataFrame 中有三列:
df = spark.createDataFrame(
 [(12, 10, 3), (1, 4, 2)], 
 ['a', 'b', 'c'])

调用的输出将是:

ft.VectorAssembler(inputCols=['a', 'b', 'c'], 
 outputCol='features')\
 .transform(df) \
 .select('features')\
 .collect()
  • VectorIndexer:这是将分类列索引到索引向量的方法。它逐列工作,从列中选择不同的值,排序并返回映射中值的索引而不是原始值。
  • VectorSlicer:在特征向量上工作,可以是稠密的或稀疏的:给定一个索引列表,它从特征向量中提取值。
  • Word2Vec:此方法接受一个句子(字符串)作为输入,并将其转换为 {string, vector} 格式的映射,这种表示在自然语言处理中很有用。

本文转载自: https://blog.csdn.net/qq_32146369/article/details/140252533
版权归原作者 水木流年追梦 所有, 如有侵权,请联系我们删除。

“【pyspark学习从入门到精通18】机器学习库_1”的评论:

还没有评论