特徵選擇 SelectKBest

2021-10-06 06:10:55 字數 4833 閱讀 5574

官網:sklearn.feature_selection.selectkbest

根據給定的選擇器

選擇出前k個與標籤最相關的特徵。

class

sklearn

.feature_selection.selectkbest(score_func=

,*, k=

10)

引數說明:

parameters--

----

----

score_func: 可呼叫的

函式輸入兩個陣列x和y,並返回一對陣列(分數,p-value)或帶分數的

單個陣列。預設值為f_classif(請參見下文「另請參見」)。預設功能僅

適用於分類任務。

k:int

or 「all」, optional, 預設=

10 要選擇的主要特徵數(保留前幾個最佳特徵)。

「 all」選項繞過選擇,用於引數搜尋。

attributes--

----

----

scores_:array-like of shape (n_features,

) 特徵分數。

pvalues_:array-like of shape (n_features,

) 特徵分數的p值,如果score_func僅返回分數,則為none 。

官網示例:

使用 chi2方法 進行篩選特徵

從64個特徵中保留了20個最佳特徵

>>

>

from sklearn.datasets import load_digits

>>

>

from sklearn.feature_selection import selectkbest, chi2

>>

> x, y = load_digits(return_x_y=

true

)>>

> x.shape

(1797,64

)>>

> x_new = selectkbest(chi2, k=20)

.fit_transform(x, y)

>>

> x_new.shape

(1797,20

)

方法

'fit(self, x, y)'

在(x,y)上執行得分功能並獲得適當的功能。

相當於訓練模型吧。

parameters

x:array-like of shape (n_samples, n_features)

輸入訓練樣本。

y:array-like of shape (n_samples,

) 目標值(分類中的類標籤,回歸中的實數)。

returns

self:object

'fit_transform(self, x[, y])'

用x訓練模型,然後對其進行轉換。

parameters

x: of shape (n_samples, n_features)

y:ndarray of shape (n_samples,

), default=

none

目標值。

**fit_paramsdict:其他擬合引數。

returns

x_new:ndarray array of shape (n_samples, n_features_new)

轉換後的陣列。

'get_params(self[, deep])'

獲取此估計量的引數。

parameters

deep:

bool

, default=

true

如果為true,則將返回此估算器和作為估算器的包含子物件的引數。

returns

引數名稱對映到其值。

'get_support(self[, indices])'

獲取所選特徵的掩碼或整數索引

get a mask,

or integer index, of the features selected

'inverse_transform(self, x)'

反向轉換操作

parameters

x: array of shape [n_samples, n_selected_features]

輸入樣本。

returns

x_r: array of shape [n_samples, n_original_features]

在x中被transform刪除的特徵位置加入零列。

'set_params(self, \*\*params)'

設定此估算器的引數。

parameters

**params:

dict

估算器引數.

returns

self:

object

估算器例項。

'transform(self, x)'

將x縮小為指定的k個特徵。

parameters

x: array of shape [n_samples, n_features]

輸入樣本。

returns

x_new: array of shape [n_samples, n_selected_features]

僅保留k個最優特徵的輸入樣本。

會使用到:

scipy.stats.pearsonr - 皮爾森相關係數

sklearn.feature_selection.f_regression - 單變數線性回歸測試 資料

from sklearn.datasets import make_regression

x,y = make_regression(n_samples=

1000

, n_features=

3, n_informative=

1, noise=

100, random_state=

9527

)

分別計算每個特徵與標籤的相關係數

from scipy.stats import pearsonr

p1 = pearsonr(x[:,

0],y)p2 = pearsonr(x[:,

1],y)p3 = pearsonr(x[:,

2],y)

可以看出x的第二個特徵是重要特徵(相關係數最高)

print

(p1)

>>

>

(0.01293680050695129

,0.6828310401786694

)print

(p2)

>>

>

(0.6680920624164118

,2.8345376164035335e-130

)print

(p3)

>>

>

(0.03938982451397195

,0.21330062660673496

)

這裡使用的選擇器為 f_regression

且只保留乙個最佳(與結果相關係數最高的)特徵

from sklearn import feature_selection as fs

best = fs.selectkbest(score_func=fs.f_regression, k=1)

best.fit(x,y)

>>

>selectkbest(k=

1, score_func=

>

)

best.scores_

>>

>array(

[1.67054044e-01

,8.04573104e+02

,1.55086141e+00

])

x_new乙個1維資料

x_new = best.transform(x)

x_new.shape

>>

>

(1000,1

)

通過下邊可以看出,保留了第2個特徵;

與上邊計算的皮爾斯相關係數對應,且滿足我們資料特性。

x_new[:5

]>>

>array([[

-0.6872076],

[2.31728703],

[-1.51368674],

[-0.24881066],

[0.39894185]]

)

x[:5

]>>

>array([[

-1.25468454,-

0.6872076,-

0.60472765],

[-0.15208513

,2.31728703,-

1.44588579],

[0.3246091,-

1.51368674

,0.01249735],

[-0.43843568,-

0.24881066

,0.77710434],

[-0.36040751

,0.39894185,-

0.61578169]]

)

特徵選擇 單變數特徵選擇

1.selectkbest可以依據相關性對特徵進行選擇,保留k個評分最高的特徵。方差分析 分類問題使用f classif,回歸問題使用f regression。f classif 分類任務 跟目標的分類,將樣本劃分成n個子集,s1,s2,sn,我們希望每個子集的均值 1,2,n不相等。我們假設h0 ...

特徵工程之特徵選擇

在前一篇文章中我介紹了一些資料預處理的方法,原始資料在經過預處理之後可以被演算法處理了,但是實際中可能有一些特徵是沒有必要的,比如在中國採集的一些資料,那麼國籍就都是中國,其實也就沒有意義了,反映在統計量上就是方差過小,也就是樣本在這個特徵上變化很小。還有一種情況是特徵和最後的結果相關性很小,也就是...

特徵工程之特徵選擇

特徵選擇其實就是減少屬性個數,為什麼要這麼做呢?直接使用原始資料來訓練模型的話,雖然說在訓練模型上的準確率會非常高,但是在測試樣本上的準確率將會大打折扣,也就是會產生過擬合的現象。所以說需要選擇出最適合的屬性進行訓練。特徵選擇的原因 2 雜訊 部分特徵對 結果又影響 進行特徵選擇的時候有兩種情況 一...