python的特征提取實驗一_Spark 2.1.0 入門:特征抽取 — TF-IDF(Python版)

這一部分我們主要介紹和特征處理相關的算法,大體分為以下三類:

特征抽取:從原始數據中抽取特征

特征轉換:特征的維度、特征的轉化、特征的修改

特征選取:從大規模特征集中選取一個子集

特征提取

TF-IDF (HashingTF and IDF)

“詞頻-逆向文件頻率”(TF-IDF)是一種在文本挖掘中廣泛使用的特征向量化方法,它可以體現一個文檔中詞語在語料庫中的重要程度。

? 詞語由t表示,文檔由d表示,語料庫由D表示。詞頻TF(t,d)是詞語t在文檔d中出現的次數。文件頻率DF(t,D)是包含詞語的文檔的個數。如果我們只使用詞頻來衡量重要性,很容易過度強調在文檔中經常出現,卻沒有太多實際信息的詞語,比如“a”,“the”以及“of”。如果一個詞語經常出現在語料庫中,意味著它并不能很好的對文檔進行區分。TF-IDF就是在數值化文檔信息,衡量詞語能提供多少信息以區分文檔。其定義如下:

? 此處 是語料庫中總的文檔數。公式中使用log函數,當詞出現在所有文檔中時,它的IDF值變為0。加1是為了避免分母為0的情況。TF-IDF 度量值表示如下:

? 此處

是語料庫中總的文檔數。公式中使用log函數,當詞出現在所有文檔中時,它的IDF值變為0。加1是為了避免分母為0的情況。TF-IDF 度量值表示如下:

? 在Spark ML庫中,TF-IDF被分成兩部分:TF (+hashing) 和 IDF。

TF: HashingTF 是一個Transformer,在文本處理中,接收詞條的集合然后把這些集合轉化成固定長度的特征向量。這個算法在哈希的同時會統計各個詞條的詞頻。

IDF: IDF是一個Estimator,在一個數據集上應用它的fit()方法,產生一個IDFModel。 該IDFModel 接收特征向量(由HashingTF產生),然后計算每一個詞在文檔中出現的頻次。IDF會減少那些在語料庫中出現頻率較高的詞的權重。

? Spark.mllib 中實現詞頻率統計使用特征hash的方式,原始特征通過hash函數,映射到一個索引值。后面只需要統計這些索引值的頻率,就可以知道對應詞的頻率。這種方式避免設計一個全局1對1的詞到索引的映射,這個映射在映射大量語料庫時需要花費更長的時間。但需要注意,通過hash的方式可能會映射到同一個值的情況,即不同的原始特征通過Hash映射后是同一個值。為了降低這種情況出現的概率,我們只能對特征向量升維。i.e., 提高hash表的桶數,默認特征維度是 2^20 = 1,048,576.

在下面的代碼段中,我們以一組句子開始。首先使用分解器Tokenizer把句子劃分為單個詞語。對每一個句子(詞袋),我們使用HashingTF將句子轉換為特征向量,最后使用IDF重新調整特征向量。這種轉換通常可以提高使用文本特征的性能。

首先,導入TFIDF所需要的包:

from pyspark.ml.feature import HashingTF,IDF,Tokenizer

準備工作完成后,我們創建一個簡單的DataFrame,每一個句子代表一個文檔。

sentenceData = spark.createDataFrame([(0, "I heard about Spark and I love Spark"),(0, "I wish Java could use case classes"),(1, "Logistic regression models are neat")]).toDF("label", "sentence")

在得到文檔集合后,即可用tokenizer對句子進行分詞

tokenizer = Tokenizer(inputCol="sentence", outputCol="words")

wordsData = tokenizer.transform(sentenceData)

得到分詞后的文檔序列后,即可使用HashingTF的transform()方法把句子哈希成特征向量,這里設置哈希表的桶數為2000。

hashingTF = HashingTF(inputCol="words", outputCol="rawFeatures", numFeatures=20)

featurizedData = hashingTF.transform(wordsData)

?可以看到,分詞序列被變換成一個稀疏特征向量,其中每個單詞都被散列成了一個不同的索引值,特征向量在某一維度上的值即該詞匯在文檔中出現的次數。

