数据预处理和特征工程
一、數據預處理
1.數據采集
2.數據格式化(存儲格式等)
3.數據清洗:去掉臟數據
簡單直觀可以看出的不可能數據
組合或統計屬性判定
缺失值處理
1.刪除元祖:刪除這一條記錄或者一列特征,適合記錄或者特征占總樣本比例很小,或者缺失值非常多。但是會造成數據少很多,有可能造成性能下降
2.數據補齊:這類方法是用一定的值去填充空值,通常基于統計學原理,根據初始數據集中其余對象取值的分布情況來對一個缺失值進行填充
3.不處理:不處理缺失值,直接在包含空值的數據上進行數據挖掘的方法包括貝葉斯網絡和人工神經網絡等。
具體請看:https://blog.csdn.net/lujiandong1/article/details/52654703
?
4.數據采樣
很多情況下,正負樣本不均衡
1.當正負樣本量很大時,進行下采樣,隨機采樣和分層抽樣
2.當樣本量不大時
采集更多樣本
過采樣
修改損失函數
二、特征工程
1.數值類型
歸一化、標準化、正則化:https://www.cnblogs.com/chaosimple/p/4153167.html
統計特征:pandas的mean方法和describe()方法
離散化:將連續數值切割成幾塊,pandas庫里有cut()方法,可以指定對數組arr切成n塊,返回的是每個樣本屬于的那一個區間。cut(arr,n)或者直接指定區間cut(arr,[-5,-1,2,5,10]),返回的result,統計result,pd.value_counts(result).reindex(result.levels)
2.類別類型
2.1.one-hot編碼
pandas庫的get_dummies(series,prefix='列名前綴')
2.2 Hash處理
?
3.時間類型
既可以看做連續值,也可以看做離散值
1.連續值,持續時間(單頁瀏覽時長),間隔時間(兩次活動的間隔時間)
2.離散值,時間段,星期幾,月,季度
python中datetime的strptime函數:datetime.datetime.strptime(x,時間格式,如:"%Y-%m-%d %H:%M:%S"),將字符串轉為時間格式類型
時間類型函數可以返回年月日星期:.year,.month,.day,.weekday()
4.文本型
自然語言處理相關
?
5.組合特征
5.1簡單組合特征:拼湊
?5.2模型特征組合
GBDT+LR
6.特征選擇
原因有:冗余:特征相關性太高,浪費計算性能
噪聲:特征對預測結果有負影響
6.1.過濾型(單個)
評估單個特征和結果值之間的相關程度,排序留下top相關的部分特征
評估的準則:pearson相關系數,互信息,距離相關度
缺點是:沒有考慮到特征之間的關聯作用,可能把有用的關聯特征誤刪掉
相關系數:用scipy.stats.pearsonr(x,y)來計算相關系數,函數返回相關系數和風險值(越小越可信),缺點是只對線性有用,如果是非線性就不適用
互信息:minepy.MINE庫
距離相關系數:gist庫
sklearn.feature_selection.SelectBest 可以很方便的實現取前k個特征,參數有兩個,第一個是評估函數,第二個K=n,評估函數的選擇:
回歸:
f_regression:相關系數,計算每個變量與目標變量的相關系數,然后計算出F值和P值;
mutual_info_regression:互信息,互信息度量 X 和 Y 共享的信息:它度量知道這兩個變量其中一個,對另一個不確定度減少的程度。
分類:
chi2:卡方檢驗;
f_classif:方差分析,計算方差分析(ANOVA)的F值 (組間均方 / 組內均方);
mutual_info_classif:互信息,互信息方法可以捕捉任何一種統計依賴,但是作為非參數方法,需要更多的樣本進行準確的估計。
6.2包裹型(子集合)
把特征選擇看做一個特征子集搜索問題,篩選各種特征子集,然后用模型評估效果
遞歸特征刪除算法:給特征賦予一個外部模型產生的權重(例如:線性模型系數),RFE遞歸地使用越來越少的特征來進行特征選擇。首先,在原始數據上建立模型并且給每個特征一個權重;然后,淘汰絕對權重最小的特征,遞歸地執行這個過程直到達到希望的特征數。
RFECV使用交叉驗證方法發現最優特征數量。
6.3嵌入型
根據模型來判斷特征的重要性
最常用的方式是用正則化的方法來做特征選擇
使用SelectFromModel方法特征選擇
SelectFromModel是一種元轉換器,可以與那些有coef_ 或者feature_importances_屬性的模型一起使用。如果coef_ 或者feature_importances_小于閾值,我們就認為特征是不重要的。除了指定閾值以外,也可以使用啟發式的方式。有效的啟發式方法包括均值、中位數或者乘以系數,比如 0.1*均值。
基于L1范數的特征選擇
使用L1范數的線性模型有一個稀疏解:許多估計系數都為0。當降維的目的是為了使用其他分類器,他們能和feature_selection.SelectFromModel一起使用選擇非零系數。特別地,稀疏估計量對于回歸中的 linear_model.Lasso、分類中的linear_model.LogisticRegression和svm.LinearSVC都很有用。
from sklearn.svm import LinearSVC from sklearn.datasets import load_iris from sklearn.feature_selection import SelectFromModel iris = load_iris() X, y = iris.data, iris.target X.shape (150,4) lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y) model = SelectFromModel(lsvc, prefit=True) X_new = model.transform(X) X_new.shape (150,3)?
?
轉載于:https://www.cnblogs.com/stAr-1/p/8920783.html
總結
以上是生活随笔為你收集整理的数据预处理和特征工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到被打了是什么意思
- 下一篇: 函数和过程