特征选择

过滤法

单变量特征选择通过单变量统计检验选择特征

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)

你可能感兴趣的:(机器学习)