这是Python特征工程系列原创文章,我的第187篇原创文章。
应用背景介绍:??????
????? ? 如果有一个包含数十个甚至数百个特征的数据集,每个特征都可能对你的机器学习模型的性能有所贡献。但是并不是所有的特征都是一样的。有些可能是冗余的或不相关的,这会增加建模的复杂性并可能导致过拟合。特征重要性分析可以识别并关注最具信息量的特征,从而带来以下几个优势:
改进模型性能
能减少过度拟合
更快训练和推理
增强可解释性
前期相关回顾:
【Python特征工程系列】教你利用XGBoost模型分析特征重要性(源码)
【Python特征工程系列】利用梯度提升(GradientBoosting)模型分析特征重要性(源码)
【Python特征工程系列】8步教你用决策树模型分析特征重要性(源码)
【Python特征工程系列】利用随机森林模型分析特征重要性(源码)
本期相关知识:
???????AdaBoost(Adaptive Boosting),自适应增强,是一种集成学习方法,通过组合多个弱分类器来构建一个强分类器。在AdaBoost中,每个弱分类器都会根据之前分类结果的准确性进行加权,从而使得错误分类的样本在后续的训练中得到更多的关注。在scikit-learn库中,AdaBoost模型的特征重要性可以通过feature_importances_属性来获取。
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)
target = 'target'
features = df.columns.drop(target)
?特征变量如下:
X_train, X_test, y_train, y_test = train_test_split(df[features], df[[target]], test_size=0.2, random_state=0)
?X_train如下:
# 归一化
mm1 = MinMaxScaler() # 特征进行归一化
X_train_m = mm1.fit_transform(X_train)
mm2 = MinMaxScaler() # 标签进行归一化
y_train_m = mm2.fit_transform(y_train)
?AdaBoost训练之前需要进行归一化处理!
model = AdaBoostClassifier(n_estimators=100, random_state=0)
model.fit(X_train, y_train)
feature_importance = model.feature_importances_
feature_names = features
?feature_importance如下:
importance_df = pd.DataFrame({'Feature': feature_names, 'Importance': feature_importance})
?importance_df如下:
importance_df = importance_df.sort_values(by='Importance', ascending=False)
排序后的 importance_df如下:
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df)
plt.title('Feature Importance')
plt.xlabel('Importance')
plt.ylabel('Feature')
plt.show()
?可视化结果如下:
本期内容就到这里,我们下期再见!需要数据集和源码的小伙伴可以关注底部公众号添加作者微信!
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。