所謂參數
,是在ML裡面最關鍵也最麻煩的部分,俗話說garbage in garbage out
,輸入的內容不洽當,模型做得再好也無用武之地。
在ML裡面會納入的參數,我們也稱之為特徵,參數的內容值也稱作特徵值
,這個所謂特徵值是一個不精準的口語講法,跟數學上的「特徵值」有些出入,事先聲明接下來講的特徵值是一個概念名詞而已,講得是參數內容。
收集資料的概念,其實大家不難理解,透過log data或者DB的raw data,基本上身為系統工程師的一員,能夠輕易取得資料或者做些對資料收集上的調整。
決定完命題之後,第一的困難會是參數上的處理,也就是所謂的「資料清洗」和「特徵工程」,而其中「資料清洗」相對我們本業來說,是相對簡單的部分,本身log資料能夠在elk完整顯現,已經是歷經一段格式整理和規範之下的產物,系統本身也有資料parser或者二次重組的服務,所以在這一點,所謂的基礎建設問題,有著先天的優勢。
問題會在於「特徵工程」上,編碼的處理方式是我們未曾經歷的體驗,為什麼需要編碼呢?問題回到我們要訓練的模型,是一堆數學公式的運算,運算後得出的也是一個數學函式的模型,簡單的概念例如地址、客戶性別、客戶登入的裝置來源等等,這些資料在經過轉換成數字之前,是無法參與數學運算,所以這些資料要經過「編碼」。
編出的數字,有時候因為數字本身有次序性,因此編碼方式就需要有所考量,舉例來說:0、1、2、3、4、5,不只我們直覺上就對這些關係有大小之分,連電腦系統的四則運算都會對它們的等式都會有所區別。
以下舉兩個常見的編碼例子:
假設客戶的月收入用級距萬元區分
原本的資料本身就有次序的意義,所以編碼也要使用有次序的編碼比較適用。
假設居住地有 基隆市、台北市、新北市、桃園市、台中市、高雄市
將這6個地區編成0~5就不太適合,因為這些地區資料本身無前後次序之分。
比較好的做法,是比方說編成2進位的形式之類,比較符合資料的原意。
基隆市 ⇒ 000001
台北市 ⇒ 000010
新北市 ⇒ 000100
桃園市 ⇒ 001000
台中市 ⇒ 010000
高雄市 ⇒ 100000
簡單來說,編碼就是把既有的資料想辦法數學化
,訓練模型可以想做是一連串routine的數學運算,不斷重複計算直到得出評估之後相對最好的結果,因此在這之前需要將我們的資料轉換成適當的數字。