華文網

機器學習中容易犯下的錯

前言

在工程中,有多種方法來構建一個關鍵值存儲,

並且每個設計都對使用模式做了不同的假設。在統計建模,有各種演算法來建立一個分類,每一個演算法的對資料集有不同的假設。

在處理少量的資料時,儘量多的去嘗試更多的演算法是合理的,並且去 選擇最好的演算法建立在實驗成本低的情況下。但是,當我們碰到“大資料”時,就需要對資料進行前期分析,然後相應的設計建模流程。(例如預處理、建模、優化演算法、評價,

產品化)

現在出現了很多的演算法,而且有幾十種方法來解決給定的建模問題。每個模型假設不同的東西,如何使用和驗證哪些假設是否合理的其實並不明顯。在工業中,大多數從業者選擇的建模演算法,都是他們最熟悉的,而不是選擇一個最適合資料的。接下來,我來分享一些經常我們會忽略並犯錯的地方,謝謝大家指正點評!( 注:標題就用英語,感覺更貼近機器學習演算法的原意 )

1. Take default loss function for granted(理所當然的採用預設損失函數)

損失函數 是一個機器學習演算法的核心,損失函數決定了最終優化後得到的參數以及模型本身。在不同的業務場景下,優化的目標應該是不同的。許多從業者訓練和選擇最好的模型,使用預設的損失函數(比如:均方誤差)。在實踐中,現成的損失函數很少與商業目標相一致。以詐騙偵查為例。當試圖檢測欺詐交易,商業目標是儘量減少欺詐損失。

現有的二元分類器的損失函數同樣衡量假陽性和假陰性。為了與商業目標一致,損失函數不僅要懲罰假陰性多於假陽性, 但也懲罰每個假陰性與美元金額的比例。

此外,資料集在欺詐檢測通常包含高度不平衡的標籤。在這種情況下,偏置的損失函數有利於罕見的情況下(例如:通過上/下採樣)。

2. Use plain linear models for non-linear interaction(純線性模型用於非線性相互作用)

這個同樣是經常會犯的錯誤。

當構造一個二分類問題,很多人就會直接想到Logistic回歸, 原因很簡單,因為邏輯回歸效率高,實現容易。但是,大家往往都忽略了一點,邏輯回歸本身就是一個線性模型,且非線性相互作用之間的預測需要手動編碼。但是,真實資料是否線性可分卻是我們未知的情況。由於高維資料下判斷資料是否線性可分幾乎是一個不現實的任務,所以個人的經驗往往是先使用邏輯回歸做一次分類,
但是同時也會採用決策樹,或者SVM等非線性模型來對該資料進行重新的分類比對。

返回欺詐檢測,高階交互特徵如:“帳單位址=發貨位址和交易金額

3. Forget about outliers(忽略異常值)

異常值是個很有趣的事情,讓你又愛又恨。根據上下文,他們要麼值得特別關注,要麼完全忽略。以收入預測為例。如果觀察到不同尋常的收入高峰,這可能是一個好主意,要格外注意他們,找出什麼原因引起的尖峰。但如果異常是由於機械誤差,測量誤差或其他造成則不適用,在將資料回饋到建模演算法之前,濾除這些異常值是個好主意。

有些模型比其他更敏感異常值。例如,AdaBoost可以把這些異常值作為“難樣本(Hard)”的情況下,把較大的權重放在異常值,而決策樹可以簡單地計算每個異常值作為一個錯誤分類。如果資料集包含了大量的異常值,著重的是,要麼用魯棒的模型演算法去針對異常值,要麼濾除異常值。

注:參考他人一段話。

我記得之前在統計之都上看過一篇文章對我啟發很大,說曾經我們都願意把異常值直接給丟掉,但是我們卻忘記了異常值並非錯誤值,而同樣是真實情況的表現,我們之所以認為異常,只是因為我們的資料量不足夠大而已。文中還舉了一個例子,說我們用電腦來類比高斯分佈,也一樣會模擬出一些資料點落在N個標準差之外,而我們並不能說這是異常點,因為如果我們把這些點刪除掉,這就不是一個高斯分佈了。所以異常值很多情況下非但不能丟掉,還需要引起我們的足夠重視和分析。

但是我們又要注意這個異常值是否是錯誤值,如果是錯誤值,這個時候我們就應該想辦法把這些錯誤值去掉,因為這些錯誤往往會影響我們實際的模型效果。如果當訓練資料中包含一些異常值的時候,我們就需要考慮模型的敏感性了,例如AdaBoost, Kmeans這種就屬於對異常值很敏感的機器學習模型。

4. Use high variance model when n<>

支援向量機是最流行的現有建模演算法之一,其最強大的功能之一是能夠適應不同核函數的模型。SVM核函數可以被認為是一種方法,自動結合現有的特徵去 形成一個更豐富的特徵空間。由於這個簡單,大多數都會在訓練SVM模型的時候預設使用核函數。然而,當數 據n

注: SVM核函數的一個關鍵概念就是維度提升,如果當n

5. L1/L2/… regularization without standardization(正則化前沒有標準化)

應用 L1或L2去懲罰 較大係數是常用的方式去正則化線性或邏輯回歸。然而,許多人不知道應用這些正則化之前特徵標準化的重要性。

