我們 馬上學三點 ,
- 特徵工程,從原始數據到特徵
- 良好特徵的特點
- 如何了解數據
特徵工程
機器學習模型不能直接看到、聽到或感知輸入樣本。 您必須創建數據表示, 為模型提供有用的信號來了解數據的關鍵特性。
有趣的是,當我們處理現實世界中的數據時, 數據並不會以格式規範的特徵向量的形式呈現在我們面前。 相反,呈現給我們的數據是數據庫記錄、 協議緩衝區或其他任何形式。
我們必須從各種各樣的數據源中提取數據, 然後再根據這些數據創建特徵向量。 現在,從原始數據中提取特徵的過程稱為特徵工程。
如圖,將左側矢量的每個部分映射到右側特徵矢量的一個或多個字段。
![特徵工程](https://easyai.tech/wp-content/uploads/2022/08/52502-2019-06-22-144926.jpg)
實踐中,機器學習從業人員將大約75%的時間 花在特徵工程方面了,特徵就是我們要的東西。
接下來,我們來了解一下特徵工程是如何發生的。
從原始數據到特徵
映射數值
如果某個記錄是一個數字, 例如房子的房間數量, 我們就可以將這個數字直接複製到一個特徵向量中, 這個過程非常自然。
![映射數值](https://easyai.tech/wp-content/uploads/2022/08/9f47b-2019-06-22-145010.jpg)
通過獨熱編碼映射分類值
但是,如果我們面對的是一個字符串, 比如「Shorebird Way」,那麼我們該怎麼辦呢?
如果見到的是字符串值, 我們通常可以使用獨熱編碼將其轉化為特徵向量。
現在,獨熱編碼針對我們可能見到的每個字符串 都提供了一個唯一的元素。
![通過獨熱編碼映射分類值](https://easyai.tech/wp-content/uploads/2022/08/1f25c-2019-06-22-145103.jpg)
例如,如果有一個針對街道名稱的獨熱編碼, 那麼每一條可能出現的街道都有一個唯一的元素。 在見到我們擁有的街道時,例如「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)。
![分佈不應包含離譜的離群值](https://easyai.tech/wp-content/uploads/2022/08/3d10a-2019-06-22-145230.jpg)
分箱技巧
我們還可以考慮另一種技術,那就是分箱技術。 如果要探討緯度對加利福尼亞州住房價格的影響, 我們發現並不存在由北向南的 可直接映射到住房價格上的線性關係。
但是在任何特定緯度範圍內,卻往往存在很強的關聯。 因此,我們能做的就是, 將由北向南的緯度劃分成一批小分箱。
![分箱技巧](https://easyai.tech/wp-content/uploads/2022/08/b1435-2019-06-22-145248.jpg)
這些小分箱每個都會變成一個布爾值特徵, 此時我們就可以使用獨熱編碼。 現在,如果您位於映射到聖迭戈的特定分箱中, 那麼基本上我們會得到一個1。 或者,如果您位於映射到南灣地區的特定分箱中, 則會得到一個1; 而在其他任何地區,則會得到一個0。 藉助這種方式, 我們的模型可以利用一種成本低廉的方式 將部分非線性關係映射到模型中, 而不需要採用任何特殊技術。
了解數據
了解數據是至關重要的, 將機器學習當做一個黑盒子, 把數據丟進去,卻不檢查數據, 就盼着能夠獲得好結果,這種做法並不妥當。
因為數據中會出現怪異的內容, 因此,您能做的就是: 使用直方圖或散點圖 以及各種排名指標將數據直觀地顯示出來。
您可以進行各種數據錯誤排除檢查, 為此,在各種開發活動中, 您需要消耗大量的時間來查找重複值、缺失值、 任何看起來像離群值的內容。 任何可讓您與數據互動的信息中心之類的功能 都可能會非常有用。
在現實生活中,數據集中的很多樣本是不可靠的, 原因有以下一種或多種:
- 遺漏值。 例如,有人忘記為某個房屋的年齡輸入值。
- 重複樣本。 例如,服務器錯誤地將同一條記錄上傳了兩次。
- 不良標籤。 例如,有人錯誤地將一顆橡樹的圖片標記為楓樹。
- 不良特徵值。 例如,有人輸入了多餘的位數,或者溫度計被遺落在太陽底下。
最後,我們要監控一段時間內的數據。
數據源昨天情況很好, 並不意味着明天情況也會很好。 因此,我們為了加強監控特徵在一段時間內的穩定性 而能夠採取的任何措施,都會增強系統的穩健性。
了解數據 時遵循以下規則:
- 記住您預期的數據狀態。
- 確認數據是否滿足這些預期 (或者您可以解釋為何數據不滿足預期)。
- 仔細檢查訓練數據是否與其他來源的數據一致。
像處理任何任務關鍵型代碼一樣謹慎處理您的數據。 良好的機器學習依賴於良好的數據。
總結:
從原始數據中提取特徵的過程稱為特徵工程;
良好特徵的特點: 避免很少使用的離散特徵值,最好具有清晰明確的含義,實際數據內不要摻入特殊值 ,考慮上游不穩定性, 分佈不應包含離譜的離群值 ,
了解數據,像處理任何任務關鍵型代碼一樣謹慎處理您的數據
本文轉自公眾號 AI產品經理總舵,原文地址
Comments