用stacking方法对数据集做特征选择的代码
时间: 2024-05-03 18:23:09 浏览: 9
以下是用Stacking方法对数据集做特征选择的Python代码示例:
```
# 导入库
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.feature_selection import SelectFromModel
# 生成模拟数据集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_redundant=0, random_state=42)
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义基础模型
estimators = [('rf', RandomForestClassifier(n_estimators=10, random_state=42)),
('lr', LogisticRegression(random_state=42))]
# 定义堆叠模型
stacking_model = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())
# 训练堆叠模型
stacking_model.fit(X_train, y_train)
# 使用SelectFromModel方法进行特征选择
sfm = SelectFromModel(stacking_model, threshold=0.1)
sfm.fit(X_train, y_train)
# 输出选择的特征
selected_features = X_train.columns[sfm.get_support()]
print(selected_features)
# 重新训练模型,只使用选择的特征
X_train_selected = sfm.transform(X_train)
X_test_selected = sfm.transform(X_test)
stacking_model_selected = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())
stacking_model_selected.fit(X_train_selected, y_train)
# 测试模型准确度
y_pred = stacking_model_selected.predict(X_test_selected)
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
```
首先,我们使用`make_classification`函数生成一个模拟数据集。然后,我们将数据集拆分为训练集和测试集。接下来,我们定义了两个基础模型:随机森林分类器和逻辑回归分类器,并将它们作为输入传递给堆叠分类器。然后,我们使用`StackingClassifier`函数训练堆叠模型,并使用`SelectFromModel`方法进行特征选择。最后,我们使用选择的特征重新训练堆叠模型,并使用测试集评估准确度。
值得注意的是,我们在`SelectFromModel`函数中设置了`threshold`参数,表示只选择重要性大于阈值的特征。您可以根据需要调整此参数。