PySpark ML 特征提取与必需方法总结
2024-01-20 来源 : 社会
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 importChiSqSelectorfrompyspark.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 importUnivariateFeatureSelectorfrompyspark.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课程建议
。心肺复苏急救培训肩周炎怎么治疗最好
如何缓解肌肉拉伤疼
甲氨蝶呤治疗类风湿正确使用方法
痛风性关节炎如何治疗
-
刘欢说的没错!如今的“凤凰传奇”,已经走上了人生的另一条大道
靠着演造出应付自己的苦于问题了,都得靠着曾毅回家借借钱应付问题。奇怪的是的是,曾毅造出去借钱进的借钱回去后也是跟妹花上对半分着花上。之后在某次接纳报道,控告这件事的时候,妹...
-
重磅!南通双节文旅“考卷”来了
沉浸于水上乐园以沉浸于式剧本领略的手段,定点时是40场对唱娱乐活动,百名NPC社交电子产品游戏,逛大隋县内井街区,策划民俗表演嘉年华不会,舞狮、剑术、武术、歌舞、喷火变脸、诗词对吟等国风多元文化领略,...[详细]
-
CCTV5今日直播!中国女排半决赛难度大,吴梦洁不受考验!日本队很稳
球迷谈及,吴梦洁常常在面对弱队的时候描绘出强大的猛攻和接球能力也,但是一旦面对强队,常常统受到阻碍,个人状态也大幅下滑。事实上,吴梦洁的统的确原因较多,在外围赛末战科威特的比赛当中,吴梦洁继续授予当月...[详细]
-
唱《山路十八弯》的李琼,因朱迅的一个经验不足,如今已“消失”20年
信心,也重新寻回了自己。 虽然陈琼仍未早已是那个在冬晚上群星的电影明星,但是她并没放弃自己的人生。她只是用一种更低调而坚持的方法来追求自己对音乐创作的人生。。a hre...[详细]
-
自由行“领跑”国庆假期出境游市场,阿联酋、土耳其变为黑马目的地
转自:鱿鱼财经新快报馆鱿鱼财经讯(记者王真真)长曾达8天的岁末国庆节节假日里,离境游零售商迎来重要有所发展节点。10月6日,新快报馆鱿鱼财经记者从多家观光旅游应用软件获悉,来年岁末国庆节节假日...[详细]
-
NBA伤病潮!魔术后卫半月板撕裂疑报销,绿军新援逃过一劫
北京时间8翌年28日,NBA主力球员最惧怕的就是在休赛期浮现困扰,这可能会影响支球队新赛季的协同作战,鹰眼的新科榜眼霍姆格伦不太可能提早报销。可在今天,又有2位主力球员浮现困扰,魔术师中都场汤普森越来...[详细]