当前位置 :首页 >> 社会

PySpark ML 特征提取与必需方法总结

2024-01-20   来源 : 社会

"sentence",

outputCol= "words")

wordsData = tokenizer.transform(sentenceData)

hashingTF = HashingTF(inputCol= "words",

outputCol= "rawFeatures",

numFeatures= 20)

featurizedData = hashingTF.transform(wordsData)

# 另外,CountVectorizer也可以用来给与词语频图形

idf = IDF(inputCol= "rawFeatures",

outputCol= "features")

idfModel = idf.fit(featurizedData)

rescaledData = idfModel.transform(featurizedData)

rescaledData.select( "label", "features").show

spark.stop

+-----+--------------------+

|label| features|

+-----+--------------------+

| 0.0|(20,[6,8,13,16],[...|

| 0.0|(20,[0,2,7,9,13,1...|

| 1.0|(20,[3,4,6,11,19]...|

+-----+--------------------+ Word2Vec

Word2Vec将重构重构作为输出,并降解词语矩阵作为输出。它首先从锻炼重构独有至少据里构建一个词语汇表,然后求学短语的矩阵声称。降解的词语矩阵应用领域程序可当作许多重构处理和机器求学应用领域程序里的特性。

Word2Vec 是一个 Estimator ,它运用于声称应用领域程序的短语序特并锻炼一个 Word2VecModel 。该三维将每个短语同构到一个唯一的浮动一般来说矩阵。用做 Word2VecModel 应用领域程序里所有短语的不等差值将每个应用领域程序变换为矩阵;然后,此矩阵可当作预报、应用领域程序相似度计算等的特性。

在PySpark ML的 Word2Vec 借助于里,用做了 skip-gram 三维。skip-gram 的锻炼目标是求学擅长预报其在同一个片语里的实例的词语矩阵声称。在至少学上,个至少一系特锻炼词语,skip-gram 三维的目标是最小化不等对至少似然 ,其里 w1,w2,…,wT

k是锻炼窗口的一般来说。

在 skip-gram 三维里,每个短语w与两个矩阵uw和vw关的,这两个矩阵分别声称短语和实例。在个至少短语wj的情况,正确预报短语wj的概率由softmax三维确定

其里V为词语汇量。

从一个大应用领域程序开始,每个应用领域程序都声称为一个短语序特。对于每个应用领域程序,将其变换为特性矩阵。然后将该特性矩阵传递信息给求学启发式。

frompyspark.ml.feature importWord2Vec

frompyspark.sql importSparkSession

if_name_ == "_main_":

spark = SparkSession

.builder

.appName( "Word2VecExample")

.getOrCreate

# 输出独有至少据:每四人是一个片语或应用领域程序里的词语袋。

documentDF = spark.createDataFrame([

( "Hi I heard about PyDataStudio".split( " "), ),

( "I wish you will follow us".split( " "), ),

( "Logistic regression models are neat".split( " "), )

], [ "text"])

# 求学从短语到矩阵的同构。

word2Vec = Word2Vec(vectorSize= 3, minCount= 0, inputCol= "text", outputCol= "result")

model = word2Vec.fit(documentDF)

result = model.transform(documentDF)

forrow inresult.collect:

text, vector = row

print( "Text: [%s] => Vector: %s"% ( ", ".join(text), str(vector)))

spark.stop

Text: [Hi, I, heard, about, PyDataStudio] =>

Vector: [0.012690218258649112,0.015476902015507221,

-0.015471531823277474]

Text: [I, wish, you, will, follow, us] =>

Vector: [0.054964230551073946,0.06904734919468561,

-0.028411002596840262]

Text: [Logistic, regression, models, are, neat] =>

Vector: [0.060065926611423494,0.04297176990658045,

-0.0729493197053671] CountVectorizer

CountVectorizer 和 CountVectorizerModel 旨在帮助将重构应用领域程序集合变换为 token 计算矩阵。当客体注解不可全程, CountVectorizer 可以当作 Estimator 来提炼词语汇表,并降解一个 CountVectorizerModel 。该三维为词语汇表上的应用领域程序降解稀疏声称,然后可以将其传递信息给其他启发式,如 LDA。

在转换处理过程里, CountVectorizer 将为了让在 vocabSize 整个重构里按词语频次序的最高词语。可选值 minDF 还通过选定用语必须浮现在词语汇表里的应用领域程序的最小存量(或分至少,如果

frompyspark.sql importSparkSession

frompyspark.ml.feature importCountVectorizer

if_name_ == "_main_":

spark = SparkSession

.builder

.appName( "CountVectorizerExample")

.getOrCreate

# 输出独有至少据:每四人是一个远方 ID 的词语袋。

df = spark.createDataFrame([

( 0, "a b c".split( " ")),

( 1, "a b b c a".split( " "))

], [ "id", "words"])

# 从重构里转换CountVectorizerModel

cv = CountVectorizer(inputCol= "words", outputCol= "features", vocabSize= 3, minDF= 2.0)

model = cv.fit(df)

result = model.transform(df)

result.show(truncate= False)

spark.stop

+---+---------------+-------------------------+

|id |words |features |

+---+---------------+-------------------------+

|0 |[a, b, c] |(3,[0,1,2],[1.0,1.0,1.0])|

|1 |[a, b, b, c, a]|(3,[0,1,2],[2.0,2.0,1.0])|

+---+---------------+-------------------------+ FeatureHasher

特性散特FeatureHasher将一个大分类学或二进制特性投影到选定维度的特性矩阵里(往往远小于独有特性三维空间的特性矩阵)。这是用做散特善于将特性同构到特性矩阵里的至少据库来完成的。

FeatureHasher transformer 在多特上开始运行,每特可能包涵二进制或分类学特性。特独有至少据类型的行径和处理如下:

二进制特:对于二进制特性,特名的哈希差值用做将特性差值同构到其在特性矩阵里的至少据库。转换情况,二进制特性不被当作分类学(即使它们是至少列)。要将它们当作分类学,用做 categoricalCols 值选定相关特。

URL特:对于分类学特性,用做URL“ column_name=value ”的哈希差值同构到矩阵至少据库,指标差值为 1.0 。因此,分类学特性是“ one-hot ”编码的(类似用做 OneHotEncoder 和 dropLast=false )。

巴罗特:巴罗差值的处理方式与URL特相同。意味着,巴罗特性声称为 “ column_name=true ” 或 “ column_name=false ”,指标差值为 1.0 。

Null(不足之处)差值被忽略(在结果特性矩阵里隐式为零)。

frompyspark.sql importSparkSession

frompyspark.ml.feature importFeatureHasher

if_name_ == "_main_":

spark = SparkSession

.builder

.appName( "FeatureHasherExample")

.getOrCreate

dataset = spark.createDataFrame([

( 2.2, True, "1", "Py"),

( 3.3, False, "2", "Data"),

( 4.4, False, "3", "Studio"),

( 5.5, False, "4", "Py")

], [ "real", "bool", "stringNum", "string"])

hasher = FeatureHasher(inputCols=[ "real", "bool", "stringNum", "string"],

outputCol= "features")

featurized = hasher.transform(dataset)

featurized.show(truncate= False)

spark.stop

+----+-----+---------+------+--------------------------------------------------------+

|real|bool |stringNum|string|features |

+----+-----+---------+------+--------------------------------------------------------+

|2.2 |true |1 |Py |(262144,[168496,174475,247670,262126],[1.0,2.2,1.0,1.0])|

|3.3 |false|2 |Data |(262144,[70644,89673,174475,221108],[1.0,1.0,3.3,1.0]) |

|4.4 |false|3 |Studio|(262144,[9578,22406,70644,174475],[1.0,1.0,1.0,4.4]) |

|5.5 |false|4 |Py |(262144,[70644,101499,168496,174475],[1.0,1.0,1.0,5.5]) |

+----+-----+---------+------+--------------------------------------------------------+

特性为了让

VectorSlicer

VectorSlicer 是一个元件,它接受一个特性矩阵并输出一个远方有独有特性子至少据类型的新特性矩阵。它对于从矩阵特里提炼特性很简单。

VectorSlicer 接受带有选定至少据库的矩阵特,然后输出一个新矩阵特,其差值是通过这些至少据库为了让的。有两种类型的至少据库,

声称矩阵至少据库的至少列至少据库 setIndices 。

声称矩阵里特性名字的URL至少据库, setNames 。

输出矩阵将首先用做选取至少据库对特性开展次序(按个至少次序),然后是选取名字(按个至少次序)。

frompyspark.ml.feature importVectorSlicer

frompyspark.ml.linalg importVectors

frompyspark.sql.types importRow

df = spark.createDataFrame([

Row(userFeatures=Vectors.sparse( 3, { 0: -2.0, 1: 2.3})),

Row(userFeatures=Vectors.dense([ -2.0, 2.3, 0.0]))])

slicer = VectorSlicer(inputCol= "userFeatures", outputCol= "features", indices=[ 1])

output = slicer.transform(df)

output.select( "userFeatures", "features").show

+--------------------+-------------+

| userFeatures| features|

+--------------------+-------------+

|(3,[0,1],[-2.0,2.3])|(1,[0],[2.3])|

| [-2.0,2.3,0.0]| [2.3]|

+--------------------+-------------+ ChiSqSelector

ChiSqSelector 都是卡方特性为了让。它对带有分类学特性的标示出独有至少据开展操作方法。ChiSqSelector 用做卡方自主性鉴定来不得不为了让哪些特性。它背书五种为了让作法: numTopFeatures , percentile , fpr , fdr , fwe :

numTopFeatures 根据卡方鉴定为了让浮动存量的顶级特性。这类似产生带有最大者预报灵活性的特性。

percentile 类似 numTopFeatures 但为了让所有特性的一小部分而不是浮动存量。

fpr 为了让 p 差值少于阈差值的所有特性,从而高度集中为了让的误报率。

fdr 用做Benjamini-Hochberg 处理过程为了让严重错误注意到率少于阈差值的所有特性。

fwe 为了让 p 差值少于阈差值的所有特性。阈差值按 1/numFeatures 图像,从而高度集中亲族为了让严重错误率。转换情况,为了让作法为 numTopFeatures ,转换上方特性至少所设为 50。使用者可以用做 为了让为了让作法 setSelectorType

frompyspark.ml.feature importChiSqSelector

frompyspark.ml.linalg importVectors

df = spark.createDataFrame([

( 7, Vectors.dense([ 0.0, 0.0, 18.0, 1.0]), 1.0,),

( 8, Vectors.dense([ 0.0, 1.0, 12.0, 0.0]), 0.0,),

( 9, Vectors.dense([ 1.0, 0.0, 15.0, 0.1]), 0.0,)], [ "id", "features", "clicked"])

selector = ChiSqSelector(numTopFeatures= 1, featuresCol= "features",

outputCol= "selectedFeatures", labelCol= "clicked")

result = selector.fit(df).transform(df)

print( "ChiSqSelector output with top %d features selected"% selector.getNumTopFeatures)

result.show

ChiSqSelector output with top 1 features selected

+---+------------------+-------+----------------+

| id| features|clicked|selectedFeatures|

+---+------------------+-------+----------------+

| 7|[0.0,0.0,18.0,1.0]| 1.0| [18.0]|

| 8|[0.0,1.0,12.0,0.0]| 0.0| [12.0]|

| 9|[1.0,0.0,15.0,0.1]| 0.0| [15.0]|

+---+------------------+-------+----------------+ 单变量特性为了让器

UnivariateFeatureSelector 对带有分类学/月份特性的分类学/月份标签开展操作方法。使用者可以所设 featureType and labelType ,Spark 会根据选定的 featureType and为了让要用做的评级函至少 labelType 。

featureType | labelType |score function

------------|------------|--------------

categorical |categorical | chi-squared (chi2)

continuous |categorical | ANOVATest (f_classif)

continuous |continuous | F-value (f_regression)

它背书五种为了让模式: numTopFeatures , percentile , fpr , fdr , fwe :

numTopFeatures 为了让浮动存量的顶级特性。

percentile 类似 numTopFeatures 但为了让所有特性的一小部分而不是浮动存量。

fpr 为了让 p 差值少于阈差值的所有特性,从而高度集中为了让的误报率。

fdr 用做Benjamini-Hochberg 处理过程为了让严重错误注意到率少于阈差值的所有特性。

fwe 为了让 p 差值少于阈差值的所有特性。阈差值按 1/numFeatures 图像,从而高度集中亲族为了让严重错误率。

frompyspark.ml.feature importUnivariateFeatureSelector

frompyspark.ml.linalg importVectors

df = spark.createDataFrame([

( 1, Vectors.dense([ 1.7, 4.4, 7.6, 5.8, 9.6, 2.3]), 3.0,),

( 2, Vectors.dense([ 8.8, 7.3, 5.7, 7.3, 2.2, 4.1]), 2.0,),

( 3, Vectors.dense([ 1.2, 9.5, 2.5, 3.1, 8.7, 2.5]), 3.0,),

( 4, Vectors.dense([ 3.7, 9.2, 6.1, 4.1, 7.5, 3.8]), 2.0,),

( 5, Vectors.dense([ 8.9, 5.2, 7.8, 8.3, 5.2, 3.0]), 4.0,),

( 6, Vectors.dense([ 7.9, 8.5, 9.2, 4.0, 9.4, 2.1]), 4.0,)], [ "id", "features", "label"])

selector = UnivariateFeatureSelector(featuresCol= "features",

outputCol= "selectedFeatures",

labelCol= "label",

selectionMode= "numTopFeatures")

selector.setFeatureType( "continuous").setLabelType( "categorical").setSelectionThreshold( 1)

result = selector.fit(df).transform(df)

print( "单变量特性为了让器输出,用做 f_classif 为了让 top %d 特性"

% selector.getSelectionThreshold)

result.show

单变量特性为了让器输出,用做 f_classif 为了让 top 1 特性

+---+--------------------+-----+----------------+

| id| features|label|selectedFeatures|

+---+--------------------+-----+----------------+

| 1|[1.7,4.4,7.6,5.8,...| 3.0| [2.3]|

| 2|[8.8,7.3,5.7,7.3,...| 2.0| [4.1]|

| 3|[1.2,9.5,2.5,3.1,...| 3.0| [2.5]|

| 4|[3.7,9.2,6.1,4.1,...| 2.0| [3.8]|

| 5|[8.9,5.2,7.8,8.3,...| 4.0| [3.0]|

| 6|[7.9,8.5,9.2,4.0,...| 4.0| [2.1]|

+---+--------------------+-----+----------------+ 标准差阈差值为了让器

VarianceThresholdSelector 是一个删除低标准差特性的为了让器。标准差不大于 的特性 varianceThreshold 将被删除。如果未所设, varianceThreshold 则转换为 0,这意味着只有标准差为 0 的特性(即在所有抽样里带有相同差值的特性)将被删除。

frompyspark.ml.feature importVarianceThresholdSelector

frompyspark.ml.linalg importVectors

df = spark.createDataFrame([

( 1, Vectors.dense([ 6.0, 7.0, 0.0, 7.0, 6.0, 0.0])),

( 2, Vectors.dense([ 0.0, 9.0, 6.0, 0.0, 5.0, 9.0])),

( 3, Vectors.dense([ 0.0, 9.0, 3.0, 0.0, 5.0, 5.0])),

( 4, Vectors.dense([ 0.0, 9.0, 8.0, 5.0, 6.0, 4.0])),

( 5, Vectors.dense([ 8.0, 9.0, 6.0, 5.0, 4.0, 4.0])),

( 6, Vectors.dense([ 8.0, 9.0, 6.0, 0.0, 0.0, 0.0]))], [ "id", "features"])

selector = VarianceThresholdSelector(varianceThreshold= 8.0, outputCol= "selectedFeatures")

result = selector.fit(df).transform(df)

print( "输出: 填入标准差少于 %f 的特性"%

selector.getVarianceThreshold)

result.show

输出: 填入标准差少于 8.000000 的特性

+---+--------------------+-----------------+

| id| features| selectedFeatures|

+---+--------------------+-----------------+

| 1|[6.0,7.0,0.0,7.0,...|[6.0,0.0,7.0,0.0]|

| 2|[0.0,9.0,6.0,0.0,...|[0.0,6.0,0.0,9.0]|

| 3|[0.0,9.0,3.0,0.0,...|[0.0,3.0,0.0,5.0]|

| 4|[0.0,9.0,8.0,5.0,...|[0.0,8.0,5.0,4.0]|

| 5|[8.0,9.0,6.0,5.0,...|[8.0,6.0,5.0,4.0]|

| 6|[8.0,9.0,6.0,0.0,...|[8.0,6.0,0.0,0.0]|

+---+--------------------+-----------------+

点这里👇关注我,记得标星哦~

CDA课程建议

心肺复苏急救培训
肩周炎怎么治疗最好
如何缓解肌肉拉伤疼
甲氨蝶呤治疗类风湿正确使用方法
痛风性关节炎如何治疗
刘欢说的没错!如今的“凤凰传奇”,已经走上了人生的另一条大道

靠着演造出应付自己的苦于问题了,都得靠着曾毅回家借借钱应付问题。奇怪的是的是,曾毅造出去借钱进的借钱回去后也是跟妹花上对半分着花上。之后在某次接纳报道,控告这件事的时候,妹...

友情链接