缺失值的處理
由於各種原因,許多現實世界的資料集包含缺少的值,通常編碼為空白,nan或其他佔位符。然而,這樣的資料集與scikit-learn的分類器不相容,它們假設陣列中的所有值都是數字,並且都具有和保持含義。使用不完整資料集的基本策略是丟棄包含缺失值的行或列。然而,這樣的代價是可能丟失有價值的資料,如果每行或每列缺失資料佔比比較大,建議直接放棄這些資料,否則更好的策略是估算缺失值,並將其填充。scikit-learn中填充缺失值的api是imputer類,使用方法如下:
from sklearn.preprocessing import imputer
import numpy as np
# 缺失值填補的時候必須得是float型別
# 缺失值要填充為np.nan,它是浮點型,strategy是填充的缺失值型別,這裡填充平均數,axis代表軸,這裡第0軸是列
im = imputer(missing_values='nan',strategy='mean',axis=0)
data = im.fit_transform([[1, 2],
[np.nan, 3],
[7, 6]])
print(data)
引數strategy有三個值可選:mean(平均值),median(中位數),most_frequent(眾數)輸出結果:
array([[ 1., 2.],
[ 4., 3.],
[ 7., 6.]])
可見:之前的缺失值被這一列的平均值((1+7)/2=4)填充了1、資料降維是什麼?
降維不是指的陣列的維度減少,而是特徵的數量減少。
2、為什麼要降維?
當資料集的特徵非常多時,特徵冗餘,要麼是一些無用的特徵,要麼是表達重複資訊的特徵,這些資料會消耗計算效能,正確降維後的資料一般保留了原始資料的大部分重要資訊,完全可以替代原始資料作為輸入,從而提高效能。
3、常用的兩種降維方式:1、特徵選擇; 2、 主成分分析(pca);
1、特徵選擇
特徵選擇是什麼?
特徵選擇就是從所有特徵中選擇一部分特徵作為演算法的輸入資料特徵選擇的三種方法:
過濾式(filter):variancethreshold
嵌入式(embedded):正則化、決策樹
包裹式(warpper)
神經網路
這裡我們先只介紹過濾式的方差過濾,包裹式很少使用,嵌入式和神經網路留到後面具體介紹scikit-learn中使用方差進行過濾的api是:feature_selection.variancethreshold
from sklearn.feature_selection import variancethreshold
# 返回值:訓練集將刪除方差低於threshold的特徵,threshold預設為0,即刪除方差為0的特徵
var = variancethreshold(threshold=0.0)
# 使用fit_transform進行轉化
data = var.fit_transform([[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]])
print(data)
輸出結果:
array([[2, 0],
[1, 4],
[1, 1]])
上面使用方差過濾後,輸出結果是刪除了方差為0的資料。2、主成分分析(pca)主成分分析是什麼?過濾式的方法常用的就是方差選擇,因為方差代表了資料的穩定性,方差越小,資料的波動越小,對結果的影響也就越小,方差為0時,說明這一列的特徵值相同,對於結果判斷毫無影響,因此將其刪除,以提高計算效能。
scikit-learn中pca的api是:decomposition.pca
當特徵數量非常多達到上百時,才有必要使用主成分分析,下面只是用四個特徵演示一下用法
from sklearn.decomposition import pca
# n_components:指定要保留的資料資訊為90%,通常保留值在90%-95%之間
pca = pca(n_components=0.9)
data = pca.fit_transform([[2,8,4,5],
[6,3,0,8],
[5,4,9,1]])
print(data)
pca中的引數n_components可以為整數,也可以為小數;輸出結果:為小數時代表保留的資訊百分比,比如上面0.9就是保留90%的資訊;
為整數時代表保留的特徵數量,我們通常不會預先知道保留幾個特徵比較合適,所以通常不用整數。
array([[ -9.33473422e-16, 3.82970843e+00],
[ -5.74456265e+00, -1.91485422e+00],
[ 5.74456265e+00, -1.91485422e+00]])
總結:1、scikit-learn中缺失值的處理;
2、資料降維的兩種方式:過濾式特徵選擇、pca(主成分分析);
3、過濾式特徵選擇所得到資料是原始資料的子集,pca得到的資料是經過重新計算的,不是原始資料的子集,但保留了原始資料所代表的資訊。
[活在一九八八]
特徵工程3 缺失值及資料降維
缺失值的處理 由於各種原因,許多現實世界的資料集包含缺少的值,通常編碼為空白,nan或其他佔位符。然而,這樣的資料集與scikit learn的分類器不相容,它們假設陣列中的所有值都是數字,並且都具有和保持含義。使用不完整資料集的基本策略是丟棄包含缺失值的行或列。然而,這樣的代價是可能丟失有價值的資...
特徵工程 缺失值處理
目前常用的三類處理方法 1.用平均值 中值 分位數 眾數 隨機值等替代。效果一般,因為等於人為增加了雜訊。2.先根據歐式距離或pearson相似度,來確定和缺失資料樣本最近的k個樣本,將這k個樣本的相關feature加權平均來估計該樣本的缺失資料。3.將變數對映到高維空間 a.對於離散型變數 男 女...
python 特徵缺失值填充
該部落格總結比較詳細,感謝博主。我們在進行模型訓練時,不可避免的會遇到某些特徵出現空值的情況,下面整理了幾種填充空值的方法 對於特徵值缺失的一種常見的方法就是可以用固定值來填充,例如0,9999,9999,例如下面對灰度分這個特徵缺失值全部填充為 99 data 灰度分 data 灰度分 filln...