我們 馬上學三點 ,

  1. 特徵工程,從原始數據到特徵
  2. 良好特徵的特點
  3. 如何了解數據

特徵工程

機器學習模型不能直接看到、聽到或感知輸入樣本。 您必須創建數據表示, 為模型提供有用的信號來了解數據的關鍵特性。

有趣的是,當我們處理現實世界中的數據時, 數據並不會以格式規範的特徵向量的形式呈現在我們面前。 相反,呈現給我們的數據是數據庫記錄、 協議緩衝區或其他任何形式。

我們必須從各種各樣的數據源中提取數據, 然後再根據這些數據創建特徵向量。 現在,從原始數據中提取特徵的過程稱為特徵工程

如圖,將左側矢量的每個部分映射到右側特徵矢量的一個或多個字段。

特徵工程

實踐中,機器學習從業人員將大約75%的時間 花在特徵工程方面了,特徵就是我們要的東西。

接下來,我們來了解一下特徵工程是如何發生的。

從原始數據到特徵

映射數值

如果某個記錄是一個數字, 例如房子的房間數量, 我們就可以將這個數字直接複製到一個特徵向量中, 這個過程非常自然。

映射數值

通過獨熱編碼映射分類值

但是,如果我們面對的是一個字符串, 比如「Shorebird Way」,那麼我們該怎麼辦呢?

如果見到的是字符串值, 我們通常可以使用獨熱編碼將其轉化為特徵向量

現在,獨熱編碼針對我們可能見到的每個字符串 都提供了一個唯一的元素。

通過獨熱編碼映射分類值

例如,如果有一個針對街道名稱的獨熱編碼, 那麼每一條可能出現的街道都有一個唯一的元素。 在見到我們擁有的街道時,例如「Shorebird Way」, 我們就在針對「Shorebird Way」的元素中添加一個1, 並在針對其他任何地點的元素中分別添加一個0。 別擔心0太多,我會使用稀疏表示法, 其中僅存儲非零值。

我們可以將這個獨熱編碼用作表示字符串的特徵向量。 使用獨熱編碼處理此類不常見的分類數據十分方便。

那麼,什麼樣的特徵才是好特徵呢?

良好特徵的特點

特徵值應以非零值的形式在數據集中多次出現。

首先,一個特徵應具有非零值, 並在我們的數據集中出現至少幾次或更多次

如果一個特徵在具有非零值的情況下出現的次數十分少, 或僅出現過一次,恐怕就不是一個值得使用的好特徵, 應該在預處理步驟中過濾掉,。

例如,手機應該使用型號(device_model:galaxy_s6), 而不是編號ID作為特徵(my_device_id:8SK982ZZ1242)

特徵應該具有清晰明確的含義

特徵應具有清晰明確的意義, 這樣一來,我們就可以進行有效的完善性檢查, 排除錯誤,確保各項特徵得到妥善處理。

例如,以年為單位來計算一座房子的房齡(user_age:23), 難度遠低於以秒為單位來計算(user_age:123456789)。 排除錯誤和進行推理的難度要低很多。

特徵不應使用「神奇」的值

實際數據內不要摻入特殊值, 特徵不應使用「神奇」的值, 例如,如果我們定義一個特徵, 它的作用是告訴我們一座房子上市出售多少天了,

我們可以使用特殊值負1來表示這座房子從未上市出售過。 相反,更好的主意是定義一個指示型特徵, 讓這個特徵採用布爾值, 以便表示是否已定義「上市出售天數」特徵。

因此,我們可以使用布爾值、 True/False、1-0來表示是否定義了這個特徵。 藉助這種方式,原特徵「上市出售天數」 可以保持0到n的自然單位。

特徵值不應隨時間發生變化

考慮上游不穩定性, 特徵值不應隨時間發生變化, 這一點回到了數據的平穩性這一概念。

