精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
特征工程(三):特征縮放,從詞袋到 TF-IDF

字袋易于生成,但遠非完美。假設我們平等的統計所有單詞,有些不需要的詞也會被強調。在第三章提過一個例子,Emma and the raven。我們希望在文檔表示中能強調兩個主要角色。示例中,“Eama”和“raven”都出現了3詞,但是“the”的出現高達8次,“and”出現了次,另外“it”以及“was”也都出現了4詞。僅僅通過簡單的頻率統計,兩個主要角色并不突出。這是有問題的。

其他的像是“magnificently,” “gleamed,” “intimidated,” “tentatively,” 和“reigned,”這些輔助奠定段落基調的詞也是很好的選擇。它們表示情緒,這對數據科學家來說可能是非常有價值的信息。 所以,理想情況下,我們會傾向突出對有意義單詞的表示。

Tf-Idf: 詞袋的小轉折

Tf-Idf 是詞袋的一個小小的轉折。它表示詞頻-逆文檔頻。tf-idf不是查看每個文檔中每個單詞的原始計數,而是查看每個單詞計數除以出現該單詞的文檔數量的標準化計數。



讓我們看一些圖片來了解它的具體內容。圖4-1展示了一個包含4個句子的簡單樣例:“it is a puppy,” “it is a cat,” “it is a kitten,” 以及 “that is a dog and this is a pen.” 我們將這些句子繪制在“puppy”,“cat”以及“is”三個詞的特征空間上。


關于貓和狗的四個句子


現在讓我們看看對逆文檔頻進行對數變換之后,相同四個句子的tf-idf表示。 圖4-2顯示了相應特征空間中的文檔??梢宰⒁獾?,單詞“is”被有效地消除,因為它出現在該數據集中的所有句子中。另外,單詞“puppy”和“cat”都只出現在四個句子中的一個句子中,所以現在這兩個詞計數得比之前更高(log(4)=1.38...>1)。因此tf-idf使罕見詞語更加突出,并有效地忽略了常見詞匯。它與第3章中基于頻率的濾波方法密切相關,但比放置嚴格截止閾值更具數學優雅性。


四個句子的Tf-idf表示

Tf-Idf的含義

Tf-idf使罕見的單詞更加突出,并有效地忽略了常見單詞。

測試

Tf-idf通過乘以一個常量來轉換字數統計特性。因此,它是特征縮放的一個例子,這是第2章介紹的一個概念。特征縮放在實踐中效果有多好? 我們來比較簡單文本分類任務中縮放和未縮放特征的表現。 coding時間到!

本次實踐, 我們依舊采用了Yelp評論數據集。Yelp數據集挑戰賽第6輪包含在美國六個城市將近一百六十萬商業評論。

使用python加載和清洗Yelp評論數據集


建立分類數據集

讓我們看看是否可以使用評論來區分餐廳或夜生活場所。為了節省訓練時間,僅使用一部分評論。這兩個類別之間的評論數目有很大差異。這是所謂的類不平衡數據集。對于構建模型來說,不平衡的數據集存在著一個問題:這個模型會把大部分精力花費在比重更大的類上。由于我們在這兩個類別都有大量的數據,解決這個問題的一個比較好方法是將數目較大的類(餐廳)進行下采樣,使之與數目較小的類(夜生活)數目大致相同。下面是一個示例工作流程。

  1. 隨機抽取10%夜生活場所評論以及2.1%的餐廳評論(選取合適的百分比使得每個種類的數目大致一樣)

  2. 將數據集分成比例為7:3的訓練集和測試集。在這個例子里,訓練集包括29,264條評論,測試集有12542條。

  3. 訓練數據包括46,924個不同的單詞,這是詞袋表示中特征的數量。

創建一個分類數據集



用tf-idf轉換縮放詞袋

這個實驗的目標是比較詞袋,tf-idf以及L2歸一化對于線性分類的作用。注意,做tf-idf接著做L2歸一化和單獨做L2歸一化是一樣的。所以我們需要只需要3個特征集合:詞袋,tf-idf,以及逐詞進行L2歸一化后的詞袋。

在這個例子中,我們將使用Scikit-learn的CountVectorizer將評論文本轉化為詞袋。所有的文本特征化方法都依賴于標記器(tokenizer),該標記器能夠將文本字符串轉換為標記(詞)列表。在這個例子中,Scikit-learn的默認標記模式是查找2個或更多字母數字字符的序列。標點符號被視為標記分隔符。

