方差筛选是一种基于特征方差的特征选择方法。通过计算每个特征的方差,剔除方差较小的特征,因为这些特征对模型的贡献较小。
皮尔逊相关系数用于衡量特征与目标变量之间的线性相关性。通过计算每个特征与目标变量的相关系数,选择相关性较高的特征。
Lasso回归是一种带有L1正则化的线性回归方法,能够通过正则化系数将某些特征的权重压缩为零,从而实现特征选择。
树模型(如决策树、随机森林、梯度提升树等)能够计算每个特征的重要性分数。通过训练树模型,可以根据特征重要性分数进行特征选择。
SHAP(SHapley Additive exPlanations)是一种基于博弈论的特征重要性解释方法。通过计算每个特征对模型输出的贡献,选择贡献较大的特征。
递归特征消除(Recursive Feature Elimination, RFE)是一种通过递归地训练模型并剔除最不重要的特征来进行特征选择的方法。
对心脏病数据集应用上述六种特征筛选方法,分别训练模型并对比其精度。通过对比不同特征选择方法的效果,选择最优的特征组合以提高模型性能。
print("--- 方差筛选 (Variance Threshold) ---")
from sklearn.feature_selection import VarianceThreshold # 方差筛选工具,用于剔除方差小的特征 import time # 用于记录代码运行时间,方便比较效率
start_time = time.time()
selector = VarianceThreshold(threshold=0.01)
x_train_var = selector.fit_transform(x_train)
x_test_var = selector.transform(x_test)
selected_features_var = x_train.columns[selector.get_support()].tolist()
print(f"方差筛选后保留的特征数量: {len(selected_features_var)}") print(f"保留的特征: {selected_features_var}")
rf_model_var = RandomForestClassifier(random_state=42)
rf_model_var.fit(x_train_var, y_train)
rf_pred_var = rf_model_var.predict(x_test_var)
end_time = time.time() print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")
print("\n方差筛选后随机森林在测试集上的分类报告:") print(classification_report(y_test, rf_pred_var))
print("方差筛选后随机森林在测试集上的混淆矩阵:") print(confusion_matrix(y_test, rf_pred_var))
@@浙大疏锦行