VectorIndexer

class pyspark.ml.feature. VectorIndexer ( * , maxCategories : int = 20 , inputCol : Optional [ str ] = None , outputCol : Optional [ str ] = None , handleInvalid : str = 'error' ) [source]

用于索引数据集中分类特征列的类,数据集类型为 Vector

This has 2 usage modes:
  • 自动识别分类特征(默认行为)
    • 这有助于将未知向量的数据集处理为包含一些连续特征和一些分类特征的数据集。连续特征和分类特征之间的选择基于maxCategories参数。

    • 将maxCategories设置为分类特征应具有的最大分类数。

    • 例如:特征0具有唯一值{-1.0, 0.0},特征1具有值{1.0, 3.0, 5.0}。如果maxCategories = 2,则特征0将被声明为分类特征并使用索引{0, 1},而特征1将被声明为连续特征。

  • 如果所有特征都是分类特征,则索引所有特征
    • 如果maxCategories设置得非常大,那么这将构建所有特征的唯一值索引。

    • 警告:如果特征是连续的,这可能会导致问题,因为这将收集所有唯一值到驱动程序。

    • 例如:特征0具有唯一值{-1.0, 0.0},特征1具有值{1.0, 3.0, 5.0}。如果maxCategories >= 3,则两个特征都将被声明为分类特征。

这将返回一个模型,该模型可以将分类特征转换为使用0基索引。

Index stability:
  • 这不能保证在多次运行中选择相同的类别索引。

  • 如果分类特征包含值0,则保证将值0映射到索引0。这保持了向量的稀疏性。

  • 未来可能会增加更多的稳定性。

TODO: Future extensions: The following functionality is planned for the future:
  • 在转换中保留元数据;如果某个特征的元数据已经存在,则不再重新计算。

  • 指定某些特征不进行索引,可以通过参数或通过现有元数据来实现。

  • 如果分类特征只有一个类别,则添加警告。

新增于版本 1.4.0。

示例

>>> from pyspark.ml.linalg import Vectors
>>> df = spark.createDataFrame([(Vectors.dense([-1.0, 0.0]),),
...     (Vectors.dense([0.0, 1.0]),), (Vectors.dense([0.0, 2.0]),)], ["a"])
>>> indexer = VectorIndexer(maxCategories=2, inputCol="a")
>>> indexer.setOutputCol("indexed")
VectorIndexer...
>>> model = indexer.fit(df)
>>> indexer.getHandleInvalid()
'error'
>>> model.setOutputCol("output")
VectorIndexerModel...
>>> model.transform(df).head().output
DenseVector([1.0, 0.0])
>>> model.numFeatures
2
>>> model.categoryMaps
{0: {0.0: 0, -1.0: 1}}
>>> indexer.setParams(outputCol="test").fit(df).transform(df).collect()[1].test
DenseVector([0.0, 1.0])
>>> params = {indexer.maxCategories: 3, indexer.outputCol: "vector"}
>>> model2 = indexer.fit(df, params)
>>> model2.transform(df).head().vector
DenseVector([1.0, 0.0])
>>> vectorIndexerPath = temp_path + "/vector-indexer"
>>> indexer.save(vectorIndexerPath)
>>> loadedIndexer = VectorIndexer.load(vectorIndexerPath)
>>> loadedIndexer.getMaxCategories() == indexer.getMaxCategories()
True
>>> modelPath = temp_path + "/vector-indexer-model"
>>> model.save(modelPath)
>>> loadedModel = VectorIndexerModel.load(modelPath)
>>> loadedModel.numFeatures == model.numFeatures
True
>>> loadedModel.categoryMaps == model.categoryMaps
True
>>> loadedModel.transform(df).take(1) == model.transform(df).take(1)
True
>>> dfWithInvalid = spark.createDataFrame([(Vectors.dense([3.0, 1.0]),)], ["a"])
>>> indexer.getHandleInvalid()
'error'
>>> model3 = indexer.setHandleInvalid("skip").fit(df)
>>> model3.transform(dfWithInvalid).count()
0
>>> model4 = indexer.setParams(handleInvalid="keep", outputCol="indexed").fit(df)
>>> model4.transform(dfWithInvalid).head().indexed
DenseVector([2.0, 1.0])

