特征选择可以对样本集做特征选择/降维,既可以提高估计器的准确率,又可以提高估计器在超高维数据集上的性能。
1.SelectKBest
SelectKBest是单变量特征选择的一个方法,快速简单。它通过选择基于单变量统计检验(univariate statistical tests)得出的最优特征来实现的。SelectKBest 会选择得分最高的K个特征,并其余的特征都删除。
ps. 需要注意的是,只对train data特征选择就好,因为真实数据我们是不知道test data的情况的。
feature_cols = baseline_data.columns.drop('outcome')
train, valid, _ = get_data_splits(baseline_data)
# Keep 5 features
selector = SelectKBest(f_classif, k=5)
X_new = selector.fit_transform(train[feature_cols], train['outcome'])
# fit_transform只会返回被选择的前5个特征
# inverse_transform会返回原始数据
selected_features = pd.DataFrame(selector.inverse_transform(X_new),
index=train.index,
columns=feature_cols)
selected_features.head()
# 返回选择的特征
selected_columns = selected_features.columns[selected_features.var() != 0]
valid[selected_columns].head()
2. SelectFromModel
以下是使用例子,基于L1正则化的特征提取:
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import SelectFromModel
train, valid, _ = get_data_splits(baseline_data)
X, y = train[train.columns.drop("outcome")], train['outcome']
# Set the regularization parameter C=1
logistic = LogisticRegression(C=1, penalty="l1", solver='liblinear', random_state=7).fit(X, y)
model = SelectFromModel(logistic, prefit=True)
X_new = model.transform(X)
网友评论