邦纳:结构化数据分析的利器
1.邦纳介绍
邦纳(Boruta)是一种基于随机森林的特征选择算法,它可以帮助我们在海量的特征中找出最重要、最有用的那些特征。
2.邦纳如何工作
邦纳利用随机森林作为基本分类器,对于每个特征,邦纳会先生成若干个随机特征集合(随机森林),然后判断当前特征在这些随机特征集合中是否有重要性,重要性尺度为 z-score。如果在大部分随机特征集合中,该特征都被其他特征完全代替,那么它的重要性就很低。反之,如果在大部分随机特征集合中,该特征最好的分类效果都不弱于被代替的特征,那么它的重要性就很高。
邦纳还利用了一个置换测试的思想,将原始变量的顺序随机打乱,得到一个乱序后的变量集合,再次进行特征选择,得到这个乱序后的变量集合和原变量集合都选中的变量被认为更加重要。
最终,邦纳会给出每个变量的 z-score 值,通过比较这些值来确定哪些变量是最重要的。
3.邦纳的优点
邦纳作为一种无需领域知识的特征选择算法,具有以下优点:
(1)准确性高:邦纳所得到的特征可以与基于领域知识的特征选择算法做到同样的准确率。
(2)鲁棒性强:邦纳对于特征集中的噪声或冗余信息并不敏感。
(3)易于实现:邦纳已被包含在 scikit-learn 中,可以方便地使用。
4.邦纳的应用场景
邦纳适用于以下场景:
(1)数据集中有大量特征,但是我们不知道哪些特征对问题最有帮助。
(2)对于规模很大的数据集,邦纳可以帮助我们迅速缩小待处理的特征集。
(3)邦纳能够自动发现隐藏在数据中的复杂关系,为我们提供更好的数据理解和决策依据。
5.实战演练
我们以 scikit-learn 内置数据集 iris 数据集为例演示如何使用邦纳进行特征选择。
```python
from sklearn.ensemble import RandomForestClassifier
from boruta import BorutaPy
from sklearn.datasets import load_iris
加载 iris 数据集
iris = load_iris()
X = iris.data
y = iris.target
初始化随机森林分类器
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
初始化 Boruta 特征选择器
boruta = BorutaPy(rf, n_estimators='auto', verbose=2, random_state=1)
开始特征选择
boruta.fit(X, y)
输出选择结果
selected_features = [iris.feature_names[i] for i in range(len(iris.feature_names)) if boruta.support_[i]]
print('Selected features:', selected_features)
```
运行结果:
```
Iteration: 1 / 100
Iteration: 2 / 100
Iteration: 3 / 100
Iteration: 4 / 100
Iteration: 5 / 100
Iteration: 6 / 100
Iteration: 7 / 100
Iteration: 8 / 100
Iteration: 9 / 100
Iteration: 10 / 100
Iteration: 11 / 100
Iteration: 12 / 100
Iteration: 13 / 100
Iteration: 14 / 100
Iteration: 15 / 100
Iteration: 16 / 100
Iteration: 17 / 100
Iteration: 18 / 100
Iteration: 19 / 100
Iteration: 20 / 100
Iteration: 21 / 100
Iteration: 22 / 100
Iteration: 23 / 100
Iteration: 24 / 100
Iteration: 25 / 100
Iteration: 26 / 100
Iteration: 27 / 100
Iteration: 28 / 100
Iteration: 29 / 100
Iteration: 30 / 100
Iteration: 31 / 100
Iteration: 32 / 100
Iteration: 33 / 100
Iteration: 34 / 100
Iteration: 35 / 100
Iteration: 36 / 100
Iteration: 37 / 100
...
Iteration: 88 / 100
Iteration: 89 / 100
Iteration: 90 / 100
Iteration: 91 / 100
Iteration: 92 / 100
Iteration: 93 / 100
Iteration: 94 / 100
Iteration: 95 / 100
Iteration: 96 / 100
Iteration: 97 / 100
Iteration: 98 / 100
Iteration: 99 / 100
Iteration: 100 / 100
Selected features: ['petal length (cm)', 'petal width (cm)']
```
从结果中我们可以看到,邦纳最终选择了两个特征:花瓣长度和花瓣宽度。
6.结语
邦纳能够帮助我们从大量的特征中找到最值得关注的那些特征,将其用于结构化数据分析中。作为一个轻量级的特征选择器,它不仅能提高我们的建模效率和准确率,还能让我们从数据中挖掘出更多有用的信息。