測試集上進行特征縮放

特征縮放的一個細微之處是它需要了解我們在實踐中很可能不知道的特征統計,例如均值,方差,文檔頻率,L2范數等。為了計算tf-idf表示,我們不得不根據訓練數據計算逆文檔頻率,并使用這些統計量來調整訓練和測試數據。在Scikit-learn中,將特征變換擬合到訓練集上相當于收集相關統計數據。然后可以將擬合過的變換應用于測試數據。

特征變換



當我們使用訓練統計來衡量測試數據時,結果看起來有點模糊。測試集上的最小-最大比例縮放不再整齊地映射到零和一。L2范數,平均數和方差統計數據都將顯得有些偏離。這比缺少數據的問題好一點。例如,測試集可能包含訓練數據中不存在的單詞,并且對于新的單詞沒有相應的文檔頻。通常的解決方案是簡單地將測試集中新的單詞丟棄。這似乎是不負責任的,但訓練集上的模型在任何情況下都不會知道如何處理新詞。一種稍微不太好的方法是明確地學習一個“垃圾”單詞,并將所有罕見的頻率單詞映射到它,即使在訓練集中也是如此,正如“罕見詞匯”中所討論的那樣。

使用邏輯回歸進行分類

邏輯回歸是一個簡單的線性分類器。通過對輸入特征的加權組合,輸入到一個sigmoid函數。sigmoid函數將任何實數平滑的映射到介于0和1之間。如圖4-3繪制sigmoid函數曲線。由于邏輯回歸比較簡單,因此它通常是最先接觸的分類器。




sigmoid函數


該函數將輸入的實數x轉換為一個0到1之間的數。它有一組參數w,表示圍繞中點0.5增加的斜率。截距項b表示函數輸出穿過中點的輸入值。如果sigmoid輸出大于0.5,則邏輯分類器將預測為正例,否則為反例。通過改變w和b,可以控制決策的改變,以及決策響應該點周圍輸入值變化的速度。

使用默認參數訓練邏輯回歸分類器



矛盾的是,結果表明最準確的分類器是使用BOW特征的分類器。出乎意料我們之外。事實證明,造成這種情況的原因是沒有很好地“調整”分類器,這是比較分類器時一個常見的錯誤。

使用正則化調整邏輯回歸

邏輯回歸有些華而不實。 當特征的數量大于數據點的數量時,找到最佳模型的問題被認為是欠定的。 解決這個問題的一種方法是在訓練過程中增加額外的約束條件。 這就是所謂的正則化,技術細節將在下一節討論。

邏輯回歸的大多數實現允許正則化。為了使用這個功能,必須指定一個正則化參數。正則化參數是在模型訓練過程中未自動學習的超參數。相反,他們必須手動進行調整,并將其提供給訓練算法。這個過程稱為超參數調整。(有關如何評估機器學習模型的詳細信息,請參閱評估機器學習模型(Evaluating Machine Learning Models)).調整超參數的一種基本方法稱為網格搜索:指定一個超參數值網格,并且調諧器以編程方式在網格中搜索最佳超參數設置 格。 找到最佳超參數設置后,使用該設置對整個訓練集進行訓練,并比較測試集上這些同類最佳模型的性能。


重點:比較模型時調整超參數

比較模型或特征時,調整超參數非常重要。 軟件包的默認設置將始終返回一個模型。 但是除非軟件在底層進行自動調整,否則很可能會返回一個基于次優超參數設置的次優模型。 分類器性能對超參數設置的敏感性取決于模型和訓練數據的分布。 邏輯回歸對超參數設置相對穩?。ɑ虿幻舾校?即便如此,仍然有必要找到并使用正確的超參數范圍。 否則,一個模型相對于另一個模型的優點可能僅僅是由于參數的調整,并不能反映模型或特征的實際表現。


即使是最好的自動調整軟件包仍然需要指定搜索的上限和下限,并且找到這些限制可能需要幾次手動嘗試。

在本例中,我們手動將邏輯正則化參數的搜索網格設置為{1e-5,0.001,0.1,1,10,100}。 上限和下限花費了幾次嘗試來縮小范圍。 表4-1給出了每個特征集合的最優超參數設置。

Table4-1.對夜場和餐廳的Yelp評論進行邏輯回歸的最佳參數設置



