Pyspark:HashingTF和FeatureHasher类的使用

Pyspark版本:V3.2.1

写在最前

本篇博客只单独介绍Pyspark.ml.feature包中HashingTF类和FeatureHasher类的使用方法,其他类的使用可以参考博客:Pyspark:特征处理(ml.feature包的是使用)_Sun_Sherry的博客-CSDN博客

1 HashingTF 

1.1 MurmurHash算法

MurmurHash算法是一种适用于一般的基于散列查找的非加密校验函数。其当前最新版本为MurmurHash3,该算法能够产生出32-bit或128-bit哈希值。

Murmur哈希的算法包含两个基本操作:MUltiply(MU, 乘法) and Rotate(R,旋转)。因为它在哈希的过程要经历多次MU和R操作,所以就叫算法就叫MurMur了。

目前Python中的第三方包mmh3已经实现了该哈希算法,这里仅简要介绍其使用方法。具体如下:

import mmh3

a_mmh=mmh3.hash('a')
print(a_mmh)
a_mmh64=mmh3.hash64('a')
print(a_mmh64)
a_mmh128=mmh3.hash128('a')
print(a_mmh128)

其结果如下:

1.2 HashingTF类

概括地说,HashingTF类可以统计各个单词(term)在一篇文档中出现的次数(term frequence,TF),并以向量的方式保存。而在统计过程中,需要将单词跟向量的列索引一一映射起来。其映射方法如下:

  • 先使用算法将单词映射成哈希值。这里使用的hash算法即为上述介绍的MurmurHash 3算法。
  • 再使用模函数将上述哈希值映射到指定大小的数值内,该数值即为向量的维度。该数值由参数numFeatures决定,推荐使用2的幂次方来指定numFeatures。

HashingTF的使用方法如下:

from pyspark.sql import SparkSession
from pyspark.ml.feature import *
import os
from pyspark.ml.linalg import Vectors

os.environ['SPARK_HOME'] ='/Users/sherry/documents/spark/spark-3.2.1-bin-hadoop3.2'
spark=SparkSession.builder.appName('ml').getOrCreate()

data=spark.createDataFrame([(['a','b','c','b'],),
                            (['c','d','d','c'],),
                            (['a','e','e'],),],['words'])
tf_model=HashingTF(inputCol='words',outputCol='w_tf',numFeatures=8)
data_tf=tf_model.transform(data)
print(data_tf.toPandas())

其结果如下:

2. FeatureHasher类

FeatureHasher类的作用和x的作用基本相似,但FeatureHasher类能处理更多的数据类型。其具体处理方式如下:

  • Numeric型:对于数值型特征,直接对其值进行哈希运算得到值即为对应的索引值。如果希望将Numeric型特征按照Categorical型来处理,则需要通过参数categoricalCols指定。
  • String型:对于String型特征,其处理方法类似one-hot。
  • Boolean型:对于Boolean型特征,其处理方法类似one-hot。

其具体用法举例如下:

df=spark.createDataFrame([(1,True,'A1','1'),
                          (2,False,'C1','3')],
                         ['A','B','C','D'])
feat_hash=FeatureHasher(inputCols=['A','B','C','D'],
                        outputCol='features',
                        numFeatures=8)
df_feathash=feat_hash.transform(df)

其结果如下:

 参考资料:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值