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