数据特征预处理
特征處理是通過特定的統計方法(數學方法)將數據轉換成算法要求的數據。
-
數值型數據:
- 標準縮放:
- 1、歸一化
- 2、標準化
- 3、缺失值
- 標準縮放:
-
類別性數據:one-hot編碼
-
時間類型:時間的切分
sklearn特征處理API
- sklearn.preprocessing
歸一化
特點:通過對原始數據進行變換把數據映射到(默認為[0,1])之間
公式:
注:作用于每一列,max 為一列的最大值,min為一列的最小值,那么x’’ 為最終結果,mx,mi分別為指定區間值默認mx為1,mi為0
根據公式:
計算特征1 第一列第一個:
計算特征1 第一列第二個:
x' = 60 - 60 / 90 - 60 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0計算特征1 第一列第三個:
x' = 75 - 60 / 90 - 60 = 0.5 x'' = 0.5(1 - 0) + 0 = 0.5 歸一化結果為 0.5計算特征2 第二列第一個:
x' = 2 - 2 / 4 - 2 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0計算特征2 第二列第二個:
x' = 4 - 2 / 4 - 2 = 1 x'' = 1(1 - 0) + 0 = 1 歸一化結果為 1計算特征2 第二列第三個:
x' = 3 - 2 / 4 - 2 = 0.5 x'' = 0.5(1 - 0) + 0 = 0.5 歸一化結果為 0.5計算特征3 第三列第一個:
x' = 10 - 10 / 15 - 10 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0計算特征3 第三列第二個:
x' = 15 - 10 / 15 -10 = 1 x'' = 1(1 - 0) + 0 = 0 歸一化結果為 1計算特征3 第三列第三個:
x' = 13 - 10 / 15 -10 = 0.6 x'' = 0.6(1 - 0) + 0 = 0.6 歸一化結果為 0.6計算特征4 第四列第一個:
x' = 40 - 40 / 46 -40 = 0 x'' = 0(1 - 0) + 0 = 0 歸一化結果為 0計算特征4 第四列第二個:
x' = 45 - 40 / 46 -40 = 0.83 x'' = 0.83(1 - 0) + 0 = 0.83 歸一化結果為 0.83計算特征4 第四列第三個:
x' = 46 - 40 / 46 -40 = 1 x'' = 1(1 - 0) + 0 = 1 歸一化結果為 1sklearn 歸一化API
sklearn歸一化API:sklearn.preprocessing.MinMaxScaler
MinMaxScaler 語法
MinMaxScaler(feature_range=(1, 0)…)
- 每個特征縮放到給定返回(默認[0, 1])
| MinMaxScaler.fit_transform(X) | numpy array格式的數據[n_samples, n_features] | 轉換后的形狀相同的array |
代碼執行結果:
歸一化的目的:使得某一個特征對最終結果不會造成更大影響
歸一化缺點:異常點對最大值最小值影響太大
歸一化在特定場景下最大值最小值是變換的,另外,最大值與最小值非常容易受異常點影響,所以這種方法魯棒性較差,只適合傳統精確小數據場景。
標準化
1、特點:通過對原始數據進行交換把數據變換到均值為0,方差為1范圍內
2、公式:
注:作用于每一列,mean為平均值,σ為標準差
var 成為方差
其中:方差(考量數據的穩定性)
sklearn 特征化API
sklearn特征化API:scikit-learn.preprocessing.StandardScaler
- StandardScaler(…)
- 處理之后每列來說所有數據都聚集在均值0附近標準方差為1
| StandardScaler.fit_transform(X) | numpy array格式的數據[n_samples, n_features] | 轉換后的形狀相同的array |
| StandardScaler.mean_ | 原始數據中每列特征的平均值 | |
| StandardScaler.std_ | 原始數據每列特征的方差 |
代碼執行結果:
總結:
歸一化:如果出現異常點,影響了最大值和最小值,那么結果會發生改變
標準化:如果出現異常點,由于具有一定數據量,少量的異常點對于平均值的影響并不大,從而方差改變較小。
缺失值處理方法
| 刪除 | 如果每列或者行數據缺失值達到一定的比例,建議放棄整行或者整列 |
| 插補 | 可以通過缺失值每行或者每列的平均值、中位數來填充 |
2、sklearn缺失值API: sklearn.preprocessing.Imputer
Imputer語法
Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)
- 完成缺失值插補
| Imputer.fit_transform(X) | numpy array個數的數據[n_samples, n_features] | 轉換后的形狀相同的array |
關于 np.nan(np.NaN)
1、numpy的數組中可以使用np.nan/np.NaN來代替缺失值,屬于float類型
2、如果是文件中的一些缺失值,可以替換成nan,通過np.array轉換成float型的數組即可
SimpleImputer(add_indicator=False, copy=True, fill_value=None, missing_values=np.nan, strategy='mean', verbose=0)- add_indicator:如果該參數為True,則會在數據后面加入n列由0和1構成的同樣大小的數據,0表示所在位置非空,1表示所在位置為空。相當于一種判斷是否為空的索引。
- copy:表示對原來沒有填充的數據的拷貝。
- missing_values:一般情況下缺失值是 np.nan
- strategy:指定填補策略,有以下四種策略
- mean: 由該列的均值填充
- median:中位數
- most_frequent:眾數
- constant:將空值填充為自定義的值,如果strategy=‘constant’,則填充fill_value的值。
- verbose:控制詳細程度
代碼執行結果:
注意:
隨著版本的更新,Imputer的引用方式也發生了變化,一開始的引用方式為
更新后引用 SimpleImputer 來調用
from sklearn.impute import SimpleImputer imputer = SimpleImputer(strategy="mean")總結
- 上一篇: 机器学习库和框架
- 下一篇: OpenCV 车道线提取