葫蘆書第一章——特征工程

葫蘆書是機器學習崗位面試的必讀書,第一遍讀,就當作對自己這四個月以來入門機器學習的知識測驗,順便查漏補缺。葫蘆書比較好的一點是它的寫作是通過問答方式進行的,就像一場模擬面試一樣,而這些問題可能是我自學相關(guān)知識的時候沒有細想過的,通過這些問題我也可以發(fā)現(xiàn)自己的知識盲區(qū),再查閱相關(guān)資料。

閑言少敘,開始啦。

特征工程,顧名思義,是對原始數(shù)據(jù)進行一系列工程處理,將其提煉為特征,作為輸入供算法和模型使用。從本質(zhì)上來講,特征工程是一個表示和展現(xiàn)數(shù)據(jù)的過程。在實際工作中,特征工程旨在去除原始數(shù)據(jù)中的雜質(zhì)和冗余,設(shè)計更高效的特征以刻畫求解的問題與預測模型之間的關(guān)系。

1、特征歸一化

為了消除數(shù)據(jù)特征之間的量綱影響,我們需要對特征進行歸一化處理,使得不同指標之間具有可比性。

1.1、為什么需要對數(shù)值類型的特征做歸一化?

  • 我的回答

1、消除數(shù)據(jù)特征之間的量綱影響。

2、運用隨機梯度下降法等優(yōu)化方法進行參數(shù)學習的時候,由于學習率通常對各個特征都是相同的,因此若各特征的數(shù)值范圍相差太大會導致某些特征的參數(shù)學習速度很慢。歸一化可以很好地解決這一問題。

  • 參考答案

實際上就是我上面說到的第2點,通過例子做了詳細解釋。

假設(shè)有兩種數(shù)值型特征,x_1的取值范圍為[0, 10],x_2的取值范圍為[0, 3],于是可以構(gòu)造一個目標函數(shù)符合圖(a)中的等值圖。

在學習速率相同的情況下,x_1的更新速度會大于x_2,需要較多的迭代才能找到最優(yōu)解。如果將x_1x_2歸一化到相同的數(shù)值區(qū)間后,優(yōu)化目標的等值圖會變成圖(b)中的圓形,x_1x_2的更新速度變得更為一致,容易更快地通過梯度下降找到最優(yōu)解。

2、類別型特征

類別型特征(Categorical Feature)主要是指性別(男、女)、血型(A、B、AB、O)等只在有限選項內(nèi)取值的特征。

2.1、在對數(shù)據(jù)進行預處理時,應(yīng)該怎樣處理類別型特征?

  • 我的回答

1、用獨熱編碼(One-hot Encoding)表示,即建立一個n維向量,這里n是類別數(shù),樣本所屬類別對應(yīng)位置為1,其它位置均為0。

2、把n個類別對應(yīng)到1\sim n來進行區(qū)分表示。

  • 參考答案

1、序號編碼(Ordinal Encoding),常用于處理類別間具有大小關(guān)系的數(shù)據(jù)。例如成績,可以分為低、中、高三檔,并且存在“高>中>低”的排序關(guān)系。高表示為3、中表示為2、低表示為1,轉(zhuǎn)換后依然保留了大小關(guān)系。

2、獨熱編碼(One-hot Encoding),通常用于處理類別間不具有大小關(guān)系的特征。對于類別取值較多的情況可以使用稀疏向量來節(jié)省空間,也可以考慮配合特征選擇來降低維度。

3、二進制編碼(Binary Encoding),二進制編碼主要分為兩步,先用序號編碼給每個類別賦予一個類別ID,然后將類別ID對應(yīng)的二進制編碼作為結(jié)果。二進制編碼本質(zhì)上是利用二進制對ID進行哈希映射,最終得到0/1特征向量,且維數(shù)少于獨熱編碼,節(jié)省了存儲空間。

二進制編碼和獨熱編碼對比如下,可以看到表示4個類別二進制編碼只需要3位而獨熱編碼需要4位。

3、組合特征

3.1、什么是組合特征?如何處理高維組合特征?

  • 我的回答

1、我理解的組合特征就是將一些原有特征進行組合形成的新的特征。

2、對于高維組合特征的處理,可以采用PCA、LDA等降維方法對特征進行降維。

  • 參考答案

