这是我的第258篇原创文章。
一、引言
Boruta是一种基于随机森林算法的特征筛选方法。其核心是基于两个思想:随机生成的特征(shadow features)和 不断迭代(循环),它通过循环比较原始特征(real features)和随机生成的特征(shadow features)的重要性来确定哪些特征与因变量相关。它可以应用于任何需要特征选择的监督学习问题,帮助我们确定哪些特征与因变量相关,从而更好地理解数据并建立更准确的预测模型。
二、实现过程
2.1 准备数据
data = pd.read_csv(r'dataset.csv')
df = pd.DataFrame(data)
df:
2.2 数据划分
# 目标变量和特征变量
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)
2.3 创建Boruta对象
基于随机森林分类器创建一个Boruta的选择对象:
model = RandomForestClassifier(n_estimators=100, random_state=0)
feat_selector = BorutaPy(model, n_estimators='auto', verbose=2, random_state=1)
feat_selector.fit(np.array(X_train), np.array(y_train))
2.4 特征选择
1、输出各个特征的重要性排名:
print('\n Feature ranking:')
print(pd.DataFrame({"feature":features, 'feature_ranking':feat_selector.ranking_}))
2、特征是否被选择:
print('\n Selected features:')
print(pd.DataFrame({"feature":features, 'Selected':feat_selector.support_}))
返回一个布尔类型的数组,代表每个特征是否被选择。如果特征被选择,对应的值为True,否则为False。
3、是否存在一些弱特征被选择:
print('\n Support for weak features:')
print(pd.DataFrame({"feature":features, 'Selected':feat_selector.support_weak_}))
返回一个布尔类型的数组,代表是否存在一些弱特征被选择。如果特征是弱特征且被选择,对应的值为True,否则为False。
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。