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


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

機器學習通俗易懂系列文章

3.png

作者:@mantchs

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

歡迎大家加入討論!共同完善此項目!群號:【541954936】NLP面試學習群


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM