兩個月沒更新了,沒有其它理由,就是懶惰,間接持續(xù)性的懶惰,一直持續(xù)了2個月,簡直懶惰?。?!大家的好多的私信也沒回就過期回不了了。請大家批評我!?。?。
看了很多高深的算法之后,實(shí)在是看不太明白,所以今天又來帶大家復(fù)習(xí)基本功,都是兩個非常非常重要的東西,先定兩個基調(diào),所謂的特征工程就是數(shù)據(jù)預(yù)處理,所謂的特征選擇就是變量篩選,這樣大家就不覺得這么難了。
Feature engineering improves the performance of the machine learning model by selecting the right features for the model and preparing the features in a way that is suitable for the machine learning model.
并且你也可以將特征選擇看作是特征工程的一部分,概念上不去糾結(jié)它。同時特征工程的整個過程也要結(jié)合具體問題具體分析,需要經(jīng)驗(yàn),需要背景知識,也是沒有金標(biāo)準(zhǔn)的。是一項科學(xué)與藝術(shù)相結(jié)合的工作。
特征工程
特征工程又稱特征提取或特征發(fā)現(xiàn),是使用領(lǐng)域知識從原始數(shù)據(jù)中提取特征的過程(怎么提,怎么將背景知識和提取方法結(jié)合其實(shí)是個藝術(shù)活)。這就涉及到一系列的操作,主要的目的就是將原始數(shù)據(jù)處理成可以直接喂給算法的數(shù)據(jù)特征。比如有些算法要求數(shù)據(jù)不能有缺失,你就得處理缺失值吧,比如有些算法需要正態(tài)數(shù)據(jù),你就得進(jìn)行數(shù)據(jù)轉(zhuǎn)換吧,這些都是特征工程。
特征工程具體的操作包括
基礎(chǔ)的操作:像One-hot encoding(啞變量轉(zhuǎn)換),log轉(zhuǎn)換,Outlier handling離群值處理,簡單插補(bǔ),Binning連續(xù)變量分箱都暫時略過(之后給大家寫)。今天我們看下面的內(nèi)容
1.插補(bǔ)
- 隨機(jī)森林插補(bǔ)
隨機(jī)森林插補(bǔ)缺失應(yīng)該是大家的首選方法,這個方法既可以處理連續(xù)特征又可以處理分類特征,而且對離群值和非線性數(shù)據(jù)的適合性都較好,其大概流程如下:
[圖片上傳失敗...(image-3c1b66-1667044441336)]
首先是將缺失的連續(xù)值用變量均值,分類值用眾數(shù)插補(bǔ)好,然后將數(shù)據(jù)切為2部分,一部分是完整數(shù)據(jù)集(training set),一部分是插補(bǔ)后的數(shù)據(jù)集 (prediction set),然后用完整數(shù)據(jù)集訓(xùn)練隨機(jī)森林模型,在插補(bǔ)后的數(shù)據(jù)集中更新缺失值,這樣迭代,直到插補(bǔ)值穩(wěn)定或者達(dá)到最大迭代次數(shù)。代碼示例如下:
imp_train_X <- missForest(train_X)$ximp
- KNN插補(bǔ)
KNN插補(bǔ)的思路是用缺失值附近(Euclidean distance)的K個值的均值將缺失插補(bǔ)上,只需要用kNN函數(shù)就可以實(shí)現(xiàn),其示例如下,大家應(yīng)該一讀就知道這個方法只適合連續(xù)變量,因?yàn)槠湟嬎憔嚯x
air_imp_knn <- kNN(airquality, k = 5, variable = "Ozone")
n_miss(air_imp_knn$Ozone)
3.特征放縮
特征縮放有下面的三種常見的方法:
Min Max Scaler:MinMaxScaler method is one of the methods of standardizing the data where values are made to lie between 0 and 1
**Normalization **: All values are scaled in a specified range between 0 and 1 via normalisation (or min-max normalisation)
Standardization: Standardization (also known as z-score normalisation) is the process of scaling values while accounting for standard deviation
特征處理好之后,接下來的問題就是用哪些特征來訓(xùn)練我們的模型,就是特征選擇。
特征選擇
特征選擇的方法又可以分為三個大類Filter Methods, Wrapper Methods 和 Embedded Methods(也叫Intrinsic Method).
[圖片上傳失敗...(image-be8a2-1667044441336)]
Filter Methods就是我們平常論文中常用的單變量篩選方法,比如ANOVA, Pearson Correlation, Chi-Square.--單因素分析有意義的時候納入模型就是說的這個,這一部分有一個方法叫做“低信息特征過濾”,大家不常見到,但是很好理解,就是說有些變量基本上沒有變異,全部觀測都是取的同一個值或者接近全是同一個值,這樣的特征其實(shí)是沒有用的,需要過濾出去,此時用到的函數(shù)叫做nearZeroVar(),或者可以用preProcess()函數(shù)將method參數(shù)設(shè)置成“nzv”也是可以的。這個方法應(yīng)該是特征選擇的時候第一步使用。
Wrapper Methods指的是依靠模型表現(xiàn)來篩選變量,將篩選過程包裝在建模過程里面,從而看看到底用哪些變量可以使模型表現(xiàn)更加好,這類方法就更加的有模型針對性了。常見的Wrapper Method包括遞歸式特征消除,逐步法Stepwise selection和基因算法。
Stepwise selection逐步法的概念統(tǒng)計書上將回歸的章節(jié)都會有提到,要么就是在spss實(shí)操的書中會有的,包括前進(jìn)和后退以及逐步3中方法。這兒要提醒大家的是前進(jìn)法和逐步法都是可以用在高維數(shù)據(jù)中的(比如你的變量比觀測多都可以用),但是后退法不行。
Embedded Methods這個方法和Wrapper Methods方法其實(shí)有點(diǎn)像的,都是要基于模型表現(xiàn)的,不同的地方就在于Embedded Methods結(jié)合了模型的固有特征(intrinsic properties),代表性的方法包括lasso法和決策樹法。
接下來給大家寫幾個特征選擇的具體例子:
變量重要性計算
首先我們要理解同一個機(jī)器學(xué)習(xí)問題,用不同的算法的時候,各個特征的重要性是不一樣的,通常我們都會去用多個模型去解決我們的問題,具體例子,比如說一些在基于樹的模型中表現(xiàn)很好的變量,在放在回歸模型中有可能就沒那么重要了。
所以變量重要性這種方法是屬于Wrapper Methods的一種,同時其依賴于具體算法。
看實(shí)例:
我現(xiàn)在有這么一個數(shù)據(jù)集,特征全部是數(shù)值,標(biāo)簽是2分類因子:
[圖片上傳失敗...(image-aea94-1667044441336)]
首先我用rpart訓(xùn)練一個決策樹模型,得到其變量重要性,代碼如下:
rPartMod <- train(Class ~ ., data=trainData, method="rpart")
rpartImp <- varImp(rPartMod)
輸出結(jié)果如下:
[圖片上傳失敗...(image-73e74d-1667044441336)]
同樣的數(shù)據(jù),我再考慮另外一個模型,比如說隨機(jī)森林模型:
rrfMod <- train(Class ~ ., data=trainData, method="RRF")
rrfImp <- varImp(rrfMod, scale=F)
得到結(jié)果如下
[圖片上傳失敗...(image-16a946-1667044441336)]
可以看到2個算法給出的特征的重要性排序是不一樣的。
lasso法篩選變量
lasso回歸的基本思路是給回歸方程加一個懲罰項,懲罰作用和系數(shù)大小成比例,這么一來將起到的作用就是部分的原來回歸系數(shù)比較小的特征就給懲罰沒了。從而達(dá)到了減少特征的作用。在lasso回歸中有一個超參λ,越大懲罰越強(qiáng),越小越弱:
- When lambda = 0, no parameters are eliminated.
- As lambda increases, more and more coefficients are set to zero and eliminated & bias increases.
- When lambda = infinity, all coefficients are eliminated.
- As lambda decreases, variance increases.
實(shí)操:
我現(xiàn)在有特征矩陣如下:
[圖片上傳失敗...(image-b0dc1c-1667044441336)]
總共有62個特征,然后我的結(jié)局是同樣長度的一個2分類的向量,此時我要進(jìn)行一個lasso回歸篩選一下到底取哪些特征可以更好地預(yù)測我的結(jié)局,我可以寫出如下代碼:
cv.lasso <- cv.glmnet(x, y, family='binomial', alpha=1, parallel=TRUE, standardize=TRUE, type.measure='auc')
plot(cv.lasso)
運(yùn)行代碼后可以出圖如下:
[圖片上傳失敗...(image-a8e615-1667044441335)]
圖的橫軸是lasso的超參取值(λ的對數(shù)),縱軸是模型的AUC,圖中最上面的一排數(shù)值是對于的特征個數(shù),可以看到當(dāng)我們的特征是21個的時候模型的AUC其實(shí)是相對較高的,所以其實(shí)我們并不需要將所有的特征都納入到模型中的。
遞歸式特征消除
遞歸特征消除Recursive feature elimination (RFE)遞歸特征消除的主要思想是反復(fù)的構(gòu)建模型(如SVM或者回歸模型)然后選出最好的(或者最差的)的特征,其基本原理如下