当前位置:   article > 正文

Pyspark特征工程--FeatureHasher

featurehasher

FeatureHasher

class pyspark.ml.feature.FeatureHasher(numFeatures=262144, inputCols=None, outputCol=None, categoricalCols=None)

特征散列将一组分类或数字特征投影到指定维度的特征向量中(通常远小于原始特征空间的特征向量)。这是使用散列技巧完成的

数值列:
​	对于数字特征,列名的哈希值用于将特征值映射到其在特征向量中的索引。 默认情况下,数字特征不被视为分类(即使它们是整数)。 要将它们视为分类,请在 categoricalCols 中指定相关列
字符串列:
​	对于分类特征,使用字符串“column_name=value”的哈希值映射到向量索引,指标值为1.0。因此,分类特征是“one-hot”编码的(类似于使用带有 dropLast=false 的 OneHotEncoder)
布尔列:
​	布尔值的处理方式与字符串列相同。即布尔特征表示为“column_name=true”或“column_name=false”,指标值为1.0
null值:
​	Null(缺失)值被忽略(在结果特征向量中隐式为零)
由于使用简单的模将散列函数转换为向量索引,因此建议使用 2 的幂作为 numFeatures 参数;否则特征将不会均匀地映射到向量索引
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

01.初始化

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.Driver.host","192.168.1.3")\
    .config("spark.ui.showConsoleProgress","false")\
    .appName("FeatureHasher").master("local[*]").getOrCreate()
  • 1
  • 2
  • 3
  • 4

02.创建数据

data = [(2.0, True, "1", "foo"), (3.0, False, "2", "bar")]
cols = ["real", "bool", "stringNum", "string"]
df = spark.createDataFrame(data, cols)
df.show()
  • 1
  • 2
  • 3
  • 4

​ 查看结果:

+----+-----+---------+------+
|real| bool|stringNum|string|
+----+-----+---------+------+
| 2.0| true|        1|   foo|
| 3.0|false|        2|   bar|
+----+-----+---------+------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

03.查看结构:

df.printSchema()
  • 1

​ 输出结果:

root
 |-- real: double (nullable = true)
 |-- bool: boolean (nullable = true)
 |-- stringNum: string (nullable = true)
 |-- string: string (nullable = true)
  • 1
  • 2
  • 3
  • 4
  • 5

04.特征哈希转换

from pyspark.ml.feature import FeatureHasher
hasher = FeatureHasher(inputCols=cols, outputCol="features")
hasher.transform(df).show()
  • 1
  • 2
  • 3

​ 输出结果:

+----+-----+---------+------+--------------------+
|real| bool|stringNum|string|            features|
+----+-----+---------+------+--------------------+
| 2.0| true|        1|   foo|(262144,[174475,2...|
| 3.0|false|        2|   bar|(262144,[70644,89...|
+----+-----+---------+------+--------------------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

05.详细查看

hasher.transform(df).head(2)
  • 1

​ 输出结果:

[Row(real=2.0, bool=True, stringNum='1', string='foo', features=SparseVector(262144, {174475: 2.0, 247670: 1.0, 257907: 1.0, 262126: 1.0})),

 Row(real=3.0, bool=False, stringNum='2', string='bar', features=SparseVector(262144, {70644: 1.0, 89673: 1.0, 173866: 1.0, 174475: 3.0}))]
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/988783
推荐阅读
  

闽ICP备14008679号