sklearn做特征选择

2020-10-09  本文已影响0人  生信编程日常

特征选择可以对样本集做特征选择/降维,既可以提高估计器的准确率,又可以提高估计器在超高维数据集上的性能。

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)
上一篇 下一篇

猜你喜欢

热点阅读