- 根据特征选择的形式又可以将特征选择方法分为3种:
from sklearn.feature_selection import VarianceThreshold
"""
var:方差
data:特征数组
filter_data:返回特征数组
"""
filter_data = VarianceThreshold(threshold=var).fit_transform(data)
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
"""
K:返回的特征数
data:特征数组
label:数据标签
filter_data:返回特征数组
"""
filter_data = SelectKBest(f_regression, k=K).fit_transform(data, label)
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import mutual_info_classif as MIC
"""
K:返回的特征数
data:特征数组
label:数据标签
filter_data:返回特征数组
"""
filter_data = SelectKBest(MIC, k=K).fit_transform(data, label)
我们希望选取p值小于0.05或0.01的特征,这些特征与标签时显著线性相关的。
使用python sklearn包实现如下:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_classif
"""
K:返回的特征数
data:特征数组
label:数据标签
filter_data:返回特征数组
"""
filter_data = SelectKBest(f_classif, k=K).fit_transform(data, label)
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.svm import SVC
"""
estimator:训练模型
K:返回的特征数
data:特征数组
label:数据标签
filter_data:返回特征数组
"""
# 用rbf核进行筛选是不可以的,SVR中不提供rbf特征选择的逻辑,对于支持向量回归可以用linear进行筛选
svc = SVC(kernel='linear')
filter_data = RFE(estimator=svc, n_features_to_select=K, step=2000).fit_transform(data_set, label)
# 使用随机森林
model = RFC(n_estimators=10, random_state=0)
filter_data = RFE(estimator=model, n_features_to_select=K, step=2000).fit_transform(data_set, label)
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier as RFC
"""
data:阈值
data_set:数据集
label:数据标签
filter_data:返回特征数组
"""
# GBDT作为基模型的特征选择
filter_data = SelectFromModel(GradientBoostingClassifier(), threshold=data).fit_transform(data_set, label)
# 使用随机森林
model = RFC(n_estimators=10, random_state=0)
filter_data = SelectFromModel(estimator=model, threshold=data).fit_transform(data_set, label)
优点:
缺点:
from sklearn.decomposition import PCA
"""
K:返回特征数
data_set:数据集
filter_data:返回特征数组
"""
# 主成分分析法,返回降维后的数据
# 参数n_components为主成分数目
filter_data = PCA(n_components=K).fit_transform(data_set)
优点:
缺点:
使用python sklearn包实现如下:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
"""
K:返回特征数
data_set:数据集
filter_data:返回特征数组
label:数据集标签
"""
# 主成分分析法,返回降维后的数据
# 参数n_components为主成分数目
filter_data = LDA(n_components=K).fit_transform(data_set, label)