在数据科学和机器学习的工作流程中,特征选择是一个关键步骤。通过评估每个特征对模型预测能力的影响,我们可以选择最有意义的特征(指标),从而提高模型的性能并减少过拟合。本文将介绍如何使用 Python 的 Seaborn 和 Matplotlib 库绘制特征重要性图(即条形图),以帮助我们可视化特征的重要性。
准备工作
首先,我们需要安装必要的库。如果您还没有安装 Pandas、Matplotlib 和 Seaborn,可以使用以下命令进行安装:
pip install pandas matplotlib seaborn
数据准备
在本示例中,我们创建一个简单的字典,模拟特征及其重要性分数。然后,我们将使用 Pandas 将其转换为 Series,以便更方便地进行处理和可视化。在具体的实际例子应用中,可以通过代码直接读取 csv/xlsx 等格式的数据。
import pandas as pd
# 定义特征及其重要性值
data_dict = {
'Vasodilator_1': 0.005994,
'HDL': 0.006587,
'BNP': 0.016333,
'Cr': 0.018373,
'Statins_1': 0.020511,
'Diabetes_1': 0.024206,
'Antibiotics_1': 0.029286,
'Cr_new_1': 0.029618,
'CtnI': 0.033793,
'Oliguria_1': 0.035396
}
# 将字典转换为 Pandas Series
selected_features = pd.Series(data_dict)
绘制特征重要性图
接下来,我们将使用 Seaborn 和 Matplotlib 绘制柱状图,以展示特征的重要性。
import matplotlib.pyplot as plt
import seaborn as sns
# 创建图形,设置图形大小
plt.figure(figsize=(10, 6))
# 使用 Seaborn 绘制条形图
barplot = sns.barplot(x=selected_features.values, y=selected_features.index, palette='viridis')
# 设置图表标题
plt.title('Feature Importance from Lasso Regression', fontsize=14)
# 反转y轴,使得重要性最高的特征在顶部
plt.gca().invert_yaxis()
# 设置x轴和y轴的标签
plt.xlabel('Feature Importance', fontsize=13)
plt.ylabel('Variable', fontsize=13)
# 调整图像在画布中的位置,避免元素重叠
plt.tight_layout()
# 隐藏图表的上边框和右边框
barplot.spines['top'].set_visible(False)
barplot.spines['right'].set_visible(False)
# 在每个柱子上显示对应的数值
for p in barplot.patches:
barplot.annotate(
format(p.get_width(), '.3f'), # 格式化数值到小数点后3位
(p.get_width() + 0.001, p.get_y()), # 设置注释位置
ha='center', va='bottom', fontsize=10, color='black', # 设置对齐方式和字体
xytext=(0, 7), # 纵向偏移
textcoords='offset points' # 偏移单位为点
)
# 保存图像为 PDF 文件
plt.savefig('Feature_Importance.pdf')
# 显示图像
plt.show()
代码解释
- 设置图形大小:使用
plt.figure()
设置图形的宽度和高度。 - 绘制柱状图:使用
sns.barplot()
绘制柱状图,其中 x 轴表示特征重要性,y 轴表示特征名称。 - 反转 y 轴:使用
invert_yaxis()
使得重要性最高的特征在顶部。 - 添加标签和标题:设置 x 轴和 y 轴的标签以及图表标题。
- 隐藏边框:隐藏不必要的图表边框,使得图表更加美观。
- 标注每个柱子:在每个柱子上添加对应的数值,以便于查看特征的重要性。
- 保存和显示图像:将生成的图像保存为 PDF 文件,并显示出来。