过滤法
单变量特征选择通过单变量统计检验选择特征
SelectKBest只保留K个最高分的特征
SelectPercentile只保留用户指定的百分比的最高得分的特征
使用常见的单变量统计检验
分类:
使用chi2卡方
f_classif方差分析
mutual_info_classif互信息
回归:
使用f_regression相关系数
mutual_info_regression互信息
# 方差过滤
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
X_var = VarianceThreshold(threshold=0.1).fit_transform(X)
print(X_var.shape)
# 卡方过滤
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
X_chi2 = SelectKBest(chi2, k=30).fit_transform(X, y)
print(X_chi2.shape)
from sklearn.feature_selection import SelectPercentile
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
X_select_p = SelectPercentile(chi2, percentile=30).fit_transform(X, y)
print(X_select_p.shape)
# f_classif过滤
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
X_f = SelectKBest(f_classif, k=20).fit_transform(X, y)
print(X_f.shape)
# mutual_info_classif过滤
from sklearn.feature_selection import SelectKBest, mutual_info_classif
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
X_m = SelectKBest(mutual_info_classif, k=30).fit_transform(X, y)
print(X_m.shape)
嵌入法
SelectFromModel是一个元转换器,可以与那些有coef_或者fearure_importances_属性的模型一起使用。如果coef_或者fearure_importances_小于阈值,认为特征是不重要的。
# 通过模型进行特征选择
from sklearn.datasets import load_digits
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
rf = RandomForestClassifier(n_estimators=100)
X_select_model = SelectFromModel(rf, threshold=0.01).fit_transform(X, y)
print(X_select_model.shape)
包装法
给特征赋予一个外部模型产生的权重(比如:线性模型系数),RFE递归使用越来越少的特征进行特征选择。首先,在原始数据上建立模型并且给每个特征一个权重;然后,消除绝对权重最小的特征,递归执行这个过程直到达到希望的特征数。
# 包装法
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_digits
digits = load_digits()
X = digits.data
y = digits.target
print(X.shape)
rf = RandomForestClassifier(n_estimators=100)
X_rfe = RFE(rf, n_features_to_select=30).fit_transform(X, y)
print(X_rfe.shape)
来源:oschina
链接:https://my.oschina.net/u/4381942/blog/4298145