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(参数)解释单个参数并返回其名称、文档以及可选的默认值和用户提供的值的字符串。
返回所有参数的文档,包括它们可选的默认值和用户提供的值。
extractParamMap([extra])提取嵌入的默认参数值和用户提供的值,然后将它们与输入中的额外值合并到一个扁平的参数映射中,如果存在冲突,则使用后者的值,即顺序为:默认参数值 < 用户提供的值 < 额外值。
fit(数据集[, 参数])使用可选参数将模型拟合到输入数据集。
fitMultiple(数据集, 参数映射)为输入数据集中的每个参数映射拟合一个模型。
获取handleInvalid的值或其默认值。
getInputCol()获取inputCol的值或其默认值。
获取 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实例。
属性
返回按名称排序的所有参数。
方法文档
-
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方法,并返回一个模型列表。
-
dataset
- Returns
-
-
Transformeror a list ofTransformer -
拟合模型
-
-
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 -
一系列参数映射。
-
dataset
- 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的属性。