「作者主頁」:士別三日wyx
「作者簡介」:CSDN top100、阿里云博客專家、華為云享專家、網(wǎng)絡(luò)安全領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
「推薦專欄」:對網(wǎng)絡(luò)安全感興趣的小伙伴可以關(guān)注專欄《網(wǎng)絡(luò)安全入門到精通》
提取的特征當(dāng)中,有一些相關(guān)(相似)的「冗余特征」,這種特征是沒有必要統(tǒng)計的,我們需要「減少」相關(guān)的特征,留下不相關(guān)的特征。也就是「特征降維」。
特征降維的方式有很多,這里使用其中的一種:方差選擇法(低方差過濾)
一、方差科普
先簡單科普一下,方差=平方的均值減去均值的平方,公式是:
比如,1、2、3、4、5這五個數(shù),平均數(shù)是3;
而「方差」是各個數(shù)據(jù)分別與其和的平均數(shù)之差的平方的和的平均數(shù):[(1-3)^2+(2-3)^2+(3-3)^2+(4-3)^2+(5-3)^2]/5=2
,也就是2。
方差小,就意味某個特征大多樣本的值比較相近;方差大,就意味著某個特征大多樣本的值都有差別。
方差選擇法也叫「低方差過濾」,顧名思義,就是設(shè)定一個方差的值,所有低于這個方差的特征都會被刪掉。
二、方差選擇API
sklearn.feature_selection 是特征選擇的API
sklearn.feature_selection.VarianceThreshold( threshold=0 )
- VarianceThreshold.fit_transform( data ):接收字典類型的原始數(shù)據(jù),返回方差過濾后的數(shù)字特征
- VarianceThreshold.inverse_transform( data ):將過濾后的數(shù)字特征,轉(zhuǎn)回原始數(shù)據(jù)
- VarianceThreshold.get_feature_names_out():返回特征名字
- VarianceThreshold.variances_:返回每個特征對應(yīng)的方差值
三、獲取數(shù)據(jù)集
這里我們使用鳶尾花數(shù)據(jù)集來做示例
from sklearn import datasets
# 初始化鳶尾花數(shù)據(jù)集
iris = datasets.load_iris()
# 打印數(shù)據(jù)特征
print(iris.data)
# 打印特征數(shù)總結(jié)
print(iris.data.shape)
輸出:
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
......
[5.9 3. 5.1 1.8]]
(150, 4)
從輸出結(jié)果可以看到,數(shù)據(jù)集現(xiàn)在有150條數(shù)據(jù),每條數(shù)據(jù)有4個特征。
四、進(jìn)行方差過濾
接下來我們進(jìn)行方差過濾,指定方差為0.2
from sklearn import feature_selection
from sklearn import datasets
# 初始化鳶尾花數(shù)據(jù)集
iris = datasets.load_iris()
# 初始化轉(zhuǎn)換器(指定方差為0.2)
vt = feature_selection.VarianceThreshold(threshold=0.2)
# 使用轉(zhuǎn)換器對數(shù)據(jù)進(jìn)行低方差過濾
result = vt.fit_transform(iris.data)
# 打印數(shù)據(jù)特征
print(result)
print(result.shape)
輸出:
[[5.1 1.4 0.2]
[4.9 1.4 0.2]
......
[5.9 5.1 1.8]]
(150, 3)
從輸出結(jié)果可以看到,轉(zhuǎn)換后的數(shù)據(jù)集有150條數(shù)據(jù),每條數(shù)據(jù)有3個特征,方差小于0.2的那個特征被過濾掉了。
接下來,我們把方差改成1
from sklearn import feature_selection
from sklearn import datasets
# 初始化鳶尾花數(shù)據(jù)集
iris = datasets.load_iris()
# 初始化轉(zhuǎn)換器(指定方差為1)
vt = feature_selection.VarianceThreshold(threshold=1)
# 使用轉(zhuǎn)換器對數(shù)據(jù)進(jìn)行低方差過濾
result = vt.fit_transform(iris.data)
# 打印數(shù)據(jù)特征
print(result)
print(result.shape)
輸出:
[[1.4]
[1.4]
......
[5.1]]
(150, 1)
從輸出結(jié)果可以看到,數(shù)據(jù)集的的特征變成了1個,方差小于1的那三個特征被過濾掉了。
五、獲取特征的方差值
接下來,我們獲取每一個特征的方差值,來驗證過濾的準(zhǔn)確性。
from sklearn import feature_selection
from sklearn import datasets
# 初始化鳶尾花數(shù)據(jù)集
iris = datasets.load_iris()
# 初始化轉(zhuǎn)換器(指定方差為1)
vt = feature_selection.VarianceThreshold(threshold=0.2)
# 使用轉(zhuǎn)換器對數(shù)據(jù)進(jìn)行低方差過濾
result = vt.fit_transform(iris.data)
# 獲取特征的方差值
print(vt.variances_)
輸出:文章來源:http://www.zghlxwxcb.cn/news/detail-540424.html
[0.68112222 0.18871289 3.09550267 0.57713289]
從輸出結(jié)果可以看到,4個特征的方差值,有3個大于0.2,有1個大于1,上述試驗的過濾結(jié)果符合預(yù)期。文章來源地址http://www.zghlxwxcb.cn/news/detail-540424.html
到了這里,關(guān)于【機(jī)器學(xué)習(xí)】特征降維 - 方差選擇法VarianceThreshold的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!