1、為了提高復雜關(guān)系的擬合能力,在特征工程中經(jīng)常會把一階離散特征兩兩組合,構(gòu)成高階組合特征。

例如,表一是語言和類型對點擊的影響。為了提高擬合能力,語言和類型可以組成二階特征,表二是語言和類型的組合特征對點擊的影響 。

2、對于用戶和物品組成的二階特征,若用戶的數(shù)量為m 、物品的數(shù)量為n ,那么需要學習的參數(shù)的規(guī)模為m×n。 在互聯(lián)網(wǎng)環(huán)境下,用戶數(shù)量和物品數(shù)量都可以達到干萬量級,幾乎無法學習m×n規(guī)模的參數(shù) 。

在這種情況下,一種行之有效的方法是將用戶和物品分別用k維的低維向量表示(其中k<<m,k<<n),以邏輯回歸為例:

Y=sigmoid(\sum_i\sum_j w_{ij}<x_i,x_j>)

其中w_{ij}=x_i^{'}\cdot x_j^{'}x_i^{'}x_j^{'}分別表示x_ix_j對應(yīng)的低維向量,<x_i,x_j>表示x_ix_j的組合特征。這樣需要學習的參數(shù)的規(guī)模變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=m%5Ctimes%20k%2Bn%5Ctimes%20k" alt="m\times k+n\times k" mathimg="1">。這其實等價于矩陣分解,即X_{m\times n}=Y_{m\times k}Z_{k\times n}。

3.2、怎樣有效地找到組合特征?

問題解釋:很多實際問題中,我們常常需要面對多種高維特征 。 如果簡單地組合,依然會存在參數(shù)過多、過擬合等問題,而且并不是所有的特征組合都有意義 。 因此,需要一種有效的方法來幫助我們找到應(yīng)該對哪些特征進行組合。

  • 我的回答

觸及知識盲區(qū)了……

  • 參考答案

可以采用梯度提升決策樹來構(gòu)建新的組合特征,該方法的思想是每次都在之前構(gòu)建的決策樹的殘差上構(gòu)建下一棵決策樹 。

下圖中使用GBDT生成了兩棵樹,兩顆樹一共有五個葉子節(jié)點。我們將樣本X輸入到兩顆樹中,樣本X落在了第一棵樹的第二個葉子節(jié)點,第二顆樹的第一個葉子節(jié)點,于是我們便可以依次構(gòu)建一個五緯的特征向量,每一個緯度代表了一個葉子節(jié)點,樣本落在這個葉子節(jié)點上面的話那么值為1,沒有落在該葉子節(jié)點的話,那么值為0。于是對于該樣本,我們可以得到一個向量[0,1,0,1,0]作為該樣本的組合特征。

4、文本表示模型

4.1、有哪些文本表示模型?它們各有什么優(yōu)缺點?

  • 我的回答

還真沒特別關(guān)注過文本表示模型……印象里最簡單的表示方法是詞袋模型,即給一系列常用詞編號,然后用獨熱編碼的方式來表示一個文本,缺點就是表示向量稀疏以及忽略了詞之間的順序。優(yōu)點就是簡單。

  • 參考答案

1、詞袋模型N-gram模型

最基礎(chǔ)的文本表示模型是詞袋模型。顧名思義,就是將每篇文章看成一袋子詞,并忽略詞出現(xiàn)的順序 。具體地說,就是將整段文本以詞為單位切分,然后每篇文章可以表示成一個長向量,向量中的每一維代表一個單詞,而該維對應(yīng)的權(quán)重則反映了這個詞在原文章中的重要程度。常用TF-IDF(Term Frequency–Inverse Document Frequency,詞頻-逆文本頻率)來計算。

將文章進行單詞級別的劃分有時候并不是一種好的做法,比如英文中的natural language processing,將這3個詞拆分開來,所表達的含義與三個詞連續(xù)出現(xiàn)時大相徑庭 。 通常,可以將連續(xù)出現(xiàn)的n個詞組成的詞組( N-gram )也作為一個單獨的特征放到向量表示中去,構(gòu)成N-gram模型

2、主題模型

基于詞袋模型或N-gram模型的文本表示模型有一個明顯的缺陷,就是無法識別出兩個不同的詞或詞組具有相同的主題。 因此需要一種技術(shù)能夠?qū)⒕哂邢嗤黝}的詞或詞組映射到同一維度上去,于是產(chǎn)生了主題模型 。

我們?nèi)绾闻卸▋蓚€不同的詞具有相同的主題呢?這兩個詞可能有更高的概率同時出現(xiàn)在同一篇文檔中, 換句話說 , 給定某一主題,這兩個詞的產(chǎn)生概率都是比較高的,而另一些不太相關(guān)的詞匯產(chǎn)生的概率則是較低的 。假設(shè)有K個主題,我們就把任意文章表示威一個K維的主題向量 ,其中向量的每維代表一個主題,權(quán)重代表這篇文章屬于這個特定主題的概率 。 主題模型所解決的事情就是從文本庫中發(fā)現(xiàn)有代表性的主題(得到每個主題上面詞的分布) , 并且計算出每篇文章對應(yīng)著哪些主題

3、詞嵌入與深度學習模型

詞嵌入是一類將詞向量化的模型的統(tǒng)稱,核心思想是將每個詞都映射成低維空間(通常K=50~300維)上的一個稠密向量(Dense Vector)。K維空間的每一維也可以看作一個隱含的主題,只不過不像主題模型中的主題那樣直觀 。

由于詞嵌入將每個詞映射成一個K維的向量, 如果一篇文檔有N個詞,就可以用一個N×K維的矩陣來表示這篇文擋,但是這樣的表示過于底層 。 在實際應(yīng)用中,如果僅僅把這個矩陣作為原文本的表示特征輸入到機器學習模型中,通常很難得到令人滿意的結(jié)果

在傳統(tǒng)的淺層機器學習模型中,一個好的特征工程往往可以帶來算法效果的顯著提升 。 而深度學習模型正好為我們提供了一種自動地進行特征工程的方式,模型中的每個隱層都可以認為對應(yīng)著不同抽象層次的特征。

卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)在文本表示中取得了很好的效果,主要是由于它們能夠更好地對文本進行建模,抽取出一些高層的語義特征。與全連接的網(wǎng)絡(luò)結(jié)向相比 ,卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)一方面很好地抓住了文本的特性,另一方面又減少了網(wǎng)絡(luò)中待學習的參數(shù),提高了訓練速度,并且降低了過擬合的風險

5、Word2Vec

谷歌2013年提出的Word2Vec是目前最常用的詞嵌入模型之一 。Word2Vec實際是一種淺層的神經(jīng)網(wǎng)絡(luò)模型, 有兩種網(wǎng)絡(luò)結(jié)構(gòu),分別是CBOW(Continues Bag of Words)和Skip-gram

5.1、Word2Vec是如何工作的?它和LDA有什么區(qū)別和聯(lián)系?

  • 我的回答

再次觸及知識盲區(qū)……果然只關(guān)注機器學習基本模型是不行的啊,還要留意各應(yīng)用領(lǐng)域的經(jīng)典模型才可以……現(xiàn)場學一下再來回答這個問題吧……

關(guān)于Word2Vec的思路這篇文章講解的很清楚了:

大部分的有監(jiān)督機器學習模型,都可以歸結(jié)為:f(x)\rightarrow y。這里的數(shù)學模型f(比如神經(jīng)網(wǎng)絡(luò)、SVM)只接受數(shù)值型輸入。NLP里的詞語,是人類的抽象總結(jié),是符號形式的(比如中文、英文、拉丁文等等),所以需要把他們轉(zhuǎn)換成數(shù)值形式,或者說嵌入到一個數(shù)學空間里,這種嵌入方式,就叫詞嵌入(word embedding),Word2vec就是詞嵌入的一種。

在NLP中,把x看做一個句子里的一個詞語,y是這個詞語的上下文詞語,那么這里的f,便是NLP中經(jīng)常出現(xiàn)的語言模型(language model),這個模型的目的,就是判斷(x,y)這個樣本是否符合自然語言的法則。

Word2vec正是來源于這個思想,但它的最終目的,不是要把f訓練得多么完美,而是只關(guān)心模型訓練完后的副產(chǎn)物——模型參數(shù)(這里特指神經(jīng)網(wǎng)絡(luò)的權(quán)重),并將這些參數(shù),作為輸入x的某種向量化的表示,這個向量便叫做——詞向量。

Skip-gram和CBOW模型

  • 輸入一個詞,來預測它的上下文,這個模型叫做Skip-gram模型。
  • 輸入一個詞的上下文,來預測這個詞本身,則是CBOW模型。

我們先來看個最簡單的例子:用當前詞x預測它的下一個詞y。

Skip-gram的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,x就是one-hot encoder形式的輸入,輸出y對應(yīng)下一個詞是這V個詞的概率,我們希望輸出跟真實的y的one-hot encoder一樣。

注意,這里隱層的激活函數(shù)其實是線性的,相當于沒做任何處理(這也是Word2vec模型的獨到之處),我們訓練這個神經(jīng)網(wǎng)絡(luò),最后得到神經(jīng)網(wǎng)絡(luò)的權(quán)重。假設(shè)輸入x的one-hot encoder為[1,0,0,…,0],則在輸入層到隱含層的權(quán)重里,只有對應(yīng)1這個位置的權(quán)重被激活,這些權(quán)重的個數(shù),跟隱含層節(jié)點數(shù)是一致的,從而這些權(quán)重組成一個向量v_x來表示x,因為每個詞的one-hot encoder中1的位置不同,所以,這個向量v_x可以用來唯一表示x。詞向量v_x的維度(與隱含層節(jié)點數(shù)一致)一般情況下要遠遠小于詞的總數(shù)V的大小,所以Word2vec本質(zhì)上是一種降維操作——把詞語從one-hot encoder形式的表示降維到Word2vec形式的表示。

上面討論的是最簡單情形,即y只有一個詞,當y有多個詞時,網(wǎng)絡(luò)結(jié)構(gòu)如下:

這可以看成是單個x \rightarrow 單個y模型的并聯(lián),cost function是單個cost function的累加(取log后)。

Skip-gram是預測一個詞的上下文,而CBOW是用上下文預測這個詞

網(wǎng)絡(luò)結(jié)構(gòu)如下:

跟Skip-gram 的模型并聯(lián)不同,這里是輸入變成了多個單詞,所以要對輸入進行處理(一般是求和然后平均),輸出的cost function不變。

LDA算法內(nèi)容有些多,簡單來說,LDA是一種主題模型,它可以將文檔集中每篇文檔的主題以概率分布的形式給出,從而通過分析一些文檔,抽取出它們的主題(分布)后,便可以根據(jù)主題(分布)進行主題聚類或文本分類。LDA是一種典型的詞袋模型。關(guān)于LDA算法的相關(guān)學習記錄另外給出。

  • 參考答案

1、CBOW的目標是根據(jù)上下文出現(xiàn)的詞語來預測當前詞的生成概率,如圖(a)所示;而Skip-gram是根據(jù)當前詞來預測上下文中各詞的生成概率, 如圖(b)所示。

其中w(t)是當前所關(guān)注的詞,w(t-2),w(t-1),w(t+1),w(t+2)是上下文中出現(xiàn)的詞。這里前后滑動窗口皆設(shè)置為2。

訓練得到維度為N× KK×N的兩個權(quán)重矩陣之后,可以選擇其中一個作為N個詞的K維向量表示。

2、Word2Vec與LDA的區(qū)別和聯(lián)系。首先,LDA是利用文檔中單詞的共現(xiàn)關(guān)系來對單詞按主題分類,也可以理解為對“文檔—單詞”矩陣進行分解得到“文檔—主題”和“主題—單詞”兩個概率分布。而Word2Vec其實是對“上下文—單詞”矩陣進行學習,其中上下文由周圍的幾個單詞組成,由此得到的詞向量表示更多地融入了上下文共現(xiàn)的特征 。 也就是說如果兩個單詞所對應(yīng)的Word2Vec向量相似度較高,那么它們很可能經(jīng)常在同樣的上下文中出現(xiàn)。需要說明的是,上述分析的是LDA與Word2Vec的不同,不應(yīng)該作為主題模型和詞嵌入兩類方法的主要差異。主題模型通過一定的結(jié)構(gòu)調(diào)整可以基于“上下文—主要詞”矩陣進行主題推理 。 同樣地,詞嵌入方法也可以根據(jù)“文檔—單詞”矩陣學習出詞的隱含向量表示。主題模型和詞嵌入兩類方法最大的不同其實在于模型本身,主題模型是一種基于概率圖模型的生成式模型,其似然函數(shù)可以寫成若干條件概率連乘的形式,其中包括需要推測的隱含變量( 即主題);而詞嵌入模型一般表達為神經(jīng)網(wǎng)絡(luò)的形式,似然函數(shù)定義在網(wǎng)絡(luò)的輸出之上,需要通過學習網(wǎng)絡(luò)的權(quán)重以得到單詞的稠密向量表示。

6、圖像數(shù)據(jù)不足時的處理方法

在機器學習中,絕大部分模型都需要大量的數(shù)據(jù)進行訓練和學習(包括有監(jiān)督學習和無監(jiān)督學習) 然而在實際應(yīng)用中經(jīng)常會遇到訓練數(shù)據(jù)不足的問題。 比如圖像分類,作為計算機視覺最基本的任務(wù)之一,其目標是將每幅圖像劃分到指定類別集合中的一個或多個類別中。如果訓練樣本比較少,該如何處理呢?

6.1、在圖像分類任務(wù)中,訓練數(shù)據(jù)不足會帶來什么問題?如何緩解數(shù)據(jù)量不足帶來的問題?

  • 我的回答

1、訓練數(shù)據(jù)不足一方面會使得訓練集不能很好的代表整體的特征,另一方面會導致模型很容易過擬合。由于上述原因,最終模型在測試集上的表現(xiàn)應(yīng)該不會太好。

2、進行數(shù)據(jù)擴充,即基于當前訓練集中的樣本生成一些“新樣本”,例如我們可以對圖像進行翻轉(zhuǎn)平移等操作,或在圖像中加入一定的噪聲點。

  • 參考答案

一個模型所能提供的信息一般來源于兩個方面,一是訓練數(shù)據(jù)中蘊含的信息;二是在模型的形成過程中(包括構(gòu)造、學習、推理等)人們提供的先驗信息。當訓練數(shù)據(jù)不足時,說明模型從原始數(shù)據(jù)中獲取的信息比較少,這種情況下要想保證模型的效果,就需要更多先驗信息。先驗信息可以作用在模型上,例如讓模型采用特定的內(nèi)在結(jié)構(gòu)、條件假設(shè)或添加其他一些約束條件;先驗信息也可以直接施加在數(shù)據(jù)集上,根據(jù)特定的先驗假設(shè)去調(diào)整、變換或擴展訓練數(shù)據(jù),讓其展現(xiàn)出更多的、更有用的信息,以利于后續(xù)模型的訓練和學習。

1、訓練數(shù)據(jù)不足帶來的問題主要表現(xiàn)在過擬合方面,即模型在訓練樣本上的效果可能不錯但在測試集上的泛化效果不佳。

2、根據(jù)上述討論,對應(yīng)的處理方法大致也可以分兩類:

一是基于模型的方法,主要是采用降低過擬合風險的措施,包括簡化模型(如將非線性模型簡化為線性模型)、添加約束以縮小假設(shè)空間(如正則化)、集成學習、 Dropout超參數(shù)等;

二是基于數(shù)據(jù)的方法,主要通過數(shù)據(jù)擴充(Data Augmentation ),即根據(jù)一些先驗知識,在保持特定信息的前提下對原始數(shù)據(jù)進行適當變換以達到擴充數(shù)據(jù)集的效果。具體到圖像分類任務(wù)中,在保持圖像類別不變的前提下,可以對訓練集中的每幅圖像進行以下變換:

  • 一定程度內(nèi)的隨機旋轉(zhuǎn)、平移、縮版、裁剪、填充、左右翻轉(zhuǎn)等,這些變換對應(yīng)著同 一個目標在不同角度的觀察結(jié)果。

  • 對圖像中的像素添加躁聲擾動,比如椒鹽噪聲、高斯白噪聲等。

  • 顏色變換。例如,在圖像的RGB顏色空間上進行主成分分析,得到3個主成分的特征向量p_1,p_2,p_3及其對應(yīng)的特征值,然后在每個像素的RGB值上添加增量[p_1,p_2,p_3]\cdot[\alpha_1 \lambda_1,\alpha_2 \lambda_2,\alpha_3 \lambda_3]^T,其中\alpha_1,\alpha_2,\alpha_3是均值為0方差較小的高斯分布隨機數(shù)。

  • 改變圖像的亮度、清晰度、對比度、銳度等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容