打卡第二十天

方差筛选

方差筛选是一种基于特征方差的特征选择方法。通过计算每个特征的方差,剔除方差较小的特征,因为这些特征对模型的贡献较小。

皮尔逊相关系数筛选

皮尔逊相关系数用于衡量特征与目标变量之间的线性相关性。通过计算每个特征与目标变量的相关系数,选择相关性较高的特征。

Lasso筛选

Lasso回归是一种带有L1正则化的线性回归方法,能够通过正则化系数将某些特征的权重压缩为零,从而实现特征选择。

树模型重要性

树模型(如决策树、随机森林、梯度提升树等)能够计算每个特征的重要性分数。通过训练树模型,可以根据特征重要性分数进行特征选择。

SHAP重要性

SHAP(SHapley Additive exPlanations)是一种基于博弈论的特征重要性解释方法。通过计算每个特征对模型输出的贡献,选择贡献较大的特征。

递归特征消除REF

递归特征消除(Recursive Feature Elimination, RFE)是一种通过递归地训练模型并剔除最不重要的特征来进行特征选择的方法。

作业:对心脏病数据集完成特征筛选,对比精度

对心脏病数据集应用上述六种特征筛选方法,分别训练模型并对比其精度。通过对比不同特征选择方法的效果,选择最优的特征组合以提高模型性能。

print("--- 方差筛选 (Variance Threshold) ---")

导入需要的工具库

from sklearn.feature_selection import VarianceThreshold # 方差筛选工具,用于剔除方差小的特征 import time # 用于记录代码运行时间,方便比较效率

记录开始时间,后面会计算整个过程耗时

start_time = time.time()

创建方差筛选器,设置方差阈值为0.01
阈值是指方差的最小值,低于这个值的特征会被删除(可以根据数据情况调整阈值)

selector = VarianceThreshold(threshold=0.01)

对训练数据进行方差筛选,fit_transform会计算每个特征的方差并剔除不满足阈值的特征
X_train是原始训练数据,X_train_var是筛选后的训练数据

x_train_var = selector.fit_transform(x_train)

对测试数据应用同样的筛选规则,transform会直接用训练数据的筛选结果处理测试数据
X_test是原始测试数据,X_test_var是筛选后的测试数据

x_test_var = selector.transform(x_test)

获取被保留下来的特征名称
selector.get_support()#返回一个布尔值列表,表示哪些特征被保留,这个是selector这个实例化的类的一个方法
X_train.columns是特征的名称,结合布尔值列表可以提取保留特征的名字

selected_features_var = x_train.columns[selector.get_support()].tolist()

打印筛选后保留的特征数量和具体特征名称,方便查看结果

print(f"方差筛选后保留的特征数量: {len(selected_features_var)}") print(f"保留的特征: {selected_features_var}")

创建一个随机森林分类模型,用于在筛选后的数据上进行训练和预测
random_state=42是为了保证每次运行结果一致,方便教学和对比

rf_model_var = RandomForestClassifier(random_state=42)

在筛选后的训练数据上训练模型
X_train_var是筛选后的特征数据,y_train是对应的目标标签

rf_model_var.fit(x_train_var, y_train)

使用训练好的模型对筛选后的测试数据进行预测
X_test_var是筛选后的测试特征数据,rf_pred_var是预测结果

rf_pred_var = rf_model_var.predict(x_test_var)

记录结束时间,计算整个训练和预测过程的耗时

end_time = time.time() print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")

打印模型在测试集上的分类报告,展示模型的性能
分类报告包括精确率、召回率、F1分数等指标,帮助评估模型好坏

print("\n方差筛选后随机森林在测试集上的分类报告:") print(classification_report(y_test, rf_pred_var))

打印混淆矩阵,展示模型预测的详细结果
混淆矩阵显示了真实标签和预测标签的对应情况,比如多少样本被正确分类,多少被错分

print("方差筛选后随机森林在测试集上的混淆矩阵:") print(confusion_matrix(y_test, rf_pred_var))

@@浙大疏锦行 

你可能感兴趣的:(机器学习,人工智能)