python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF
基于最新2.2.0版本翻譯
本節介紹和特征一起工作的算法,大致分為以下幾類:提取:從原始數據提取特征
轉換:縮放,轉換,或者修改特征
選擇:從一個大的特征集合里面選擇一個子集
局部敏感哈希(LSH):這類算法能將特征變換與其他算法相結合
目錄特征提取TF-IDF
Word2Vec
CountVectorizer
特征轉換標記生成器(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特征轉換
近似相似性join
近似最近鄰搜索LSH操作
LSH算法
特征提取
TF-IDF
TF-IDF是在文本挖掘中廣泛使用的特征向量化方法,以反映語料庫中文檔的詞語的重要性。用t表示一個詞,d表示一篇文檔,D表示文檔集, 詞頻TF(t, d)表示表示文檔d中詞t的個數,文檔頻率DF(t,D)表示在文檔集D中詞t出現的個數。如果我們僅僅用詞頻衡量重要性,非常容易出現那些 頻頻繁出現的詞如the,of但表示出很少和文檔有關的信息。如果一個詞語在語料庫中經常出現,這意味著它不攜帶關于特定文檔的特殊信息。逆文檔頻率IDF是一個詞語能提供多少信息的數值化表示。IDF(t,D)=log((|D|+1)/(DF(t,?D)?+?1))
在這里,|D|是語料的總文檔數,由于使用對數,如果一個詞出現在所有文檔中,則IDF值 為0,應用平滑項以避免分母為0。TF-IDF是度量TF和IDF的產物:TF-IDF(t,d,D)=TF(t,d)*IDF(t,D)
詞頻和文檔頻率有很多定義的方法。在MLlib,我們分離TF和IDF,使其靈活。
TF:HashingTF和CountVectorizer都可以用來生成詞頻向量。
HashingTF是一個轉換器,它接受詞集合輸入,并將這些集合轉換為固定長度的特征向量。
在文本處理中,一個詞語集合也許是一個詞袋。HashingTF利用哈希技巧。原始特征被映射到索引通過使用Hash函數。Hash函數使用MurmurHash 3,然后根據映射的索引計算詞頻。這個方法避免了在大語料上成本昂貴的全局詞索引map的計算方式,但是會存在潛在的hash沖突,也就是不同的詞特征在hash后被映射成相同的詞。為了減少沖突的機會,我們可以增加目標特征維度,即散列表的桶數。由于使用簡單的模數將散列函數轉換為列索引,建議使用兩個冪作為特征維,否則不會將特征均勻地映射到列。默認的特征維度為2^18=262,144.可選的二進制切換參數控制詞頻計數。當設置為true時,所有非零頻率計數設置為1.對于模擬二進制而不是整數計數的離散概率模型特別有用。
CountVectorizer 將一個文本文檔轉成詞數向量,具體參考CountVectorizer
IDF:IDF是一個估計器,通過擬合數據集產生一個IDFModel。IDFModel輸入特征向量(通過由HashingTF 或者 CountVectorizer創建)并且縮放每列。直觀地說,它減少了在語料庫中頻繁出現的列。
注意:spark.ml 不提供文本分詞,我們參照Stanford NLP Group和scalanlp/chalk.
示例
在下面的代碼段中,我們從一組句子開始。我們用Tokenizer將每個句子分成單詞。
對于每個句子(包的單詞),我們使用HashingTF將該句子哈希成特征向量。我們使用IDF來重新縮放特征向量;這通常在使用文本作為功能時提高性能。然后,我們的特征向量可以被傳遞給學習算法。
參考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
總結
以上是生活随笔為你收集整理的python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 安卓模拟器电脑版_【夜神安
- 下一篇: 时间转换python_Python 日期