百面机器学习——第一章特征工程
特征工程:是對原始數據進行一系列工程處理,將其提煉為特征,作為輸入供算法和模型使用。從本質上來講,特征工程是一個表示和展現數據的過程。在實際工作中,特征工程旨在去除原始數據中的雜質和冗余,設計更高效的特征以刻畫求解的問題和預測模型之間的關系。
對于機器學習問題,數據和特征往往決定了結果的上限,而算法,模型的選擇及優化則是在逐步接近這個上限。特征工程的框架圖:
常用的數據類型:
(1)結構化數據:可以看成關系型數據庫的一張表,每列都有清晰的定義,包含了數值型和類別型兩種基本數據類型;每行代表一個樣本的信息。
(2)非結構化數據:主要包括文本、圖像、音頻、視頻教程,其包含的信息無法用一個簡單的數值表示,也沒有清晰的類別定義,并且數據的大小各不相同。
第1問:為什么對數據進行歸一化?
為了消除數據特征之間的量綱影響,對數據進行歸一化,使得不同指標之間具有可比性。對數值型的特征做歸一化可以將所有的特征都統一到一個大致相同的數值區間內。常用方法:
(1)線性函數歸一化(Min-Max Scaling):它是對數據進行線性變換,使結果映射到[0,1]范圍,實現對數據的等比縮放。
(2)零均值歸一化(Z-score Normalization):它將數據映射到均值為0,標準差為1的分布上。假設原始特征的均值是,標準差是,公式為
例:以梯度下降的實例說明,未歸一化的數據在學習速率相同的情況下,對數據進行歸一化之后,數據可以更快地找到最優解。
在實際應用中,通過梯度下降法求解的模型通常是需要歸一化的,包括線性回歸,邏輯回歸,支持向量機,神經網絡模型等。但是對于決策樹模型并不適用,歸一化之后的數據并不會改變樣本在特征X上的信息增益。
其他:樹形模型是否需要歸一化?
樹形模型不需要歸一化,不會影響結點分裂時的選擇特征。
第2問:在數據處理時,類別型特征怎么處理?
類別型特征主要是只在有限選項內取值的特征,例如性別(男女),血型(A,B,AB,O)。類別型特征原始輸入通常是字符串類型,除了決策樹等少數模型能直接處理字符串形式的輸入,對于邏輯回歸等大部分模型來說,都需要處理轉換成數值型特征。
處理方法:序號編碼(Ordinal Encoding),獨熱編碼(One-hot Encoding),二進制編碼(Binary Encoding)
序號編碼:用于處理類別間具有大小關系的數據。如成績可以分為低,中,高三檔。并存在排序問題,表示為高3,中2,低1。
獨熱編碼:用于處理類別間不具有大小關系的特征。如血型有四個取值,可以轉換為4維稀疏變量,如:
| 血型 | A | B | AB | O |
| ? | 1 | 0 | 0 | 0 |
| ? | 0 | 1 | 0 | 0 |
| ? | 0 | 0 | 1 | 0 |
| ? | 0 | 0 | 0 | ??1 |
對于類別取值較多的情況下使用獨熱編碼應該注意:
(1)使用稀疏向量來節省空間。在獨熱編碼下,特征向量只有某一維取值為1,其他位置均取0。因此可以利用向量的稀疏表示有效地節省空間。
(2)配合特征選擇來降低難度。高維特征會帶來以下問題:一是KNN中,高維空間下兩點的距離很難得到有效的衡量。二是在邏輯回歸模型中,參數的數量會隨著維度的增高而增加,容易引起過擬合問題。三是通常只有部分維度是對分類、預測有幫助,因此可以考慮配合特征選擇來降低維度。(注:不太明白什么叫配合特征選擇,是在這個編碼下,只取部分特征嗎,這個特征怎么取,方法呢?會不會造成特征丟失?)
二進制編碼:主要是分兩步:先用序號編碼給每個類別賦予一個類別ID,然后將類別ID對應的二進制編碼作為結果。如下:
| 血型 | 類別ID | 二進制表示 |
| A | 1 | 001 |
| B | 2 | 010 |
| AB | 3 | 011 |
| O | 4 | 100 |
?
二進制是對ID進行哈希映射,最終得到0/1特征向量,且維數少于獨熱編碼,節省了存儲空間。
其他編碼方式:Helmert Contrast,Sum Contrast,Polynomial Contrast,Backward Difference Contrast。
總結
以上是生活随笔為你收集整理的百面机器学习——第一章特征工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zbbz插件使用教程_CAD坐标自动标注
- 下一篇: tomcat日志配置——如何查看日志