1. 程式人生 > >你想知道的特徵工程,機器學習優化方法都在這了!收藏!

你想知道的特徵工程,機器學習優化方法都在這了!收藏!

1. 特徵工程有哪些?

特徵工程,顧名思義,是對原始資料進行一系列工程處理,將其提煉為特徵,作為輸入供演算法和模型使用。從本質上來講,特徵工程是一個表示和展現數 據的過程。在實際工作中,特徵工程旨在去除原始資料中的雜質和冗餘,設計更高效的特徵以刻畫求解的問題與預測模型之間的關係。

主要討論以下兩種常用的資料型別。

  1. 結構化資料。結構化資料型別可以看作關係型資料庫的一張表,每列都 有清晰的定義,包含了數值型、類別型兩種基本型別;每一行資料表示一個樣本 的資訊。
  2. 非結構化資料。非結構化資料主要包括文字、影象、音訊、視訊資料, 其包含的資訊無法用一個簡單的數值表示,也沒有清晰的類別定義,並且每條數 據的大小各不相同。

1.1 特徵歸一化

為了消除資料特徵之間的量綱影響,我們需要對特徵進行歸一化處理,使得 不同指標之間具有可比性。例如,分析一個人的身高和體重對健康的影響,如果 使用米(m)和千克(kg)作為單位,那麼身高特徵會在1.6~1.8m的數值範圍 內,體重特徵會在50~100kg的範圍內,分析出來的結果顯然會傾向於數值差別比 較大的體重特徵。想要得到更為準確的結果,就需要進行特徵歸一化 (Normalization)處理,使各指標處於同一數值量級,以便進行分析。

對數值型別的特徵做歸一化可以將所有的特徵都統一到一個大致相同的數值 區間內。最常用的方法主要有以下兩種。

  1. 線性函式歸一化(Min-Max Scaling)。它對原始資料進行線性變換,使 結果對映到[0, 1]的範圍,實現對原始資料的等比縮放。歸一化公式如下,其中X

    為原始資料,\(X_{max}、X_{min}\) 分別為資料最大值和最小值。

    \[X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}}\]

  2. 零均值歸一化(Z-Score Normalization)。它會將原始資料對映到均值為 0、標準差為1的分佈上。具體來說,假設原始特徵的均值為μ、標準差為σ,那麼 歸一化公式定義為

    \[z=\frac{x-u}{\sigma}\]

優點:訓練資料歸一化後,容易更快地通過梯度下降找 到最優解。

當然,資料歸一化並不是萬能的。在實際應用中,通過梯度下降法求解的模 型通常是需要歸一化的,包括線性迴歸、邏輯迴歸、支援向量機、神經網路等模 型。但對於決策樹模型則並不適用。

1.2 類別型特徵

類別型特徵(Categorical Feature)主要是指性別(男、女)、血型(A、B、 AB、O)等只在有限選項內取值的特徵。類別型特徵原始輸入通常是字串形 式,除了決策樹等少數模型能直接處理字串形式的輸入,對於邏輯迴歸、支援 向量機等模型來說,類別型特徵必須經過處理轉換成數值型特徵才能正確工作。

  1. 序號編碼

    序號編碼通常用於處理類別間具有大小關係的資料。例如成績,可以分為 低、中、高三檔,並且存在“高>中>低”的排序關係。序號編碼會按照大小關係對 類別型特徵賦予一個數值ID,例如高表示為3、中表示為2、低表示為1,轉換後依 然保留了大小關係。

  2. 獨熱編碼(one-hot)

    獨熱編碼通常用於處理類別間不具有大小關係的特徵。例如血型,一共有4個 取值(A型血、B型血、AB型血、O型血),獨熱編碼會把血型變成一個4維稀疏 向量,A型血表示為(1, 0, 0, 0),B型血表示為(0, 1, 0, 0),AB型表示為(0, 0, 1, 0),O型血表示為(0, 0, 0, 1)。對於類別取值較多的情況下使用獨熱編碼。

  3. 二進位制編碼

    二進位制編碼主要分為兩步,先用序號編碼給每個類別賦予一個類別ID,然後 將類別ID對應的二進位制編碼作為結果。以A、B、AB、O血型為例,下圖是二進位制編碼的過程。A型血的ID為1,二進位制表示為001;B型血的ID為2,二進位制表示為 010;以此類推可以得到AB型血和O型血的二進位制表示。

