前言
此為本人學習《百面機器學習——算法工程師帶你去面試》的學習筆記
第一章 特征工程
特征工程,是對原始數據進行一系列工程處理,將其提煉為特征,作為輸入供算法和模型使用。從本質上講,特征工程是一個表示和展現數據的過程。在實際工作中,特征工程旨在去除原始數據的雜質和冗余,設計更高效的特征以刻畫求解的問題和預測模型之間的關系。
兩種常用的數據類型
1、結構化數據。可以看做關系型數據庫的一張表,每列都有清晰的定義,包含了數值型、類別型兩種基本類型,每一行數據表示一個樣本的信息。
2、非結構化數據。主要包括文本、圖像、音頻、視頻數據,其包含的信息無法用一個簡單的數值表示,也沒有清晰的類別定義,并且每條數據的大小各不相同。
01 特征歸一化
1、目的:消除數據特征之間的量綱影響,使得不同指標之間具有可比性
2、常用的兩種歸一化方法
a. 線性函數歸一化(Min-Max Scaling)。對原始數據映射到[0, 1]的范圍。
? ??????????????????????????????????
b. 零均值歸一化(Z-Score Normalization)。將原始數據映射到均值為0、標準差為1的分布上。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????? ? ? ? ? ?
3、在使用梯度下降進行求解的過程中,數據歸一化主要對梯度下降收斂速度產生的影響,將各個特征映射到同一區間內,使得各個特征的更新速度一樣,可以更快地通過梯度下降找到最優解
4、實際應用中,通過梯度下降法求解的模型通常是需要歸一化的,包括線性回歸、邏輯回歸、支持向量機、神經網絡等模型。但對于決策樹模型并不適用,如C4.5在結點分裂時主要依據數據集D光宇特征x的信息增益比,而信息增益比和特征是否歸一化無關。
02 類別型特征
1、類別型特征指的是例如性別(男、女)等只在有限選項內取值的特征。通常是字符串形式,除了決策樹等少數模型可以直接處理字符串形式的輸入,對于邏輯回歸、支持向量機等模型,類別型特征必須轉換為數值型特征才能正確工作。
2、處理類別型特征方法:
a. 序號編碼:通常用于處理類別間具有大小關系的數據。如成績可分為低、中、高三擋,分別用1、2、3表示,轉換后依然保留大小關系
b. 獨熱編碼:通常用于處理類別間不具有大小關系的特征。如血型,一共有4個取值(A型 B型 AB型 O型),one-hot編碼會將其變成一個4位的稀疏向量,A型(1,0,0,0) B型(0,1,0,0)...
one-hot編碼注意點:當類別取值較多時,用one-hot就會非常稀疏,可以使用稀疏向量節省空間。高維度特征會帶來幾方面的問題,(1)k近鄰算法中,高維空間下兩點之間的距離很難得到有效的衡量.(2)邏輯回歸中參數的數量會隨維度的增高而增高,容易引起過擬合問題。(3) 通常只有部分維度對分類、預測有幫助,因此可以考慮配合特征選擇來降低維度。
c. 二進制編碼:和one-hot編碼思想類似,本質上是利用二進制對ID進行哈希映射,最終得到0/1特征向量,且比one-hot編碼節省空間。
03 高維組合特征的處理
1、目的:提高復雜關系的擬合能力。
2、高階組合特征是指把一階離散特征兩兩組合,構成高階特和特征。
例如將語言(中文、英文);劇集類型(電影、電視劇)兩個一階離散特征組合為二階特征,則有中文電影、中文電視劇、英文電影、英文電視劇四種類型。假設數據的特征向量X = (x1, x2, x3 ,..., xk),則有
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
則w的維度是2X2=4
3、當引入ID類型的特征時,通常需要降維。如推薦問題,通常有如下特征:
如上表所示,則要學習的參數規模使m x n,參數規模太大,一種行之有效的方法是經用戶和物品分別用k維的低維向量表示(k遠小于m和n),則參數的規模變為m x k+n x k。實際是矩陣分解
04 組合特征
實際問題中,簡單的兩兩組合容易存在參數過多、過擬合等問題。本節提供一種基于決策樹的特征組合尋找方法。
以點擊預測為例,假設原始輸入特征包含年齡、性別、用戶類型(試用期、付費)、物品類型(護膚、食品等)4個方面的信息,并且根據原始輸入和標簽(點擊/未點擊)構造了決策樹,如圖1.2
每一條從根節點到葉節點的路徑都可以看成一種特征組合的方式。根據上述決策樹可有4條路徑,針對表1.2 可得到以下組合方式,第一個樣本的組合特征可以編碼為(1, 1, 0, 0),第二個為(0, 0, 1, 1)
05 文本表示模型
1、詞袋模型和N-gram模型
詞袋模型是最基礎的文本表示模型。將每篇文章看成一袋子詞,忽略每個次出現的順序。具體來說,就是將整段文本以詞為單位切分開,每篇文章可以表示成一個長向量,向量中的每一維代表一個單詞,而該維對應的權重反映了這個詞在原文章的重要程度。常用 TF-IDF 來計算權重,公式為
????????????????????????????????????TF-IDF(t,d)=TF(t,d)×IDF(t) ;
TF(t,d) 為單詞?t?在文檔?d?中出現的頻率,IDF(t) 是逆文檔頻率,用來衡量單詞?t?對表達語義所起的重要性,表示為
? ??????????????????? ? ? ? ? ? ? ? (1.6)
N-gram模型是指某些單詞組不能拆開,可以將連續出現的n個詞組成詞組(N-gram)作為一個單獨的特征放入向量表示,構成N-gram模型
注意:同一個詞可能有多種詞性變化,卻具有相似的含義。在實際應用中,一般會對單詞進行詞干抽取(Word Stemming)處理,即將不同詞性的單詞統一成為同一詞干的形式。
2、主題模型
詞袋模型和N-gram模型無法識別兩個不同的詞或詞組具有相同的主題,主題模型可以將具有相同主題的詞或詞組映射到同一維度上,映射到的這一維度表示某個主題。主題模型是一種特殊的概率圖模型,后面第六章第五節會講。
3、詞嵌入
詞嵌入是一類將詞向量化的模型的統稱,核心思想是將每個詞都映射成低維空間(通常?K=50~300 維)上的一個稠密向量(Dense Vector)。K?維空間的每一維也可以看作一個隱含的主題,只不過不像主題模型中的主題那樣直觀。
06 Word2Vec
1、谷歌 2013 年提出的 Word2Vec 是目前最常用的詞嵌入模型之一。Word2Vec 實際是一種淺層的神經網絡模型,它有兩種網絡結構,分別是 CBOW(Continues Bag of Words)和 Skip-gram。CBOW 的目標是根據上下文出現的詞語來預測當前詞的生成概率,?Skip-gram 是根據當前詞來預測上下文中各詞的生成概率。網絡結構如下:
其中?w(t) 是當前所關注的詞,w(t?2)、w(t?1)、w(t+1)、w(t+2) 是上下文中出現的詞。這里前后滑動窗口大小均設為 2。
2、CBOW和Skip-gram均可表示成由 輸入層、映射層和輸出層組成的神經網絡
輸入層由one-hot編碼表示,即當詞匯表中的單詞總數是N,則輸入層的one-hot編碼維度也是N
映射層(隱藏層)中有K個隱藏單元,其取值由N為輸入向量以及連接輸入和隱藏單元之間的NxK維權重矩陣計算得到。
注意:CBOW中還需要將各個輸入詞所計算出的隱含單元求和
輸出層向量的值可以通過隱藏層向量(K維),以及隱藏層和輸出層之間的KxN維權重矩陣計算得到。輸出層也是一個N維向量,每維與詞匯表中的一個單詞對應。但是這里的輸出量并不能保證所有維度加起來為1(one-hot編碼加起來就為1),要通過Softmax激活函數歸一化。Softmax激活函數的定義為
? ??????????????????????????? ? ? ? ? ? ? ? (1.7)
訓練目標是使得語料庫中所有單詞的整體生成概率最大化。學習權重可以用反向傳播算法實現,每次迭代時將權重沿梯度方向進一步更新。但是由于Softmax激活函數中存在歸一化項的緣故,推導出來的迭代公式需要需要對詞匯表中所有單詞進行遍歷,使得每次迭代過程非常緩慢,可使用?Hierarchical Softmax 和 Negative Sampling 兩種方法改進。
得到訓練出來的歌詞對應的向量:訓練得到維度為NxK和KxN的兩個權重矩陣,可以選擇其中任意一個作為N個詞的K維向量表示
3、Word2Vec和LDA的區別和聯系
LDA利用文檔中單詞的共現關系對單詞按主題聚類,可以理解為對“文檔-單詞”矩陣進行分解,得到“文檔-主題”和“主題-單詞”兩個概率分布。但Word2Vec其實是對“上下文-單詞”矩陣進行學習,其中上下文由周圍的幾個單詞組成,更多的融入了上下文共現特性。
主題模型通過一定的結構調整可以基于“上下文-單詞”矩陣進行主題推理。詞嵌入方法也可以根據“文檔-單詞”矩陣學習出詞的隱含向量表示。
主題模型和詞嵌入兩類方法的最大不同在于模型本身。主題模型是一種基于概率圖模型的生成式模型,其似然函數可以寫成若干條件概率連乘,其中包括需要推測的隱含變量(即主題);而詞嵌入模型一般表達為神經網絡的形式,似然函數定義在網絡的輸出之上,需要通過學習網絡的權重以得到單詞的稠密向量表示。
07 圖像數據不足時的處理方式
1、一個模型的信息來源一般來自兩個方面:一是訓練數據中蘊含的信息;二是在模型的形成過程中(包括構造、學習、推理等),人們提供的先驗信息。
2、訓練數據不足時,為了保證模型效果則需要更多先驗信息。先驗信息可以作用在模型上,如讓模型采用特定的內在結構、條件假設或添加其他一些約束條件;先驗信息也可以直接作用在數據集上,即更具特定的先驗假設去調整、變換或擴展訓練數據,讓其展現更多的、更有用的信息。
3、圖像分類任務中,馴良數據不足帶來的問題主要表現在過擬合方面,即模型在訓練樣本上的效果可能不錯,但是在測試集上的泛化效果不佳。對應的處理方法大致可分為兩類:
基于模型的方法,主要采用降低過擬合風險的措施,包括簡化模型(如將非線性模型假話為線性模型)、添加約束項以縮小假設空間(如L1/L2正則)、集成學習、Droupout超參數等
基于數據的方法,主要通過數據擴充(Data Augmentation),即根據一些先驗知識,在保持特定信息的前提下,對原始數據進行適當變換以達到擴充數據集的效果
具體到圖像分類任務中,在保持圖像類別不變的前提下,可以對訓練集中每幅圖像進行以下變換 (1) 隨機旋轉、平移、縮放、裁剪、填充、左右翻轉等,對應著同一個目標在不同角度的觀察結果;(2) 對圖像中的像素添加噪聲擾動,比如椒鹽噪聲、高斯白噪聲等;(3) 顏色變換;(4) 改變圖像的亮度、其吸毒、對比度、銳度等。
4、除了之間在圖像空間進行變換,還可以對圖像進行特征提取,然后在圖像的特征空間內進行變換,利用一些通用的數據擴充或上采樣技術,如SMOTE(Synthetic Minority Over-sampling Technique)之類的啟發式的變換方法。此外還可以通過如GAN等生成模型合成新樣本,或者借助已有的其他模型或數據進行遷移學習。
例如,對于大部分圖像分類任務,并不需要從頭開始訓練模型,而是借用一個在大規模數據集上預訓練好的通用模型,并在針對目標任務的小數據集上進行微調(fine-tune),這種微調操作就可以看成是一種簡單的遷移學習。