python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF
基于最新2.2.0版本翻譯
本節(jié)介紹和特征一起工作的算法,大致分為以下幾類:提取:從原始數(shù)據(jù)提取特征
轉(zhuǎn)換:縮放,轉(zhuǎn)換,或者修改特征
選擇:從一個大的特征集合里面選擇一個子集
局部敏感哈希(LSH):這類算法能將特征變換與其他算法相結(jié)合
目錄特征提取TF-IDF
Word2Vec
CountVectorizer
特征轉(zhuǎn)換標(biāo)記生成器(Tokenizer)
停用詞移除器(StopWordsRemover)
n-gram
二值化
PCA
多項式展開(PolynomialExpansion)
離散余弦變換(Discrete Cosine Transform ?DCT)
StringIndexer
IndexToString
OneHotEncoder
VectorIndexer
Interaction
Normalizer
StandardScaler
MinMaxScaler
MaxAbsScaler
Bucketizer
ElementwiseProduct
SQLTransformer
VectorAssembler
QuantileDiscretizer
Imputer
特征選擇VectorSlicer
RFormula
ChiSqSelector
局部敏感哈希歐幾里德距離的隨機投影
Jaccard距離最小hash特征轉(zhuǎn)換
近似相似性join
近似最近鄰搜索LSH操作
LSH算法
特征提取
TF-IDF
TF-IDF是在文本挖掘中廣泛使用的特征向量化方法,以反映語料庫中文檔的詞語的重要性。用t表示一個詞,d表示一篇文檔,D表示文檔集, 詞頻TF(t, d)表示表示文檔d中詞t的個數(shù),文檔頻率DF(t,D)表示在文檔集D中詞t出現(xiàn)的個數(shù)。如果我們僅僅用詞頻衡量重要性,非常容易出現(xiàn)那些 頻頻繁出現(xiàn)的詞如the,of但表示出很少和文檔有關(guān)的信息。如果一個詞語在語料庫中經(jīng)常出現(xiàn),這意味著它不攜帶關(guān)于特定文檔的特殊信息。逆文檔頻率IDF是一個詞語能提供多少信息的數(shù)值化表示。IDF(t,D)=log((|D|+1)/(DF(t,?D)?+?1))
在這里,|D|是語料的總文檔數(shù),由于使用對數(shù),如果一個詞出現(xiàn)在所有文檔中,則IDF值 為0,應(yīng)用平滑項以避免分母為0。TF-IDF是度量TF和IDF的產(chǎn)物:TF-IDF(t,d,D)=TF(t,d)*IDF(t,D)
詞頻和文檔頻率有很多定義的方法。在MLlib,我們分離TF和IDF,使其靈活。
TF:HashingTF和CountVectorizer都可以用來生成詞頻向量。
HashingTF是一個轉(zhuǎn)換器,它接受詞集合輸入,并將這些集合轉(zhuǎn)換為固定長度的特征向量。
在文本處理中,一個詞語集合也許是一個詞袋。HashingTF利用哈希技巧。原始特征被映射到索引通過使用Hash函數(shù)。Hash函數(shù)使用MurmurHash 3,然后根據(jù)映射的索引計算詞頻。這個方法避免了在大語料上成本昂貴的全局詞索引map的計算方式,但是會存在潛在的hash沖突,也就是不同的詞特征在hash后被映射成相同的詞。為了減少沖突的機會,我們可以增加目標(biāo)特征維度,即散列表的桶數(shù)。由于使用簡單的模數(shù)將散列函數(shù)轉(zhuǎn)換為列索引,建議使用兩個冪作為特征維,否則不會將特征均勻地映射到列。默認的特征維度為2^18=262,144.可選的二進制切換參數(shù)控制詞頻計數(shù)。當(dāng)設(shè)置為true時,所有非零頻率計數(shù)設(shè)置為1.對于模擬二進制而不是整數(shù)計數(shù)的離散概率模型特別有用。
CountVectorizer 將一個文本文檔轉(zhuǎn)成詞數(shù)向量,具體參考CountVectorizer
IDF:IDF是一個估計器,通過擬合數(shù)據(jù)集產(chǎn)生一個IDFModel。IDFModel輸入特征向量(通過由HashingTF 或者 CountVectorizer創(chuàng)建)并且縮放每列。直觀地說,它減少了在語料庫中頻繁出現(xiàn)的列。
注意:spark.ml 不提供文本分詞,我們參照Stanford NLP Group和scalanlp/chalk.
示例
在下面的代碼段中,我們從一組句子開始。我們用Tokenizer將每個句子分成單詞。
對于每個句子(包的單詞),我們使用HashingTF將該句子哈希成特征向量。我們使用IDF來重新縮放特征向量;這通常在使用文本作為功能時提高性能。然后,我們的特征向量可以被傳遞給學(xué)習(xí)算法。
參考HashingTF Scala docs和IDF Scala docs獲得更詳細的APIimport?org.apache.spark.ml.feature.{HashingTF,?IDF,?Tokenizer}val?sentenceData?=?spark.createDataFrame(Seq(
(0.0,?"Hi?I?heard?about?Spark"),
(0.0,?"I?wish?Java?could?use?case?classes"),
(1.0,?"Logistic?regression?models?are?neat")
)).toDF("label",?"sentence")val?tokenizer?=?new?Tokenizer().setInputCol("sentence").setOutputCol("words")val?wordsData?=?tokenizer.transform(sentenceData)val?hashingTF?=?new?HashingTF()
.setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(20)val?featurizedData?=?hashingTF.transform(wordsData)//?alternatively,?CountVectorizer?can?also?be?used?to?get?term?frequency?vectorsval?idf?=?new?IDF().setInputCol("rawFeatures").setOutputCol("features")val?idfModel?=?idf.fit(featurizedData)val?rescaledData?=?idfModel.transform(featurizedData)
rescaledData.select("label",?"features").show()
完整示例請參考spark倉庫examples/src/main/scala/org/apache/spark/examples/ml/TfIdfExample.scala
作者:xcrossed
鏈接:https://www.jianshu.com/p/91a3920932c0
總結(jié)
以上是生活随笔為你收集整理的python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 安卓模拟器电脑版_【夜神安
- 下一篇: html对图片轮播脚本怎么调用,【jqu