1.3 高維組合特徵的處理

為了提高複雜關係的擬合能力,在特徵工程中經常會把一階離散特徵兩兩組 合,構成高階組合特徵。以廣告點選預估問題為例,原始資料有語言和型別兩種 離散特徵,第一張圖是語言和型別對點選的影響。為了提高擬合能力,語言和型別可 以組成二階特徵,第二張圖是語言和型別的組合特徵對點選的影響。

1.4 文字表示模型

文字是一類非常重要的非結構化資料,如何表示文字資料一直是機器學習領 域的一個重要研究方向。

  1. 詞袋模型和N-gram模型

    最基礎的文字表示模型是詞袋模型。顧名思義,就是將每篇文章看成一袋子 詞,並忽略每個詞出現的順序。具體地說,就是將整段文字以詞為單位切分開, 然後每篇文章可以表示成一個長向量,向量中的每一維代表一個單詞,而該維對 應的權重則反映了這個詞在原文章中的重要程度。常用TF-IDF來計算權重。

  2. 主題模型

    主題模型用於從文字庫中發現有代表性的主題(得到每個主題上面詞的分佈 特性),並且能夠計算出每篇文章的主題分佈。

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

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

1.5 其它特徵工程

  1. 如果某個特徵當中有缺失值,缺失比較少的話,可以使用該特徵的平均值或者其它比較靠譜的資料進行填充;缺失比較多的話可以考慮刪除該特徵。
  2. 可以分析特徵與結果的相關性,把相關性小的特徵去掉。

1.6 特徵工程腦圖

2. 機器學習優化方法

優化是應用數學的一個分支,也是機器學習的核心組成部分。實際上,機器 學習演算法 = 模型表徵 + 模型評估 + 優化演算法。其中,優化演算法所做的事情就是在 模型表徵空間中找到模型評估指標最好的模型。不同的優化演算法對應的模型表徵 和評估指標不盡相同。

2.1 機器學習常用損失函式

