我們在進行機器學習的時候,採用的資料樣本往往是向量(特徵向量),而我們的原始資料並不是以向量的形式呈現給我們的,這是便需要將資料對映到特徵
直接對映便ok(雖然機器學習是根據浮點值進行的訓練,但是不需要將整數6轉換為6.0,這個過程是預設的)
好多時候,有的特徵是字串,比如此前訓練的加利福尼亞房產資料集中的街區名稱,機器學習是無法根據字串來學習規律的,所以需要轉換。但是存在乙個問題,如果字元特徵是''一環'' ''二環'' ''三環''...(代表某個城市的地理位置),那麼對其進行數值轉換的時候,是不可以編碼為形如1,2,3,4...這樣的資料的,因為其存在資料大小的問題,學習模型會把他們的大小關係作為特徵而學習,所以我們需要引入獨熱編碼,(具體解釋見鏈結,解釋的很好)
當得到特徵之後,還是要進行篩選的,因為有的特徵沒有參考價值,就像我們的在做合成特徵的時候,正常的特徵資料是人均幾間房間,而有的人是幾十間,這明顯沒有參考價值
良好特徵的幾點原則
考慮上游不穩定性:由經驗可知,特徵的定義不應隨時間發生變化,代表城市名稱的話,那麼特徵值始終都該是城市的名稱,但是有的時候,上游模型將特徵值處理完畢後,返還給下游模型的卻變成了數值,這樣是不好的,因為這種表示在未來執行其他模型時可能輕易發生變化,那麼特徵就亂套了
清理資料,顧名思義,就是將資料清理(整理一下).....好像是廢話。
在上一步後,我們現在得到的資料已經全部是數值化的特徵了,(這裡肯定有但是的),但是,這樣的資料直接拿過來訓練效果還是會很糟糕,因為其中存在許許多多的壞資料,就是一些值不是那麼正常的資料,像之前說的那種數值特別大的就屬於這一種,當然除了數值異常的還有許許多多種的壞資料,下面就來看一看有哪些方法對付這些妖豔賤貨
縮放是指將浮點特徵值從自然範圍(例如 100 到 900)轉換為標準範圍(例如 0 到 1 或 -1 到 +1)。如果某個特徵集只包含乙個特徵,則縮放可以提供的實際好處微乎其微或根本沒有。不過,如果特徵集包含多個特徵,則縮放特徵可以帶來以下優勢:
_nan_,是not a number的縮寫,在ieee浮點數算術標準(ieee 754)中定義,表示一些特殊數值(無窮與非數值(_nan_)),為許多cpu與浮點運算器所採用。由上可知,我們並不需要對每個浮點特徵進行完全相同的縮放。即使特徵 a 的範圍是 -1 到 +1,同時特徵 b 的範圍是 -3 到 +3,也不會產生什麼惡劣的影響。不過,如果特徵 b 的範圍是 5000 到 100000,您的模型會出現糟糕的響應。
要縮放數字資料,一種顯而易見的方法是將 [最小值,最大值] 以線性方式對映到較小的範圍,例如 [-1,+1]。scaledvalue=(value−mean)/stddev.
例如,給定以下條件:
* 均值 = 100
* 標準偏差 = 20
* 原始值 = 130
則: scaled_value = (130 - 100) / 20
scaled_value = 1.5
使用 z 得分進行縮放意味著,大多數縮放後的值將介於 -3 和 +3 之間,而少量值將略高於或低於該範圍。
還是舉加利福尼亞州住房資料集中的人均住房數的例子,有的極端值達到了50
對於這些極端值其實很好處理,無非幾個辦法
分箱其實是乙個形象化的說法,就是把資料分開來,裝在乙個個箱子裡,這樣乙個箱子裡的資料就是一家人了。
那有什麼用呢?下面就舉個栗子!
我們現在擁有 11 個不同的布林值特徵(latitudebin1
、latitudebin2
、…、latitudebin11
),而不是乙個浮點特徵。擁有 11 個不同的特徵有點不方便,因此我們將它們統一成乙個 11 元素向量。這樣做之後,我們可以將緯度 37.4 表示為:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
分箱之後,我們的模型現在可以為每個緯度學習完全不同的權重。(是不是覺得有點像獨熱編碼,沒錯,就是的)
為了簡單起見,我們在緯度樣本中使用整數作為分箱邊界。如果我們需要更精細的解決方案,我們可以每隔 1/10 個緯度拆分一次分箱邊界。新增更多箱可讓模型從緯度 37.4 處學習和維度 37.5 處不一樣的行為,但前提是每 1/10 個緯度均有充足的樣本可供學習。一旦檢測到存在這些問題,通常需要將相應樣本從資料集中移除,從而「修正」不良樣本。要檢測遺漏值或重複樣本,可以編寫乙個簡單的程式。檢測不良特徵值或標籤可能會比較棘手。另一種方法是按分位數分箱,這種方法可以確保每個桶內的樣本數量是相等的。按分位數分箱完全無需擔心離群值。
除了檢測各個不良樣本之外,還必須檢測集合中的不良資料。直方圖是一種用於視覺化集合中資料的很好機制。此外,收集如下統計資訊也會有所幫助:
考慮生成離散特徵的最常見值列表,靠常識來判斷是否合理,是否適合自己觀察資料
遵循以下規則:
像處理任何任務關鍵型**一樣謹慎處理您的資料。良好的機器學習依賴於良好的資料。
資料清洗與特徵工程
查詢空值 處理空值的辦法 1.刪除空值所在的行 2.用給定的值去填充 查詢重複值 刪除重複值 對數值型資料 連續資料進行離散化處理 文字型別處理 方法三 使用sklearn.preprocessing的labelencoder from sklearn.preprocessing import la...
特徵工程(2) 資料採集 資料清洗 資料取樣
一 資料採集 資料採集前需要明確採集哪些資料,一般的思路為 哪些資料對最後的結果 有幫助?資料我們能夠採集到嗎?線上實時計算的時候獲取是否快捷?舉例1 我現在要 使用者對商品的下單情況,或者我要給使用者做商品推薦,那我需要採集什麼資訊呢?店家 店鋪的評分 店鋪類別 商品 商品評分 購買人數 顏色 材...
資料清洗及特徵處理
import numpy as np import pandas as pd df pd.read csv train.csv 檢視每個特徵缺失值個數 df.info df.isnull sum df.dropna df.fillna 對age列的資料缺失值進行處理 df df age none 0...