iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0

所謂參數,是在ML裡面最關鍵也最麻煩的部分,俗話說garbage in garbage out,輸入的內容不洽當,模型做得再好也無用武之地。

在ML裡面會納入的參數,我們也稱之為特徵,參數的內容值也稱作特徵值,這個所謂特徵值是一個不精準的口語講法,跟數學上的「特徵值」有些出入,事先聲明接下來講的特徵值是一個概念名詞而已,講得是參數內容。

收集資料的概念,其實大家不難理解,透過log data或者DB的raw data,基本上身為系統工程師的一員,能夠輕易取得資料或者做些對資料收集上的調整。

決定完命題之後,第一的困難會是參數上的處理,也就是所謂的「資料清洗」和「特徵工程」,而其中「資料清洗」相對我們本業來說,是相對簡單的部分,本身log資料能夠在elk完整顯現,已經是歷經一段格式整理和規範之下的產物,系統本身也有資料parser或者二次重組的服務,所以在這一點,所謂的基礎建設問題,有著先天的優勢。

問題會在於「特徵工程」上,編碼的處理方式是我們未曾經歷的體驗,為什麼需要編碼呢?問題回到我們要訓練的模型,是一堆數學公式的運算,運算後得出的也是一個數學函式的模型,簡單的概念例如地址、客戶性別、客戶登入的裝置來源等等,這些資料在經過轉換成數字之前,是無法參與數學運算,所以這些資料要經過「編碼」。

編出的數字,有時候因為數字本身有次序性,因此編碼方式就需要有所考量,舉例來說:0、1、2、3、4、5,不只我們直覺上就對這些關係有大小之分,連電腦系統的四則運算都會對它們的等式都會有所區別。

以下舉兩個常見的編碼例子:

有順序性的編碼(Ordinal Encoding)

假設客戶的月收入用級距萬元區分

  1. 10000元以下 ⇒ 編成 0
  2. 10000~20000 ⇒ 編成 1
  3. 20000~30000 ⇒ 編成 2
  4. 30000~40000 ⇒ 編成 3
  5. 40000~50000 ⇒ 編成 4
  6. 50000以上 ⇒ 編成 5

原本的資料本身就有次序的意義,所以編碼也要使用有次序的編碼比較適用。

無順序性的編碼(One-Hot Encoding)

假設居住地有 基隆市、台北市、新北市、桃園市、台中市、高雄市

將這6個地區編成0~5就不太適合,因為這些地區資料本身無前後次序之分。

比較好的做法,是比方說編成2進位的形式之類,比較符合資料的原意。

基隆市 ⇒ 000001

台北市 ⇒ 000010

新北市 ⇒ 000100

桃園市 ⇒ 001000

台中市 ⇒ 010000

高雄市 ⇒ 100000


簡單來說,編碼就是把既有的資料想辦法數學化,訓練模型可以想做是一連串routine的數學運算,不斷重複計算直到得出評估之後相對最好的結果,因此在這之前需要將我們的資料轉換成適當的數字。


上一篇
用題目找參數的困難 | ML#Day6
下一篇
特徵萃取 | ML#Day8
系列文
後端工程師的ML入門理解與Vertex AI30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言