sklearn.feature_selection.SelectFromModel模型筛选特征
以随机森林为例,查看随机森林之类的模型使用的特征。有两种使用方式:
1, 使用未训练的模型
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
X = [[ 0.87, -1.34, 0.31 ],[-2.79, -0.02, -0.85 ],[-1.34, -0.48, -2.55 ],[ 1.92, 1.48, 0.65 ]]
y = [0, 1, 0, 1]# 输入参数包括estimator, threshold:筛选阈值, prefit=False:是否训练过,max_features:最大特征数
selector = SelectFromModel(estimator=LogisticRegression(), threshold=0.5).fit(X, y)# 筛选的特征的阈值
selector.threshold_ # 0.5# 特征支持的布尔表
selector.get_support() # array([False, True, False])# 对输入进行特征筛选
X_new = selector.transform(X)# 查看筛选出的特征名称,需要给出特征的名称列表,如果是pandas,就可以输入x.columns
selector.get_feature_names_out(['a', 'b', 'c']) # ['b']
2, 使用训练模型
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
X = [[ 0.87, -1.34, 0.31 ],[-2.79, -0.02, -0.85 ],[-1.34, -0.48, -2.55 ],[ 1.92, 1.48, 0.65 ]]
y = [0, 1, 0, 1]rfc = rfc=RandomForestClassifier(n_estimators=9, max_depth=6,random_state=9)
rfc.fit(X, y)
selector = SelectFromModel(rfc, prefit=True)# 筛选的特征的阈值
selector.threshold_ # 0.55249# 特征支持的布尔表
selector.get_support() # array([False, True, False])# 对输入进行特征筛选
X_new = selector.transform(X)# 查看筛选出的特征名称,需要给出特征的名称列表,如果是pandas,就可以输入x.columns
selector.get_feature_names_out(['a', 'b', 'c']) # ['b']