最后,使用IDF來對單純的詞頻特征向量進行修正,使其更能體現不同詞匯對文本的區別能力,IDF是一個Estimator,調用fit()方法并將詞頻向量傳入,即產生一個IDFModel。

idf = IDF(inputCol="rawFeatures", outputCol="features")

idfModel = idf.fit(featurizedData)

很顯然,IDFModel是一個Transformer,調用它的transform()方法,即可得到每一個單詞對應的TF-IDF度量值。

rescaledData = idfModel.transform(featurizedData)

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

可以看到,特征向量已經被其在語料庫中出現的總次數進行了修正,通過TF-IDF得到的特征向量,在接下來可以被應用到相關的機器學習方法中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533621.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533621.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533621.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java addlast_Java中的LinkedList addLast()方法: java.util.LinkedList.addLast() - Break易站

Java中的java.util.LinkedList.addLast()方法用于在LinkedList的末尾插入特定元素。句法:void addLast(Object element)參數:此函數接受單個參數元素,如上面的語法所示。此參數指定的元素將附加在列表的末尾。返回值:此方法不返回…

macos降級_iOS12.3 beta2更新了什么 iOS12.3測試版2新特性與升降級方法

4月0日凌晨,蘋果發布了iOS12.3 beta2,作為iOS12.3第二個測試版,相比前一個版本,發布時間間隔近2周,這次依然是小版本更新,不過相對良心一些,主要是多了一些與國內用戶相關的東西。iOS12.3 beta …

java技術教程視頻_Spring開發視頻教程高級篇+源碼(400M)33講

Spring開發視頻教程高級篇源碼(400M)33講01_全面闡釋Spring及其各項功能.rar 02_搭建與測試Spring的開發環境.rar 03_編碼剖析Spring管理Bean的原理.rar 04_Spring的三種實例化Bean的方式.rar 05_配置Spring管理的bean的作用域.rar 06_Spring管理的Bean的生命周期.rar 07_編碼剖…

python的常見矩陣除法_Numpy矩陣除法返回所有零