我們也想測試tf-idf和BOW之間的精度差異是否是由于噪聲造成的。 為此,我們使用k折交叉驗證來模擬具有多個統計獨立的數據集。它將數據集分為k個折疊。交叉驗證過程通過分割后的數據進行迭代,使用除除去某一折之外的所有內容進行訓練,并用那一折驗證結果。Scikit-Learn中的GridSearchCV功能通過交叉驗證進行網格搜索。 圖4-4顯示了在每個特征集上訓練的模型的精度測量分布箱線圖。 盒子中線表示中位精度,盒子本身表示四分之一和四分之三分位之間的區域,而線則延伸到剩余的分布。

通過重采樣估計方差

現代統計方法假設底層數據是隨機分布的。 數據導出模型的性能測量也受到隨機噪聲的影響。 在這種情況下,基于相似數據的數據集,不止一次進行測量總是比較好的。 這給了我們一個測量的置信區間。 K折交叉驗證就是這樣一種策略。 重采樣是另一種從相同底層數據集生成多個小樣本的技術。 有關重采樣的更多詳細信息,請參見評估機器學習模型。

使用網格搜索調整邏輯回歸超參數



L2歸一化后的特征結果看起來非常糟糕。 但不要被蒙蔽了 。準確率低是由于正則化參數設置不恰當造成的 - 實際證明次優超參數會得到相當錯誤的結論。 如果我們使用每個特征集的最佳超參數設置來訓練模型,則不同特征集的測試精度非常接近。


最終的訓練和測試步驟來比較不同的特征集




適當的調整提高了所有特征集的準確性,并且所有特征集在正則化后進行邏輯回歸得到了相近的準確率。tf-idf模型準確率略高,但這點差異可能沒有統計學意義。 這些結果是完全神秘的。 如果特征縮放效果不如vanilla詞袋的效果好,那為什么要這么做呢? 如果tf-idf沒有做任何事情,為什么總是要這么折騰? 我們將在本章的其余部分中探索答案。

深入:發生了什么?

為了明白結果背后隱含著什么,我們必須考慮模型是如何使用特征的。對于類似邏輯回歸這種線性模型來說,是通過所謂的數據矩陣的中間對象來實現的。數據矩陣包含以固定長度平面向量表示的數據點。 根據詞袋向量,數據矩陣也被稱為文檔詞匯矩陣。 圖3-1顯示了一個向量形式的詞袋向量,圖4-1顯示了特征空間中的四個詞袋向量。 要形成文檔詞匯矩陣,只需將文檔向量取出,平放,然后將它們堆疊在一起。 這些列表示詞匯表中所有可能的單詞。 由于大多數文檔只包含所有可能單詞的一小部分,因此該矩陣中的大多數都是零,是一個稀疏矩陣。


包含5個文檔7個單詞的文檔-詞匯矩陣


特征縮放方法本質上是對數據矩陣的列操作。特別的,tf-idf和L2歸一化都將整列(例如n-gram特征)乘上一個常數。

Tf-idf=列縮放

Tf-idf和L2歸一化都是數據矩陣上的列操作。 正如附錄A所討論的那樣,訓練線性分類器歸結為尋找最佳的線性組合特征,這是數據矩陣的列向量。 解空間的特征是列空間和數據矩陣的空間。訓練過的線性分類器的質量直接取決于數據矩陣的零空間和列空間。 大的列空間意味著特征之間幾乎沒有線性相關性,這通常是好的。 零空間包含“新”數據點,不能將其表示為現有數據的線性組合; 大的零空間可能會有問題。(強烈建議希望對諸如線性決策表面,特征分解和矩陣的基本子空間等概念進行的回顧的讀者閱讀附錄A。)


列縮放操作如何影響數據矩陣的列空間和空間? 答案是“不是很多”。但是在tf-idf和L2歸一化之間有一個小小的差別。


由于幾個原因,數據矩陣的零空間可能很大。 首先,許多數據集包含彼此非常相似的數據點。 這使得有效的行空間與數據集中數據的數量相比較小。 其次,特征的數量可以遠大于數據的數量。 詞袋特別擅長創造巨大的特征空間。 在我們的Yelp例子中,訓練集中有29K條評論,但有47K條特征。 而且,不同單詞的數量通常隨著數據集中文檔的數量而增長。 因此,添加更多的文檔不一定會降低特征與數據比率或減少零空間。