返回欺詐檢測,想像一個具有交易量特徵的線性回歸模型。沒有正則化,如果交易金額單位為美元,擬合係數將是約100倍大於 如果該單位是美分的 擬合係數。有正則化,由於L1 / L2懲罰更大的係數, 如果單位是美元 交易金額將受到懲罰。因此,正規化是有偏見的,往往傾向於懲罰小規模特徵。為了緩解這個問題,標準化的所有特徵,並把它們作為一個預處理步驟。

6. Use linear model without considering multi-collinear predictors(使用線性模型沒有考慮共線預測)

設想建立一個具有兩個變數X1和X2的線性模型,假設真實模型是y = X1+X2。理想情況下,如果觀察到的資料有少量的雜訊,線性回歸解將找回真實模型。然而,如果X1和X2共線,大多數優化演算法的關係,y=2*X1, y=3*X1-X2或y=100*X1-99*X2都是不錯的。

這個問題可能不是有害的,因為它沒有偏差估計。然而,它確實會使問題成為病態,並且使係數權重無法解釋。

7. Interpreting absolute value of coefficients from linear or logistic regression as feature importance

因為許多現有的線性回歸返回的p-value

係數的P值返回每個,

許多人認為線性模型,係數的絕對值越大,對應的特徵越重要。這很少是真實的,因為:

改變了變數的規模,就改變了係數說的絕對值;

如果特徵是共線的,係數可以從一個特徵轉移到其他。

此外,資料集有更多的特徵,有更多的可能特徵共線,用係數解釋特徵重要性的可靠性較差。

End.

找出什麼原因引起的尖峰。但如果異常是由於機械誤差,測量誤差或其他造成則不適用,在將資料回饋到建模演算法之前,濾除這些異常值是個好主意。

有些模型比其他更敏感異常值。例如,AdaBoost可以把這些異常值作為“難樣本(Hard)”的情況下,把較大的權重放在異常值,而決策樹可以簡單地計算每個異常值作為一個錯誤分類。如果資料集包含了大量的異常值,著重的是,要麼用魯棒的模型演算法去針對異常值,要麼濾除異常值。

注:參考他人一段話。

我記得之前在統計之都上看過一篇文章對我啟發很大,說曾經我們都願意把異常值直接給丟掉,但是我們卻忘記了異常值並非錯誤值,而同樣是真實情況的表現,我們之所以認為異常,只是因為我們的資料量不足夠大而已。文中還舉了一個例子,說我們用電腦來類比高斯分佈,也一樣會模擬出一些資料點落在N個標準差之外,而我們並不能說這是異常點,因為如果我們把這些點刪除掉,這就不是一個高斯分佈了。所以異常值很多情況下非但不能丟掉,還需要引起我們的足夠重視和分析。

但是我們又要注意這個異常值是否是錯誤值,如果是錯誤值,這個時候我們就應該想辦法把這些錯誤值去掉,因為這些錯誤往往會影響我們實際的模型效果。如果當訓練資料中包含一些異常值的時候,我們就需要考慮模型的敏感性了,例如AdaBoost, Kmeans這種就屬於對異常值很敏感的機器學習模型。

4. Use high variance model when n<>

支援向量機是最流行的現有建模演算法之一,其最強大的功能之一是能夠適應不同核函數的模型。SVM核函數可以被認為是一種方法,自動結合現有的特徵去 形成一個更豐富的特徵空間。由於這個簡單,大多數都會在訓練SVM模型的時候預設使用核函數。然而,當數 據n

注: SVM核函數的一個關鍵概念就是維度提升,如果當n

5. L1/L2/… regularization without standardization(正則化前沒有標準化)

應用 L1或L2去懲罰 較大係數是常用的方式去正則化線性或邏輯回歸。然而,許多人不知道應用這些正則化之前特徵標準化的重要性。

返回欺詐檢測,想像一個具有交易量特徵的線性回歸模型。沒有正則化,如果交易金額單位為美元,擬合係數將是約100倍大於 如果該單位是美分的 擬合係數。有正則化,由於L1 / L2懲罰更大的係數, 如果單位是美元 交易金額將受到懲罰。因此,正規化是有偏見的,往往傾向於懲罰小規模特徵。為了緩解這個問題,標準化的所有特徵,並把它們作為一個預處理步驟。

6. Use linear model without considering multi-collinear predictors(使用線性模型沒有考慮共線預測)

設想建立一個具有兩個變數X1和X2的線性模型,假設真實模型是y = X1+X2。理想情況下,如果觀察到的資料有少量的雜訊,線性回歸解將找回真實模型。然而,如果X1和X2共線,大多數優化演算法的關係,y=2*X1, y=3*X1-X2或y=100*X1-99*X2都是不錯的。

這個問題可能不是有害的,因為它沒有偏差估計。然而,它確實會使問題成為病態,並且使係數權重無法解釋。

7. Interpreting absolute value of coefficients from linear or logistic regression as feature importance

因為許多現有的線性回歸返回的p-value

係數的P值返回每個,

許多人認為線性模型,係數的絕對值越大,對應的特徵越重要。這很少是真實的,因為:

改變了變數的規模,就改變了係數說的絕對值;

如果特徵是共線的,係數可以從一個特徵轉移到其他。

此外,資料集有更多的特徵,有更多的可能特徵共線,用係數解釋特徵重要性的可靠性較差。

End.