pyspark.ml.feature.VectorIndexer
的用法。用法:
class pyspark.ml.feature.VectorIndexer(*, maxCategories=20, inputCol=None, outputCol=None, handleInvalid='error')
用于索引
Vector
数据集中的分类特征列的类。- 自动识别分类特征(默认行为)
这有助于将未知向量的数据集处理成具有一些连续特征和一些分类特征的数据集。连续和分类之间的选择基于 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 的索引。
这不能保证在多次运行中选择相同的类别索引。
如果分类特征包括值 0,则保证将值 0 映射到索引 0。这保持向量稀疏性。
未来可能会增加更多的稳定性。
在转换中保留元数据;如果特征的元数据已经存在,则不要重新计算。
通过参数或通过现有元数据指定不索引的某些特征。
如果分类特征只有 1 个类别,则添加警告。
这有两种使用模式::
index 稳定性::
TODO:未来扩展:未来计划提供以下函数::
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])
相关用法
- Python pyspark VectorSlicer用法及代码示例
- Python pyspark VectorSizeHint用法及代码示例
- Python pyspark Vectors.stringify用法及代码示例
- Python pyspark Vectors.squared_distance用法及代码示例
- Python pyspark VectorAssembler用法及代码示例
- Python pyspark Vectors.parse用法及代码示例
- Python pyspark Vectors.dense用法及代码示例
- Python pyspark Vectors.sparse用法及代码示例
- Python pyspark VersionUtils.majorMinorVersion用法及代码示例
- Python pyspark VarianceThresholdSelector用法及代码示例
- Python pyspark create_map用法及代码示例
- Python pyspark date_add用法及代码示例
- Python pyspark DataFrame.to_latex用法及代码示例
- Python pyspark DataStreamReader.schema用法及代码示例
- Python pyspark MultiIndex.size用法及代码示例
- Python pyspark arrays_overlap用法及代码示例
- Python pyspark Series.asof用法及代码示例
- Python pyspark DataFrame.align用法及代码示例
- Python pyspark Index.is_monotonic_decreasing用法及代码示例
- Python pyspark IsotonicRegression用法及代码示例
- Python pyspark DataFrame.plot.bar用法及代码示例
- Python pyspark DataFrame.to_delta用法及代码示例
- Python pyspark element_at用法及代码示例
- Python pyspark explode用法及代码示例
- Python pyspark MultiIndex.hasnans用法及代码示例
注:本文由纯净天空筛选整理自spark.apache.org大神的英文原创作品 pyspark.ml.feature.VectorIndexer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。