損失函式(loss function)是用來估量你模型的預測值f(x)與真實值Y的不一致程度,它是一個非負實值函式,通常使用L(Y, f(x))來表示,損失函式越小,模型的魯棒性就越好。常見的損失函式如下:

  1. 平方損失函式

    \[L(Y,f(X))=\sum_{i=1}^{n}(Y-f(X))^2\]

    Y-f(X)表示的是殘差,整個式子表示的是殘差的平方和,而我們的目的就是最小化這個目標函式值(注:該式子未加入正則項),也就是最小化殘差的平方和。而在實際應用中,通常會使用均方差(MSE)作為一項衡量指標,公式如下:

    \[MSE=\frac{1}{n}\sum_{i=1}^{n}(Y_i^{'}-Y_i)^2\]

    該損失函式一般使用線上性迴歸當中。

  2. log損失函式

    公式中的 y=1 表示的是真實值為1時用第一個公式,真實 y=0 用第二個公式計算損失。為什麼要加上log函式呢?可以試想一下,當真實樣本為1是,但h=0概率,那麼log0=∞,這就對模型最大的懲罰力度;當h=1時,那麼log1=0,相當於沒有懲罰,也就是沒有損失,達到最優結果。所以數學家就想出了用log函式來表示損失函式。

    最後按照梯度下降法一樣,求解極小值點,得到想要的模型效果。該損失函式一般使用在邏輯迴歸中。

  3. Hinge損失函式

    \[L_i=\sum_{j\neq t_i}max(0,f(x_i,W)_j-(f(x_i,W)_{y_i}-\bigtriangleup))\]

    SVM採用的就是Hinge Loss,用於“最大間隔(max-margin)”分類。

    詳細見之前SVM的文章1.2.3

2.2 什麼是凸優化

凸函式的嚴格定義為,函式L(·) 是凸函式當且僅當對定義域中的任意兩點x,y和任意實數λ∈[0,1]總有:

\[L(\lambda_{}x+(1-\lambda)y)\leq\lambda_{}L(x)+(1-\lambda)L(y)\]

該不等式的一個直觀解釋是,凸函式曲面上任意兩點連線而成的線段,其上的任 意一點都不會處於該函式曲面的下方,如下圖所示所示。

凸優化問題的例子包括支援向量機、線性迴歸等 線性模型,非凸優化問題的例子包括低秩模型(如矩陣分解)、深度神經網路模型等。

2.3 正則化項

使用正則化項,也就是給loss function加上一個引數項,正則化項有L1正則化、L2正則化、ElasticNet。加入這個正則化項好處:

  • 控制引數幅度,不讓模型“無法無天”。
  • 限制引數搜尋空間
  • 解決欠擬合與過擬合的問題。

詳細請參考之前的文章:線性迴歸--第5點

2.4 常見的幾種最優化方法

  1. 梯度下降法

    梯度下降法是最早最簡單,也是最為常用的最優化方法。梯度下降法實現簡單,當目標函式是凸函式時,梯度下降法的解是全域性解。一般情況下,其解不保證是全域性最優解,梯度下降法的速度也未必是最快的。梯度下降法的優化思想是用當前位置負梯度方向作為搜尋方向,因為該方向為當前位置的最快下降方向,所以也被稱為是”最速下降法“。最速下降法越接近目標值,步長越小,前進越慢。梯度下降法的搜尋迭代示意圖如下圖所示:

    缺點:靠近極小值時收斂速度減慢;直線搜尋時可能會產生一些問題;可能會“之字形”地下降。

  2. 牛頓法

    牛頓法是一種在實數域和複數域上近似求解方程的方法。方法使用函式f (x)的泰勒級數的前面幾項來尋找方程f (x) = 0的根。牛頓法最大的特點就在於它的收斂速度很快。具體步驟:

    • 首先,選擇一個接近函式 f (x)零點的 x0,計算相應的 f (x0) 和切線斜率f ' (x0)(這裡f ' 表示函式 f 的導數)。

    • 然後我們計算穿過點(x0, f (x0)) 並且斜率為f '(x0)的直線和 x 軸的交點的x座標,也就是求如下方程的解:

      \[x*f^{'}(x_0)+f(x_0)-x_0*f^{'}(x_0)=0\]

    • 我們將新求得的點的 x 座標命名為x1,通常x1會比x0更接近方程f (x) = 0的解。因此我們現在可以利用x1開始下一輪迭代。

    由於牛頓法是基於當前位置的切線來確定下一次的位置,所以牛頓法又被很形象地稱為是"切線法"。牛頓法搜尋動態示例圖:

    從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。缺點:

    • 牛頓法是一種迭代演算法,每一步都需要求解目標函式的Hessian矩陣的逆矩陣,計算比較複雜。
    • 在高維情況下這個矩陣非常大,計算和儲存都是問題。
    • 在小批量的情況下,牛頓法對於二階導數的估計噪聲太大。
    • 目標函式非凸的時候,牛頓法容易受到鞍點或者最大值點的吸引。
  3. 擬牛頓法

    擬牛頓法是求解非線性優化問題最有效的方法之一,本質思想是改善牛頓法每次需要求解複雜的Hessian矩陣的逆矩陣的缺陷,它使用正定矩陣來近似Hessian矩陣的逆,從而簡化了運算的複雜度。擬牛頓法和梯度下降法一樣只要求每一步迭代時知道目標函式的梯度。通過測量梯度的變化,構造一個目標函式的模型使之足以產生超線性收斂性。這類方法大大優於梯度下降法,尤其對於困難的問題。另外,因為擬牛頓法不需要二階導數的資訊,所以有時比牛頓法更為有效。如今,優化軟體中包含了大量的擬牛頓演算法用來解決無約束,約束,和大規模的優化問題。

  4. 共軛梯度法

    共軛梯度法是介於梯度下降法與牛頓法之間的一個方法,它僅需利用一階導數資訊,但克服了梯度下降法收斂慢的缺點,又避免了牛頓法需要儲存和計算Hesse矩陣並求逆的缺點,共軛梯度法不僅是解決大型線性方程組最有用的方法之一,也是解大型非線性最優化最有效的演算法之一。 在各種優化演算法中,共軛梯度法是非常重要的一種。其優點是所需儲存量小,具有步收斂性,穩定性高,而且不需要任何外來引數。

    具體的實現步驟請參加wiki百科共軛梯度法。下圖為共軛梯度法和梯度下降法搜尋最優解的路徑對比示意圖:

3. 機器學習評估方法

混淆矩陣也稱誤差矩陣,是表示精度評價的一種標準格式,用n行n列的矩陣形式來表示。具體評價指標有總體精度、製圖精度、使用者精度等,這些精度指標從不同的側面反映了影象分類的精度。下圖為混淆矩陣

正類 負類
預測正確 TP(True Positives) FP(False Positives)
預測錯誤 FN(False Negatives) TN(True Negatives)

3.1 準確率(Accuracy)

準確率(Accuracy)。顧名思義,就是所有的預測正確(正類負類)的佔總的比重。

\[Accuracy=\frac{TP+TN}{TP+TN+FP+FN}\]

準確率是分類問題中最簡單也是最直觀的評價指標,但存在明顯的缺陷。比 如,當負樣本佔99%時,分類器把所有樣本都預測為負樣本也可以獲得99%的準確 率。所以,當不同類別的樣本比例非常不均衡時,佔比大的類別往往成為影響準 確率的最主要因素。

3.2 精確率(Precision)

精確率(Precision),查準率。即正確預測為正的佔全部預測為正的比例。個人理解:真正正確的佔所有預測為正的比例。

\[Precision=\frac{TP}{TP+FP}\]

3.3 召回率(Recall)

召回率(Recall),查全率。即正確預測為正的佔全部實際為正的比例。個人理解:真正正確的佔所有實際為正的比例。

\[Recall=\frac{TP}{TP+FN}\]

為了綜合評估一個排序模型的好壞,不僅要看模型在不同 Top N下的Precision@N和Recall@N,而且最好繪製出模型的P-R(Precision- Recall)曲線。這裡簡單介紹一下P-R曲線的繪製方法。

P-R曲線的橫軸是召回率,縱軸是精確率。對於一個排序模型來說,其P-R曲 線上的一個點代表著,在某一閾值下,模型將大於該閾值的結果判定為正樣本, 小於該閾值的結果判定為負樣本,此時返回結果對應的召回率和精確率。整條P-R 曲線是通過將閾值從高到低移動而生成的。下圖是P-R曲線樣例圖,其中實線代表 模型A的P-R曲線,虛線代表模型B的P-R曲線。原點附近代表當閾值最大時模型的 精確率和召回率。

由圖可見,當召回率接近於0時,模型A的精確率為0.9,模型B的精確率是1, 這說明模型B得分前幾位的樣本全部是真正的正樣本,而模型A即使得分最高的幾 個樣本也存在預測錯誤的情況。並且,隨著召回率的增加,精確率整體呈下降趨 勢。但是,當召回率為1時,模型A的精確率反而超過了模型B。這充分說明,只用某個點對應的精確率和召回率是不能全面地衡量模型的效能,只有通過P-R曲線的 整體表現,才能夠對模型進行更為全面的評估。

3.4 F1值(H-mean值)

F1值(H-mean值)。F1值為算數平均數除以幾何平均數,且越大越好,將Precision和Recall的上述公式帶入會發現,當F1值小時,True Positive相對增加,而false相對減少,即Precision和Recall都相對增加,即F1對Precision和Recall都進行了加權。

\[\frac{2}{F_1}=\frac{1}{Precision}+\frac{1}{Recall}\]

\[F_1=\frac{2PR}{P+R}=\frac{2TP}{2TP+FP+FN}\]

3.4 ROC曲線

ROC曲線。接收者操作特徵曲線(receiver operating characteristic curve),是反映敏感性和特異性連續變數的綜合指標,ROC曲線上每個點反映著對同一訊號刺激的感受性。下圖是ROC曲線例子。

橫座標:1-Specificity,偽正類率(False positive rate,FPR,FPR=FP/(FP+TN)),預測為正但實際為負的樣本佔所有負例樣本的比例;

縱座標:Sensitivity,真正類率(True positive rate,TPR,TPR=TP/(TP+FN)),預測為正且實際為正的樣本佔所有正例樣本的比例。

真正的理想情況,TPR應接近1,FPR接近0,即圖中的(0,1)點。ROC曲線越靠攏(0,1)點,越偏離45度對角線越好。

AUC值

AUC (Area Under Curve) 被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍一般在0.5和1之間。使用AUC值作為評價標準是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。

從AUC判斷分類器(預測模型)優劣的標準:

  • AUC = 1,是完美分類器,採用這個預測模型時,存在至少一個閾值能得出完美預測。絕大多數預測的場合,不存在完美分類器。
  • 0.5 < AUC < 1,優於隨機猜測。這個分類器(模型)妥善設定閾值的話,能有預測價值。
  • AUC = 0.5,跟隨機猜測一樣(例:丟銅板),模型沒有預測價值。
  • AUC < 0.5,比隨機猜測還差;但只要總是反預測而行,就優於隨機猜測。

一句話來說,AUC值越大的分類器,正確率越高。

3.5 餘弦距離和歐式距離

餘弦距離:\(cos(A,B)=\frac{A*B}{||A||_2||B||_2}\)

歐式距離:在數學中,歐幾里得距離或歐幾里得度量是歐幾里得空間中兩點間“普通”(即直線)距離。

對於兩個向量A和B,餘弦距離關注的是向量之間的角度關係,並不關心它們的絕對大小,其取值 範圍是[−1,1]。當一對文字相似度的長度差距很大、但內容相近時,如果使用詞頻 或詞向量作為特徵,它們在特徵空間中的的歐氏距離通常很大;而如果使用餘弦 相似度的話,它們之間的夾角可能很小,因而相似度高。此外,在文字、影象、 視訊等領域,研究的物件的特徵維度往往很高,餘弦相似度在高維情況下依然保 持“相同時為1,正交時為0,相反時為−1”的性質,而歐氏距離的數值則受維度的 影響,範圍不固定,並且含義也比較模糊。

3.6 A/B測試

AB測試是為Web或App介面或流程製作兩個(A/B)或多個(A/B/n)版本,在同一時間維度,分別讓組成成分相同(相似)的訪客群組(目標人群)隨機的訪問這些版本,收集各群組的使用者體驗資料和業務資料,最後分析、評估出最好版本,正式採用。

3.7 模型評估方法

  1. Holdout檢驗

    Holdout 檢驗是最簡單也是最直接的驗證方法,它將原始的樣本集合隨機劃分 成訓練集和驗證集兩部分。比方說,對於一個點選率預測模型,我們把樣本按照 70%~30% 的比例分成兩部分,70% 的樣本用於模型訓練;30% 的樣本用於模型 驗證,包括繪製ROC曲線、計算精確率和召回率等指標來評估模型效能。

    Holdout 檢驗的缺點很明顯,即在驗證集上計算出來的最後評估指標與原始分 組有很大關係。為了消除隨機性,研究者們引入了“交叉檢驗”的思想。

  2. 交叉檢驗

    k-fold交叉驗證:首先將全部樣本劃分成k個大小相等的樣本子集;依次遍歷 這k個子集,每次把當前子集作為驗證集,其餘所有子集作為訓練集,進行模型的 訓練和評估;最後把k次評估指標的平均值作為最終的評估指標。在實際實驗 中,k經常取10。

  3. 自助法

    不管是Holdout檢驗還是交叉檢驗,都是基於劃分訓練集和測試集的方法進行 模型評估的。然而,當樣本規模比較小時,將樣本集進行劃分會讓訓練集進一步 減小,這可能會影響模型訓練效果。有沒有能維持訓練集樣本規模的驗證方法 呢?自助法可以比較好地解決這個問題。

    自助法是基於自助取樣法的檢驗方法。對於總數為n的樣本集合,進行n次有 放回的隨機抽樣,得到大小為n的訓練集。n次取樣過程中,有的樣本會被重複採 樣,有的樣本沒有被抽出過,將這些沒有被抽出的樣本作為驗證集,進行模型驗 證,這就是自助法的驗證過程。

3.8 超引數調優

為了進行超引數調優,我們一般會採用網格搜尋、隨機搜尋、貝葉斯優化等 演算法。在具體介紹演算法之前,需要明確超引數搜尋演算法一般包括哪幾個要素。一 是目標函式,即演算法需要最大化/最小化的目標;二是搜尋範圍,一般通過上限和 下限來確定;三是演算法的其他引數,如搜尋步長。

  • 網格搜尋,可能是最簡單、應用最廣泛的超引數搜尋演算法,它通過查詢搜尋範 圍內的所有的點來確定最優值。如果採用較大的搜尋範圍以及較小的步長,網格 搜尋有很大概率找到全域性最優值。然而,這種搜尋方案十分消耗計算資源和時間,特別是需要調優的超引數比較多的時候。因此,在實際應用中,網格搜尋法一般會先使用較廣的搜尋範圍和較大的步長,來尋找全域性最優值可能的位置;然 後會逐漸縮小搜尋範圍和步長,來尋找更精確的最優值。這種操作方案可以降低 所需的時間和計算量,但由於目標函式一般是非凸的,所以很可能會錯過全域性最 優值。
  • 隨機搜尋,隨機搜尋的思想與網格搜尋比較相似,只是不再測試上界和下界之間的所有 值,而是在搜尋範圍中隨機選取樣本點。它的理論依據是,如果樣本點集足夠 大,那麼通過隨機取樣也能大概率地找到全域性最優值,或其近似值。隨機搜尋一 般會比網格搜尋要快一些,但是和網格搜尋的快速版一樣,它的結果也是沒法保證的。
  • 貝葉斯優化演算法,貝葉斯優化演算法在尋找最優最值引數時,採用了與網格搜尋、隨機搜尋完全 不同的方法。網格搜尋和隨機搜尋在測試一個新點時,會忽略前一個點的資訊; 而貝葉斯優化演算法則充分利用了之前的資訊。貝葉斯優化演算法通過對目標函式形 狀進行學習,找到使目標函式向全域性最優值提升的引數。

3.9 過擬合和欠擬合

過擬合是指模型對於訓練資料擬合呈過當的情況,反映到評估指標上,就是 模型在訓練集上的表現很好,但在測試集和新資料上的表現較差。欠擬合指的是 模型在訓練和預測時表現都不好的情況。下圖形象地描述了過擬合和欠擬合的區別。

  1. 防止過擬合:
    • 從資料入手,獲得更多的訓練資料。
    • 降低模型複雜度。
    • 正則化方法,給模型的引數加上一定的正則約束。
    • 整合學習方法,整合學習是把多個模型整合在一起。
  2. 防止欠擬合:
    • 新增新特徵。
    • 增加模型複雜度。
    • 減小正則化係數。

4. 參考文獻

百面機器學習

5. 機器學習系列教程

GitHub:https://github.com/NLP-LOVE/ML-NLP

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此專案!群號:【541954936】