在詞袋模型中,與特征數量相比,列空間相對較小。 在相同的文檔中可能會出現數目大致相同的詞,相應的列向量幾乎是線性相關的,這導致列空間不像它可能的那樣滿秩。 這就是所謂的秩虧。 (就像動物缺乏維生素和礦物質一樣,矩陣秩虧,輸出空間也不會像應該那樣蓬松)。


秩虧行空間和列空間導致模型空間預留過度的問題。 線性模型為數據集中的每個特征配置權重參數。 如果行和列空間滿秩$^1$,那么該模型將允許我們在輸出空間中生成任何目標向量。 當模型不滿秩時,模型的自由度比需要的更大。 這使得找出解決方案變得更加棘手。


可以通過特征縮放來解決數據矩陣的不滿秩問題嗎? 讓我們來看看。




如果該向量與目標輸出不相關,那么這將有效地修剪掉噪聲信號,這是一件好事。 這是tf-idf和L2歸一化之間的關鍵區別。 L2歸一化永遠不會計算零的范數,除非該向量包含全零。 如果向量接近零,那么它的范數也接近于零。 按照小規范劃分將突出向量并使其變大。


另一方面,如圖4-2所示,Tf-idf可以生成接近零的縮放因子。 當這個詞出現在訓練集中的大量文檔中時,會發生這種情況。 這樣的話有可能與目標向量沒有很強的相關性。 修剪它可以使模型專注于列空間中的其他方向并找到更好的解決方案。 準確度的提高可能不會很大,因為很少有噪聲方向可以通過這種方式修剪。


在特征縮放的情況下,L2和tf-idf對于模型的收斂速度確實有促進。 這是該數據矩陣有一個更小的條件數的標志。 事實上,L2歸一化使得條件數幾乎一致。 但情況并非條件數越多,解決方案越好。 在這個實驗中,L2歸一化收斂比BOW或tf-idf快得多。 但它對過擬合也更敏感:它需要更多的正則化,并且對優化期間的迭代次數更敏感。

總結

在本章中,我們使用tf-idf作為入口點,詳細分析特征變換如何影響(或不)模型。Tf-idf是特征縮放的一個例子,所以我們將它的性能與另一個特征縮放方法-L2標準化進行了對比。


結果并不如預期。Tf-idf和L2歸一化不會提高最終分類器的準確度,而不會超出純詞袋。 在獲得了一些統計建模和線性代數處理知識之后,我們意識到了為什么:他們都沒有改變數據矩陣的列空間。

兩者之間的一個小區別是,tf-idf可以“拉伸”字數以及“壓縮”它。 換句話說,它使一些數字更大,其他數字更接近歸零。 因此,tf-idf可以完全消除無意義的單詞。

我們還發現了另一個特征縮放效果:它改善了數據矩陣的條件數,使線性模型的訓練速度更快。 L2標準化和tf-idf都有這種效果。

總而言之,正確的特征縮放可以有助于分類。 正確的縮放突出了信息性詞語,并降低了常見單詞的權重。 它還可以改善數據矩陣的條件數。 正確的縮放并不一定是統一的列縮放。

這個故事很好地說明了在一般情況下分析特征工程的影響的難度。 更改特征會影響訓練過程和隨后的模型。 線性模型是容易理解的模型。 然而,它仍然需要非常謹慎的實驗方法和大量的深刻的數學知識來區分理論和實際的影響。 對于更復雜的模型或特征轉換來說,這是不可能的。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【特征提取 分類模型】4種常見的NLP實踐思路
NLP文本分類——豆瓣圖書分類實踐
文本數據的機器學習自動分類方法(下)
(數據科學學習手札26)隨機森林分類器原理詳解&Python與R實現
巴菲特的Alpha:利用機器學習量化『股票基本面』
語義分析的一些方法(中篇) | 數盟
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 漳浦县| 林芝县| 塔城市| 肇州县| 襄垣县| 黎平县| 东明县| 山阴县| 新乡市| 开阳县| 龙胜| 伊宁县| 玉环县| 安化县| 贺兰县| 梅河口市| 深州市| 丹阳市| 尉氏县| 东平县| 武冈市| 筠连县| 韩城市| 甘泉县| 甘孜县| 岑巩县| 马山县| 梧州市| 邹平县| 彭州市| 德阳市| 新干县| 博兴县| 杭锦旗| 乐昌市| 深水埗区| 耿马| 司法| 保亭| 绥江县| 徐闻县|