###### tags: `MLCC`
# Representation
## Feature Engineering
:::info
**Feature engineering做法:** transforming raw data into a feature vector
:::
### 轉換的作法
#### maps raw data to ML features (2種)
1. all data to float
> 原始數據會經過資料前處理變成 **feature vector**,讓他變成 floating-point values

2. int to float

#### one-hot encodeing (1種:string(文字) to float)
- OOV (out-of-vocabulary) bucket
> 有一個類似詞語資料庫的東西,將每一個詞或是街之類的,給他一個數字,可以定義幾個我們需要/重要的單詞個給一個數字,其他不重要但是或出現的單詞就統一用一個數字。
> example:
> 資料庫 家中會出現的寵物
> 魚 1
> 狗 2
> 貓 3
> 其他 4
- 約束
- 只能使用單一權重,不可以狗跟貓不同權重
- 沒有考慮一個單詞可能有多個值,也就是只能一對一,不能一對多
- example:
- 我家有養狗跟魚(X)
- 我家養魚(O)
- 解決方式
- 二進位向量 binary vector:有相對應的值為1,沒有的話為0
> 可能會造成稀疏矩陣
> example:
> [養狗,養魚,養貓,養其他動物]
> 我家有養狗跟魚 → [1,1,0,0]
## Qualities of Good Features
1. Avoid rarely used discrete feature values
> 同個Feature value出現五次以上最好,使 model 了解 feature 和 label 之間的關係
> 讓多個相同 feature 在不同超參數下,與 label的關係
>
> 反之, feature 很少的話,無法多次確認 feature 和 label 之間的關係
2. Prefer clear and obvious meanings
> 做資料前處理
> feature 要清楚和具體表示它代表的意義,把一些錯誤的 feature 拿掉
3. Don't mix "magic" values with actual data
> 過濾超出正常範圍值或是奇怪的 feature
4. Account for upstream instability
> feature 的定義要穩定,不會隨時間而有所變動
## Cleaning Data
### Scaling feature values
:::info
將資料正規化,讓原始資料介在[0,1]or[-1,1]
:::
- 好處
- 收斂更快
- 避免在訓練期間超出範圍值
- 將 feature 範圍縮小
- scaling

### Handling extreme outliers 處理極值
:::info
- 太多極值導致在縮放時,有些細節被抹掉(變的不明顯)

:::
1. 把極值歸類在某一類
2. log 縮放
> 會好一些,但是有可能還是會有極值
> 
3. 取資料的最大最小範圍(將頭尾切掉)
> 切完長這樣
> 
4. Binning
>資料用範圍分區
> 看原始數據對應的哪一個區域
5. Scrubbing
> 過濾不信任的 feature
> example:
> 忘了輸入(omitted value)、重複輸入(duplicate examples)、標錯(bad labels)、打錯(bad feature values)。
## 我們要知道得事項
- 我們預期的資料要長怎樣
- 驗證 test set 是否符合我們的期望,不符合可不可以解釋
- 檢查 trainning data 跟其他來源有沒有一樣?
> 例如:
> example, dashboards,統計數據