方法

clear (参数)

如果参数已明确设置,则从参数映射中清除该参数。

copy ([extra])

创建此实例的副本,具有相同的uid和一些额外的参数。

explainParam (参数)

解释单个参数并返回其名称、文档以及可选的默认值和用户提供的值的字符串。

explainParams ()

返回所有参数的文档,包括它们可选的默认值和用户提供的值。

extractParamMap ([extra])

提取嵌入的默认参数值和用户提供的值,然后将它们与输入中的额外值合并到一个扁平的参数映射中,如果存在冲突,则使用后者的值,即顺序为:默认参数值 < 用户提供的值 < 额外值。

fit (数据集[, 参数])

使用可选参数将模型拟合到输入数据集。

fitMultiple (数据集, 参数映射)

为输入数据集中的每个参数映射拟合一个模型。

getHandleInvalid ()

获取handleInvalid的值或其默认值。

getInputCol ()

获取inputCol的值或其默认值。

getMaxCategories ()

获取 maxCategories 的值或其默认值。

getOrDefault (参数)

获取用户提供的参数映射中的参数值或其默认值。

getOutputCol ()

获取outputCol的值或其默认值。

getParam (paramName)

根据名称获取参数。

hasDefault (参数)

检查参数是否具有默认值。

hasParam (paramName)

测试此实例是否包含具有给定(字符串)名称的参数。

isDefined (参数)

检查参数是否由用户显式设置或具有默认值。

isSet (参数)

检查参数是否被用户显式设置。

load (路径)

从输入路径读取一个ML实例,是 read().load(path) 的快捷方式。

read ()

返回此类的一个 MLReader 实例。

save (路径)

将此 ML 实例保存到给定路径,是 ‘write().save(path)’ 的快捷方式。

set (参数, 值)

在嵌入的参数映射中设置一个参数。

setHandleInvalid (值)

设置 handleInvalid 的值。

setInputCol (值)

设置 inputCol 的值。

setMaxCategories (值)

设置 maxCategories 的值。

setOutputCol (值)

设置 outputCol 的值。

setParams (self, \*[, maxCategories, …])

设置此 VectorIndexer 的参数。

write ()

返回此ML实例的MLWriter实例。

属性

handleInvalid

inputCol

maxCategories

输出列

参数

返回按名称排序的所有参数。

方法文档

clear ( param : pyspark.ml.param.Param ) → None

如果参数已明确设置,则从参数映射中清除该参数。

copy ( extra : Optional [ ParamMap ] = None ) → JP

创建此实例的副本,具有相同的uid和一些额外的参数。此实现首先调用Params.copy,然后使用额外参数复制伴随的Java管道组件。因此,Python包装器和Java管道组件都会被复制。

Parameters
extra dict, optional

复制到新实例的额外参数

Returns
JavaParams

此实例的副本

explainParam ( param : Union [ str , pyspark.ml.param.Param ] ) → str

解释单个参数并返回其名称、文档以及可选的默认值和用户提供的值的字符串。

explainParams ( ) → str

返回所有参数的文档,包括它们可选的默认值和用户提供的值。

extractParamMap ( extra : Optional [ ParamMap ] = None ) → ParamMap

提取嵌入的默认参数值和用户提供的值,然后将它们与输入中的额外值合并到一个扁平的参数映射中,如果存在冲突,则使用后者的值,即顺序为:默认参数值 < 用户提供的值 < 额外值。

Parameters
extra dict, optional

额外参数值

Returns
dict

合并的参数映射

fit ( dataset : pyspark.sql.dataframe.DataFrame , params : Union[ParamMap, List[ParamMap], Tuple[ParamMap], None] = None ) → Union [ M , List [ M ] ]

使用可选参数将模型拟合到输入数据集。

新增于版本 1.3.0。

Parameters
dataset pyspark.sql.DataFrame

输入数据集。

params dict or list or tuple, optional

