03.02 如何理解特徵工程?

只是個笨蛋


隨著大數據時代的到來,特徵工程發揮著越來越重要的作用。這篇文章將簡單介紹一下特徵工程的相關知識。

介紹

處理非結構化文本數據非常困難,尤其是當您嘗試構建智能系統時,它可以像人類一樣解釋和理解自由流動的自然語言。您需要能夠處理並將嘈雜的非結構化文本數據轉換為一些結構化的矢量化格式,這些格式可以被任何機器學習算法理解。

來自自然語言處理、機器學習或深度學習的原則屬於人工智能這一廣泛領域,是交易的有效工具。這裡需要記住的一個重點是任何機器學習算法都基於統計學、數學和優化原理。因此,它們不夠智能,無法以原始原生形式處理文本。

在本文中,我們將討論特性工程策略,這些策略常常利用深度學習模型。更具體地說,我們將介紹Word2Vec、GloVe 和FastText模型。

動機

在我們之前的文章中,已經多次討論過這個話題,特徵工程是創造卓越和性能更好的機器學習模型的秘訣。但需要注意的是,即使自動化特徵工程出現,您仍然需要了解應用這些技術的核心概念。否則,他們就只是黑箱模型,你仍不知道如何調整你想要解決的問題。

傳統模式的缺點

用於文本數據的傳統(基於計數)特徵工程策略涉及屬於通稱為Bag of Words模型的模型家族。這包括詞頻、TF-IDF(詞頻 - 逆文檔頻率)、N-gram等。雖然它們是從文本中提取特徵的有效方法,但由於模型的固有特性只是一堆非結構化的單詞,因此我們會丟失附加信息,如每個文本文檔中附近單詞的語義、結構、序列和上下文。這為我們探索更復雜的模型提供了足夠的動力,這些模型可以捕獲這些信息,併為我們提供以詞語為載體表示的特徵,俗稱嵌入。

需要詞嵌入

為什麼我們應該有足夠的動力來學習和構建這些詞嵌入?關於語音或圖像識別系統,所有信息已經以嵌入高維數據集中的豐富密集特徵矢量的形式出現,如音頻光譜圖和圖像像素強度。然而,對於原始文本數據,尤其是基於計數的模型,如Bag of Words,我們正在處理可能具有自己的標識符的單個詞並且不捕獲單詞之間的語義關係。這導致了文本數據的巨大稀疏詞向量,因此如果我們沒有足夠的數據,我們最終可能會得到糟糕的模型甚至過度擬合數據。

比較音頻、圖像和文本的特徵表示

為了克服語義和特徵稀疏的缺點,我們需要利用矢量空間模型(VSM),以便我們可以在這個連續的向量空間中嵌入基於語義和上下文相似的連續向量空間中嵌入詞向量。

事實上,分佈式語義學領域的分佈假設告訴我們,在相同語境中出現和使用的詞在語義上彼此相似並具有相似的含義。總之,有兩種主要類型的上下文單詞向量。基於計數的方法,如潛在語義分析(Latent Semantic Analysis,LSA)可用於計算詞彙在語料庫中與其相鄰單詞出現頻率的一些統計度量,然後為這些度量中的每個單詞構建密集單詞向量。像神經網絡語言模型這樣的預測方法,試圖從它的相鄰單詞中預測單詞,並在語料庫中查找單詞序列,在這個過程中,它學習了分佈式表示,從而給我們提供了密集的單詞嵌入。

特徵工程策略

讓我們來看看處理文本數據並從中提取有意義的特徵的一些先進策略,這些策略可用於下游機器學習系統。可以在GitHub存儲庫中訪問本文中使用的所有代碼(https://github.com/dipanjanS/practical-machine-learning-with-python/tree/master/bonus%20content/feature%20engineering%20text%20data),以備將來參考。在這裡我們將首先加載一些基本的依賴和設置。

現在我們將收集一些我們將執行的所有分析的文檔的語料庫。對於其中一個語料庫,我們將重提文本數據的傳統方法中的語料庫。為了便於理解,我們提供代碼如下。

我們的示例文本語料庫

文本預處理

可以有多種方法來清理和預處理文本數據。在自然語言處理(NLP)管道中大量使用最重要的技術。由於本文的重點是特徵工程,我們將重新使用我們的簡單的文本預處理程序,它側重於刪除特殊字符、額外的空格、數字、stopwords和更低的文本語料庫。

一旦我們準備好了基本的預處理流程,我們首先將其應用於玩具語料庫。

現在,我們使用NLTK(自然語言處理工具包)加載我們的另一個基於King James版本的語料庫並預處理文本。

以下輸出顯示了我們語料庫中的總行數以及預處理如何處理文本內容。


AI中國


特徵工程(Feature Engineering)是傳統機器學習方法中十分重要的一環,甚至可以說是決定性的。有句話來形容特徵工程就是:數據和特徵工程決定了模型效果的上限,改進算法只不過是在逼近這個上線而已。

特徵工程就是利用已有的領域知識和現有數據,手動或者自動的創造新特徵或對特徵進行篩選,以更好的用於機器學習算法。

在傳統機器學習中,特徵工程是個十分龐大和繁雜的過程,而且很依賴於人的經驗和特定領域知識。特徵工程的內容包括:

數據的預處理過程。原始數據進行數字化的表示,如將離散的特徵用亞編碼的方式來表示,比如對於西瓜的色澤而言可以分為青綠、烏黑和淺白,那麼就可以用向量來表為[1,0,0]、[0,1,0]和[0,0,1]。此外,還需對異常點和缺失值的處理。接著還需要對不同尺度和量綱的數據進行歸一化、標準化。最後還需進行特徵變換,如對數據進行多項式變換、指數對數變換等等。

特徵的提取和篩選。根據任務的要求,可能還需要進一步的提取特徵,比如對於PM2.5的預測,可以利用一階差分來提取出每天的PM2.5變化信息。另外,對於特徵數目過多為問題,還需要對特徵進行選擇,比如利用特徵之間的相關係數來剔除一些相關性過強的特徵。此外,還可以通過PCA等方法對特徵進行降維。

但是隨著近幾年深度學習的發展,傳統的特徵工程正在逐漸被人們所拋棄。特別是在處理語音、文字和圖像等非結構化數據,而在分析結構化數據中,特徵工程仍然佔據了重要的位置。

比如對於28*28大小的手寫數字識別問題而言,原始數據是二維矩陣。但是由於如果對每個像素值進行編碼,那就將有784維的特徵,這樣的特徵數目在傳統機器學習中已經是比較大的了,而輸出只有0到9十類。因此我們可以通過特徵工程來創造新的特徵,首先對二維矩陣進行二值化,在提起數字的形態特徵比如提取矩陣的像素的對稱程度,像素為1區域的長寬比等等。這樣不僅可以利用人為經驗篩選出有價值的特徵,來可以極大的減少特徵數量。但是通過神經網絡,可以利用CNN自動來實現對原始圖像特徵的提取,從而不依賴於人的經驗,實現最終的分類。但是神經網絡的學習依賴於數據量,數據量越大,模型效果越好。


分享到:


相關文章: