【百面】01_特徵工程
《百面機器學習》這本書真的是太好了,忍不住要記錄一下學習過程中的所思所想。文章內容僅做適當摘取和記錄,如有所需,請購書!另外,本文中所摘抄的內容,僅是個人認為比較重要的地方(實際上是想學習的內容)。比如NLP有關的東西,實在是打不起興趣,捨去了…
機器學習是要和數據打交道,數據如何表徵?如何將數據利用起來?要知道,自然而然得到的數據,基本上都是散亂不整的。「特徵工程」要做的,就是「以整易亂」將散亂的數據包裝成『好處理』的樣子。文中講到「特徵工程」,顧名思義是對原始數據進行一系列工程處理,將其提煉為特徵,作為輸入供算法和模型使用。這就很直接了,「特徵工程」就是一個表示和展示數據的過程。圍繞「特徵工程」,有以下問題需要了解。
1.為什麼需要對數值類型的特徵做歸一化?
是什麼?首先要知道什麼是特徵歸一化,數值類型的特徵做歸一化就是將所有的特徵都統一到一個大致相同的數值區間內。
為什麼?為了消除數據特徵之間的量綱影響,使得不同指標之間具有可比性。這裡直接使用書本中的例子,分析一個人的身高和體重對健康的影響,如果使用米(m)和千克(kg)作為單位,那麼身高特徵會在1.6~1.8m的數值範圍內,體重特徵會在50~100kg的範圍內,分析出來的結果顯然會傾向於數值差別比較大的體重特徵。怎麼理解呢?如果每個特徵不進行歸一化,50是不是要比1.8在直觀的數值上大的多?50這個元素比1.8大這麼多,能說明體重50kg的重要性要比身高1.8m的重要性大嗎?不能!因為這兩個指標沒有可比性!那麼,能不能把每一維特徵同等看待呢?從而消除特徵間單位和尺度的差異。這是可以做到的,類似向量進行單位化,每一維特徵,把單位和尺度的影響抹掉就好了(數學操作)。大家都進行歸一化,都到[0,1]這個賽道上來比較。
怎麼做?
(1)線性函數歸一化
(2)零均值歸一化
很多文章用隨機梯度下降的實例來說明歸一化的重要性,又沒人做實驗。單純從數學知識來解釋,我目前理解不了。只要初值選的好,更窄的地方不是更容易到達最優解嗎。
2.在對數據進行預處理時,應該怎樣處理類別型特徵?
是什麼?類別型特徵(Categorical Feature)主要是指性別(男、女)、血型(A、B、AB、O)等只在有限選項內取值的特徵。
為什麼?類別型特徵原始輸入通常是字符串形式,除了決策樹等少數模型能直接處理字符串形式的輸入,對於邏輯回歸、支持向量機等模型來說,類別型特徵必須經過處理轉換成數值型特徵才能正確工作。
怎麼做?
(1)序號編碼,通常用於處理類別間具有大小關係的數據,比如成績。
(2)獨熱編碼,通常用於處理類別間不具有大小關係的特徵,比如血型。
(3)二進制編碼,先用序號編碼給每個類別賦予一個類別ID, 然後將類別ID對應的二進制編碼作為結果。二進制編碼本質上是利用二進制對ID進行哈希映射,最終得到0/1特徵向量,且維數少於獨熱編碼,節省了存儲空間。
3.什麼是組合特徵?怎樣有效地找到組合特徵?如何處理高維組合特徵?
是什麼?為了提高複雜關係的擬合能力,在特徵工程中經常會把一階離散特徵兩兩組合,構成高階組合特徵。說白了就是把相關的幾個特徵組合成一個特徵項。
為什麼?為了提高擬合能力。這裡怎麼理解呢?在我的理解里,「擬合能力」對應着模型的「複雜程度」,在神經網絡中模型越複雜,該模型的擬合能力就越高,同時容易出現過擬合。特徵進行組合,相當於增加了特徵。直觀上,需要擬合的特徵參數增多了。並且,人為先驗的對特徵進行組合,相當於給特徵與特徵賦予了強關聯關係(表1.2,表1.3不懂)。另外,在很多實際問題中,我們常常需要面臨多種高維特徵,如果簡單對特徵進行兩兩組合,會存在參數過多,過擬合等問題。因此需要一種有效的方式對特徵進行組合。
怎麼做?
(1)怎樣有效地尋找組合特徵?文中給出了基於決策樹地特徵組合尋找方式,說實話,這裡沒有看懂作者的意思。按照我自己的理解,尋找有效特徵,可以通過組合特徵所具有的信息量來作為判斷依據。信息增益也好,基尼指數也好,尋找有效特徵的過程,就是一個判斷組合特徵信息量的過程。
(2)如何處理高維組合特徵?高維->低維,SVD降維就好了。
4.有哪些文本表示模型?
(1)詞袋模型和N-gram模型。將每篇文章看成一袋子詞,並忽略每個詞出現的順序。具體地說,就是將整段文本以詞為單位切分開,然後每篇文章可以表示成一個長向量,向量中的每一維代表一個單詞,而該維對應的權重則反映了這個詞在原文章中的重要程度。通常,可以將連續出現的n個詞(n≤N)組成的詞組(N-gram)也作為一個單獨的特徵放到向量表示中去,構成N-gram模型。
(2)主題模型。主題模型用於從文本庫中發現有代表性的主題(得到每個主題上面詞的分佈特性),並且能夠計算出每篇文章的主題分佈。《統計學習方法第二版》書中LSA和PLSA好像是做這個的。
(3)詞嵌入和深度學習模型。詞嵌入是一類將詞向量化的模型的統稱,核心思想是將每個詞都映射成低維空間(通常K=50~300維)上的一個稠密向量(Dense Vector)。K維空間的每一維也可以看作一個隱含的主題,只不過不像主題模型中的主題那樣直觀。
5.什麼是Word2Vec?
谷歌2013年提出的Word2Vec是目前最常用的詞嵌入模型之一。Word2Vec實際是一種淺層的神經網絡模型,它有兩種網絡結構,分別是CBOW(Continues Bag of Words)和Skip-gram。感興趣的需要深入了解。
6.在圖像分類任務中,訓練數據不足會帶來什麼問題?如何緩解數據量不足帶來的問題?
該問題作者首先給出了一個很好的觀點,「信息的來源」。
一個模型所能提供的信息一般來源於兩個方面, 一是訓練數據中蘊含的信息;二是在模型的形成過程中(包括構造、 學習、 推理等),人們提供的先驗信息。當訓練數據不足時,說明模型從原始數據中獲取的信息比較少,這種情況下要想保證模型的效果,就需要更多先驗信息。先驗信息可以作用在模型上,例如讓模型採用特定的內在結構、條件假設或添加其他一些約束條件;先驗信息也可以直接施加在數據集上,即根據特定的先驗假設去調整、變換或擴展訓練數據,讓其展現出更多的、更有用的信息,以利於後續模型的訓練和學習。
具體到圖像分類任務上,訓練數據不足帶來的問題主要表現在過擬合上,也就是訓練效果好,測試效果差。
解決過擬合一般有兩種方法:一是基於模型的方法,採取降低過擬合風險的措施,如簡化模型(非線性模型簡化為線性模型)、添加懲罰項以縮小參數假設空間(L1/L2正則化)、集成學習、DropOut等;二是基於數據的方法,進行數據擴充,即根據一些先驗知識,在保持特定信息的前提下,對原始數據進行適當變換以達到擴充數據集的效果。
具體到圖像分類任務上,如何緩解數據量不足帶來的問題?
(1)進行數據增強。
①變換觀察角度類。在一定程度內,進行隨機旋轉、平移、縮放、裁剪、填充、左右翻轉等。
②噪聲擾動類。對圖像中的像素添加噪聲擾動,比如高斯噪聲等。
③顏色變換類。如在圖像的RGB顏色空間上進行主成分分析,對主成分變量添加增量,改變整體顏色。
④圖像顯示類。改變圖像的亮度、清晰度、對比度、銳度等。
(2)除了直接在圖像空間進行變換之外,還可以對圖像進行特徵提取,然後在特徵空間內進行變換,利用如SMOTE算法等進行數據擴充。
(3)另外,現在非常火的GANs,可以利用生成器來生成一些訓練樣本。
(4)針對小樣本的弱監督學習模型也是可以考慮的一個解決方法。
(5)利用預訓練網絡進行遷移學習,再使用自身數據進行微調,也不失為一種選擇。