一个可选的参数映射,用于覆盖嵌入的参数。如果给定了一个参数映射的列表/元组,这将调用每个参数映射上的fit方法,并返回一个模型列表。

Returns
Transformer or a list of Transformer

拟合模型

fitMultiple ( dataset : pyspark.sql.dataframe.DataFrame , paramMaps : Sequence [ ParamMap ] ) → Iterator [ Tuple [ int , M ] ]

为输入数据集中的每个参数映射拟合一个模型。

新增于版本 2.3.0。

Parameters
dataset pyspark.sql.DataFrame

输入数据集。

paramMaps collections.abc.Sequence

一系列参数映射。

Returns
_FitMultipleIterator

一个线程安全的可迭代对象,其中包含每个参数映射的一个模型。每次调用 next(modelIterator) 将返回 (index, model) ,其中模型是使用 paramMaps[index] 拟合的。 index 值可能不是连续的。

getHandleInvalid ( ) → str

获取handleInvalid的值或其默认值。

getInputCol ( ) → str

获取inputCol的值或其默认值。

getMaxCategories ( ) → int

获取 maxCategories 的值或其默认值。

新增于版本 1.4.0。

getOrDefault ( param : Union [ str , pyspark.ml.param.Param [ T ] ] ) → Union [ Any , T ]

获取用户提供的参数映射中的参数值或其默认值。如果两者都未设置,则引发错误。

getOutputCol ( ) → str

获取outputCol的值或其默认值。

getParam ( paramName : str ) pyspark.ml.param.Param

根据名称获取参数。

hasDefault ( param : Union [ str , pyspark.ml.param.Param [ Any ] ] ) → bool

检查参数是否具有默认值。

hasParam ( paramName : str ) → bool

测试此实例是否包含具有给定(字符串)名称的参数。

isDefined ( param : Union [ str , pyspark.ml.param.Param [ Any ] ] ) → bool

检查参数是否由用户显式设置或具有默认值。

isSet ( param : Union [ str , pyspark.ml.param.Param [ Any ] ] ) → bool

检查参数是否被用户显式设置。

classmethod load ( path : str ) → RL

从输入路径读取一个ML实例,是 read().load(path) 的快捷方式。

classmethod read ( ) → pyspark.ml.util.JavaMLReader [ RL ]

返回此类的一个 MLReader 实例。

save ( path : str ) → None

将此 ML 实例保存到给定路径,是 ‘write().save(path)’ 的快捷方式。

set ( param : pyspark.ml.param.Param , value : Any ) → None

在嵌入的参数映射中设置一个参数。

setHandleInvalid ( value : str ) pyspark.ml.feature.VectorIndexer [source]

设置 handleInvalid 的值。

setInputCol ( value : str ) pyspark.ml.feature.VectorIndexer [source]

设置 inputCol 的值。

setMaxCategories ( value : int ) pyspark.ml.feature.VectorIndexer [source]

设置 maxCategories 的值。

新增于版本 1.4.0。

setOutputCol ( value : str ) pyspark.ml.feature.VectorIndexer [source]

设置 outputCol 的值。

setParams ( self , \* , maxCategories=20 , inputCol=None , outputCol=None , handleInvalid="error" ) [source]

设置此 VectorIndexer 的参数。

新增于版本 1.4.0。

write ( ) → pyspark.ml.util.JavaMLWriter

返回此ML实例的MLWriter实例。

属性文档

handleInvalid = Param(parent='undefined', name='handleInvalid', doc="How to handle invalid data (unseen labels or NULL values). Options are 'skip' (filter out rows with invalid data), 'error' (throw an error), or 'keep' (put invalid data in a special additional bucket, at index of the number of categories of the feature).")
inputCol = Param(parent='undefined', name='inputCol', doc='input column name.')
maxCategories = Param(parent='undefined', name='maxCategories', doc='Threshold for the number of values a categorical feature can take (>= 2). If a feature is found to have > maxCategories values, then it is declared continuous.')
outputCol = Param(parent='undefined', name='outputCol', doc='output column name.')
params

返回按名称排序的所有参数。默认实现使用 dir() 获取所有类型为 Param 的属性。