我對下面的矩陣有個除法錯誤。我想用行和的101向量除以1010matrix。在[[5731, 3, 20, 8, 12, 54, 46, 8, 39, 2],[ 2, 6472, 47, 24, 7, 44, 7, 11, 116, 12],[ 55, 36, 5296, 104, 84, 27, 106, 53, 183, 14],[ 50, 49, 132, 5312, 2, 253, 36, 58, 142, 97],[ 16, 28, 36, 9,…

java rc2加密_急求java RC2加密算法

下面是一段C RC2加密 要求要用java 重寫 能互相加密解密QSBEncryptRc2::QSBEncryptRc2(){EncryKey "DingXin Communication Key 20080613";}//解密失敗時返回失敗描述AnsiString QSBEncryptRc2::GetDecryptErrMsg(){int ErrorCode;AnsiString ErrMsg;ErrorCode …

linux配置usb主從_雜集:淺談關于Mongodb數據庫主從復制

Linux下Mongodb數據庫主從復制配置Mongodb的三種集群搭建的方式:Master-Slaver:主從[目前被副本集取代]。Replica Set:副本集。Sharding:切片。Mongodb單實例缺點:適合簡易開發時使用,生產使用不行&#xf…

java讀取郵箱附件_使用javamail獲取附件內容

我正在使用javamail來自動化一些電子郵件處理。使用javamail獲取附件內容我設法連接到pop3服務器并獲取消息。其中一些包含附件。根據郵件標題,我可以“預測”我需要獲取的附件的文件名。但我無法得到它的內容:(我有一個函數public byte[] searchForContent(Part pa…

高斯擬合 vc++代碼_NMA2020W1 極大似然法模型擬合與bootstrap

常見的線性模型: 求解方式有兩種,一種是計算均方誤差(MSE),使得均方誤差最小。圖1找到梯度為零的點即可。而之前一直比較模糊的最大似然法也比較清楚了。一般線性模型,我們假定誤差項是符合高斯分布的&…

java文件快速掃描儀_Java掃描儀具有示例的NextNextShort()方法

掃描儀類hasNextShort()方法語法:public boolean hasNextShort();public boolean hasNextShort(int rad);hasNextShort()方法在java.util包中可用。hasNextShort()方法用于檢查此掃描程序在其輸入中是否具有下一個標記,是否可以將其作為隱式基數中的shor…

python sqlite并發處理_python sqlite大數據 處理

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技術人對外發布原創技術內容的最大平臺&…

java sax xml文件解析_java解析xml文件-DOM/SAX

java解析xml文件的兩種方式1:DOM原理:把整個文檔加載到內存,轉化成dom樹,之后應用程序可以隨機的訪問dom樹的任何數據,靈活 快,但消耗內存一個簡單的xml使用java解析//builder工廠DocumentBuilderFactory f…

python現有兩個磁盤文件a和b_有兩個磁盤文件A和B,各存放一行字母,今要求把這兩個文件中的信息合并,輸出到一個新文件C中。...

首先,在.cpp所在的文件夾下建立A.txt與B.txt。向其中輸入字母。#include#include#includeint main(){FILE *a,*b,*c;char ch[100],outfile[10];int i0,n;void paixu(char a[100],int n);if((afopen("A.txt","r"))NULL){printf("Cant open …

python 遠程控制_用 Python 遠程控制你的電腦

用 Python 遠程控制你的電腦一、前言很多時候我們有這種需求,因為程序運行比較耗時,但是我們沒有足夠的時間等待。這個時候我們就可以用 Python 做一個遠程控制電腦的小工具,實現遠程控制電腦。當然,我們能做的操作十分有限&#…

攝像頭圖像分析目標物體大小位置_一文讀懂圖像定位及跟蹤技術

文 | 傳感器技術在科學技術日新月異的今天,人們對機器設備的智能性、自主性要求也越來越高,希望其完全替代人的角色,把人們從繁重、危險的工作任務中解脫出來,而能否像人一樣具有感知周圍環境的能力已成為設備實現智能化自主化的關…

java 相對路徑獲取_在java項目中通過相對路徑獲取資源的方式

1.可以通過 類名.class.getResource方法獲取或者getSystemResource2.可以通過當前線程 Thread.currentThread().getContextClassLoader().getResource獲取public class TestDemo {public static void main(String[] args) throws FileNotFoundException, IOException {Properti…

python循環嵌套的外循環必須完全包含內循環_Python:循環與嵌套循環實現規律數列...

很多人覺得編程很難,其實換個想法,這就是個用來解決問題的工具,我們為了解決實際問題而來學習和使用編程,這樣編程學習有了目的性,動力會更強。就像現在十分熱門的Python技術,就是人工智能領域所需求的&…

python爬取正確但不出文件_使用BeautifulSoup進行Python抓取時不顯示所有行

我是美容小組的新手。我試圖從ESPN Fantasy Basketball Standings中獲取“Season Stats”表,但并不是返回所有行。經過一番研究,我認為這可能是一個問題html.parser,所以我用了lxml。我得到了同樣的結果。如果有人能告訴我如何得到所有球隊的…

pat乙級相當于什么水平_雅思6.5是什么水平?相當于托福多少分?

雅思和托福是當前社會中非母語人士的主流英語水平測試。準備出國留學的學生對這兩項考試并不陌生。對于一些學生來說,僅靠雅思成績并不足以申請他們最喜歡的學校。特別是對于申請北美院校的學生,托福成績是申請時提交語言成績的優先考慮事項。那么&#…

java時間方法_JAVA處理日期時間常用方法

轉載JAVA處理日期時間常用方法:1.java.util.CalendarCalendar 類是一個抽象類,它為特定瞬間與一組諸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日歷字段之間的轉換提供了一些方法,并為操作日歷字段(例如獲得下星期的日期)提供了一些方法。瞬間可…

python氣象_Python 在氣象上的應用

Python 在氣象上的應用0.7892019.03.15 23:19:31字數 913閱讀 1,024為什么選擇python功能齊全的編程語言,真正面向對象喜歡可讀的代碼出版質量圖繪制輕松讀/寫netcdf和grib數據輕松使用Fortran / C / C 廣泛的庫支持數字和非數字工作科學計算1.Numpy  Numpy是pyth…