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

1. 特徵工程有哪些?

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

主要討論如下兩種經常使用的數據類型。github

  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,例如高表示爲三、中表示爲二、低表示爲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】NLP面試學習羣

相關文章
相關標籤/搜索