目錄
一、特徵理解
1、定類資料
2、定序資料
3、定距資料
4、定比資料
二、清洗資料
1、識別缺失值
(1)刪除缺失值的行
(2)填充缺失值(醫學類資料禁用,因為要求真實)
2、標準化、歸一化
三、特徵構建
1、定類特徵的填充
2、定量特徵的填充
3、定類特徵的編碼
4、定序特徵的編碼
5、連續值分箱
6、擴充套件數值特徵之多項式擬合
7、文字的特徵構建
四、特徵選擇(減少壞屬性)
1、基於統計的特徵的選擇
(1)皮爾遜相關係數
(2)假設校驗
2、基於模型的特徵的選擇 selectfrommodel
五、特徵轉換
1、主成分分析 pca
2、線性判別分析lda
只能按名稱分類,例如:血型的a、b、o、ab,不可以進行數學加減操作,可通過條形圖bar、餅圖pie分析
df['grade'].value_counts().sort_values(ascending=false).head(20).plot(kind='bar')
df是python中的dataframe,類似於資料庫表的結構,之後都是基於python和pandas的語法不再複述
同樣是類別,但是可以自然排序。例如考試成績的abcd,餐廳評分1-5,可通過條形圖、餅圖分析
df['grade'].value_counts().plot(kind='pie')
數值資料,不僅能排序,而且還能加減,例如氣溫,可以計算兩地區夏季平均溫度的差,可以通過直方圖hist、箱線圖box
df['grade'].hist()
df['grade'].value_counts().plot(kind='box')
數值資料,不僅能排序、加減,還能乘除,例如100元錢是50元錢的2倍,舊金山各崗位工資中最高工資除以最低工資的13倍
可以通過直方圖hist、箱線圖box
先檢視df.head()
再檢視空準率(如果分類任務,那麼就是各類別佔比,模型要準確度高於這個才行,否則盲猜主類準確率都是空準率)
(如果是回歸任務,可以看下平均值,並可以計算下平均值對應的r方或平均誤差,作為後續對比參考)
df['要**的列名'].value_counts(normalize = true)
df.isnull().sum(),檢視缺失值
df.describe(),有些資料最小值是0,但是違背常識,比如bmi指數
df['列名'] = df['列名'].map(lambda x:x if x != 0 else none) # 0 替換為 none
處理方法如下:
df.dropna()
然後要再看下空準率和平均值,資料分布不變是最好
df['某列'].fillna( df['某列'].mean() , inplace=true)
或使用
training_mean = x_train.mean()
x_train = x_train.fillna( training_mean )
x_test = x_test.fillna( training_mean )
如上更誠實表達了泛化能力,因為從訓練集特徵中學習並應用到未知隱藏資料上
z分數標準化:standardscaler
min-max標準化:minmaxscaler
歸一化:normalizer
針對nan的列,填充類別頻數最高的那個類別,
df['列名'].fillna( df['列名'].value_counts().index[0] , inplace = true)
可參考上面的均值(mean)填充,或使用imputer工具類
x = pd.get_dummies(x)
x = pd.get_dummies(x , columns = ['列名','列名2'])
ordering =
df['ajcc階段'] = df['ajcc階段'].replace(ordering)
x['年齡'] = pd.cut( x['年齡'] , bins = 3) //標籤是區間段名:(67.4, 77.3]
df['年齡'] = pd.cut( df['年齡'] , bins = 10 , labels=false) //標籤是排序的數值
polynomialfeatures 建立新特徵,是原始特徵的多項式組合
原特徵是a、b , 新特徵是 a、b、a平方、b平方、a*b、1
(1)詞袋法 feature_extraction
(2)詞向量 countvectorizer
(3)詞頻逆文件頻率 tf-idf
df.corr() 特徵兩兩之間,會有乙個[-1,1]的數值,0代表沒有線性相關,-1或1代表線性關係很強
df.corr()['目標列'] 檢視特徵與目標值間的相關性,一般取係數的絕對值》0.2 或0.1的特徵
columns_names = df.cloumns[df.corr()['**列'].abs() > 0.2]
columns_names = columns_names.drop('**列')
x = x[columns_names]
from sklearn.feature_selection import selectkbest,f_classif
f_classif 可以用負數,但不是所有類都支援
chi2 卡方也很常用,只支援正數
假設「特徵與響應變數沒有關係」,p值越低,那麼這個特徵與響應變數關係越大,p介於0-1,常見閾值0.05
(p不是越小越好,不能互相比較)
引入包裝器selectfrommodel 類似於 selectkbest,也是用來選取重要特徵,但不用入參k(保留特徵數),入參是閾值
from sklearn.feature_selection import selectfrommodel
from sklearn.linear_model import lassocv
clf = lassocv()
sfm = selectfrommodel(clf, threshold=0.25)
sfm.fit(x, y)
上面的模型也可以換成決策樹,那麼就是使用的決策樹的內部指標tree.feature_importan ces_來評估重要性
下面**檢視,最終選了哪些特徵
pd.dataframe(x.columns.tolist())[sfm.get_support()]
將多個相關特徵的資料集投影到相關特徵較少的座標系上,pca利用協方差矩陣的特徵值分解實現
from sklearn.decomposition import pca
pca = pca(n_components=3)
pca.fit(x)
和pca一樣,lda目標也是提取乙個新的座標系,區別是lda不會專注於資料的方差,而是優化低維空間,獲得最佳類別可分性,有助於避免機器學習流水線的過擬合。
from sklearn.discriminant_analysis import lineardiscriminantanalysis
lda = lineardiscriminantanalysis(n_components=2)
x_r2 = lda.fit(x, y).transform(x)
sklearn api
流水線順序:標準化 > pca > lda,一般後兩個會一同使用
特徵工程 特徵工程入門與實踐(一)
特徵工程 將資料轉換為能更好地表示潛在問題的特徵,從而提高機器學習效能。大體上,機器學習分為兩類 評估分類問題,可以採用交叉驗證法 from sklearn.linear model import logisticregression from sklearn.model selection imp...
讀書筆記 《特徵工程入門與實踐》
歸一化和標準化 本書認為資料可以分為四大等級,分為是 定類 定序 定距 定比,其中定類和定序都是定性的資料,定距和定比是定量的資料。定類是離散的 無序的,舉例 人名 油漆名稱 動物物種 猴子 馬 牛等 定序是有序類別 可以比較的,舉例 考試等級 great good not bad bad等或 0 ...
特徵工程入門與實踐 3 特徵增強
第3章 特徵增強 清洗資料 主要內容 識別資料中的缺失值 刪除有害資料 輸入 填充 缺失值 對資料進行歸一化 標準化 構建新特徵 手動或自動選擇 移除 特徵 使用數學矩陣計算將資料集轉換到不同的維度。3.1 識別資料中的缺失值 檢視資料集中是否有資料點是空的,用pandas dataframe內建的...