那麼,為什麼特徵值有可能隨時間發生變化呢? 這是因為, 我們的特徵可能是從某個上游模型傳到我們這裡來的, 而這個上游模型可能會發生變化。 我們會希望能夠獲取這個模型的版本信息 並對這個模型有非常具體的了解, 或者能夠從這個模型中 獲取具有定義規範的恆定語義的值。

分佈不應包含離譜的離群值

特徵不應採用不理性的離群值。 例如,在加利福尼亞州的住房數據中, 如果我們創建一個合成特徵,

例如人均房間數,即使用房間總數除以人口總數, 那麼對於大多數城市街區, 我們都會得到介於每人0到3或4個房間的相對合理的值。 但是在某些城市街區,我們會得到高達50的值。 這樣的值太不正常了, 我是說,這些人都住在什麼地方? 像「酒店街區」這樣的地方嗎? 此時,我們或許可以為特徵設置上限或轉換特徵, 以便去掉這些不理性的離群值。

理想情況下,所有特徵都要轉換為相似範圍, 例如 (-1, 1) 或 (0, 5)。

分佈不應包含離譜的離群值

分箱技巧

我們還可以考慮另一種技術,那就是分箱技術。 如果要探討緯度對加利福尼亞州住房價格的影響, 我們發現並不存在由北向南的 可直接映射到住房價格上的線性關係。

但是在任何特定緯度範圍內,卻往往存在很強的關聯。 因此,我們能做的就是, 將由北向南的緯度劃分成一批小分箱。

分箱技巧

這些小分箱每個都會變成一個布爾值特徵, 此時我們就可以使用獨熱編碼。 現在,如果您位於映射到聖迭戈的特定分箱中, 那麼基本上我們會得到一個1。 或者,如果您位於映射到南灣地區的特定分箱中, 則會得到一個1; 而在其他任何地區,則會得到一個0。 藉助這種方式, 我們的模型可以利用一種成本低廉的方式 將部分非線性關係映射到模型中, 而不需要採用任何特殊技術。

了解數據

了解數據是至關重要的, 將機器學習當做一個黑盒子, 把數據丟進去,卻不檢查數據, 就盼着能夠獲得好結果,這種做法並不妥當。

因為數據中會出現怪異的內容, 因此,您能做的就是: 使用直方圖或散點圖 以及各種排名指標將數據直觀地顯示出來。

您可以進行各種數據錯誤排除檢查, 為此,在各種開發活動中, 您需要消耗大量的時間來查找重複值、缺失值、 任何看起來像離群值的內容。 任何可讓您與數據互動的信息中心之類的功能 都可能會非常有用。

在現實生活中,數據集中的很多樣本是不可靠的, 原因有以下一種或多種:

  • 遺漏值。 例如,有人忘記為某個房屋的年齡輸入值。
  • 重複樣本。 例如,服務器錯誤地將同一條記錄上傳了兩次。
  • 不良標籤。 例如,有人錯誤地將一顆橡樹的圖片標記為楓樹。
  • 不良特徵值。 例如,有人輸入了多餘的位數,或者溫度計被遺落在太陽底下。

最後,我們要監控一段時間內的數據

數據源昨天情況很好, 並不意味着明天情況也會很好。 因此,我們為了加強監控特徵在一段時間內的穩定性 而能夠採取的任何措施,都會增強系統的穩健性。

了解數據 時遵循以下規則

  • 記住您預期的數據狀態。
  • 確認數據是否滿足這些預期 (或者您可以解釋為何數據不滿足預期)。
  • 仔細檢查訓練數據是否與其他來源的數據一致。

像處理任何任務關鍵型代碼一樣謹慎處理您的數據。 良好的機器學習依賴於良好的數據。

總結:

從原始數據中提取特徵的過程稱為特徵工程;

良好特徵的特點: 避免很少使用的離散特徵值,最好具有清晰明確的含義,實際數據內不要摻入特殊值 ,考慮上游不穩定性, 分佈不應包含離譜的離群值 ,

了解數據,像處理任何任務關鍵型代碼一樣謹慎處理您的數據

本文轉自公眾號 AI產品經理總舵,原文地址