使用了SequentialFeatureSelector,但没有提高模型精度

时间:2019-01-29 14:59:40

标签: python random-forest feature-selection

我正在选择用于构建客户流失预测模型的功能。使用RandomForestClassifier时,我的精度为0.9517,其中显示了16个特征。

但是,如果我分别使用带有RandomForestClassifier的16个特征的相同列表拟合模型,则其准确度得分为0.8714,为什么我使用了SequentialFeatureSelector选择的相同特征列表,但准确度得分却存在巨大差异?

  

[2019-01-28 17:51:16]特征:16/16-得分:   0.9517879681082387 [Parallel(n_jobs = 1)]:1中完成1 |过去:剩余3.6秒:0.0秒

rand_forest = RandomForestClassifier(bootstrap=True, 
                class_weight=None, criterion='gini',
                max_depth=None, max_features='auto', 
                max_leaf_nodes=None,
                min_impurity_decrease=0.0, min_impurity_split=None,
                min_samples_leaf=1, min_samples_split=2,
                min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=1,
                oob_score=False, random_state=None, verbose=0,
                warm_start=False)

SequentialFeatureSelector(clone_estimator=True, cv=0,
             estimator=rand_forest,
             floating=False, forward=True, k_features=16, n_jobs=1,
             pre_dispatch='2*n_jobs', scoring='accuracy', verbose=2)

xtr, xtst, ytr, ytst = train_test_split(x, y, random_state=5, test_size=0.2)

rfst = RandomForestClassifier(n_estimators=100)

rfstmodel = rfst.fit(xtr, ytr)

rfstmodel.score(xtst, ytst)

>>> 0.8714975845410629

1 个答案:

答案 0 :(得分:0)

随机森林分类器不仅将特征随机化,而且还将这些特征的分割随机化,因此,即使您的特征保持不变,每次也会随机生成特征分割,这可能会导致一些差异该模型。对于方差更小,更正规的模型,我建议使用Gradient Boosted Model或更好的XGBoost

  

Random Forest在增长的同时为模型增加了随机性   树。而不是在搜索最重要的功能的同时   分割节点,它会在随机节点中搜索最佳特征   功能子集。这导致了广泛的多样性,通常   可以得到更好的模型。

     

因此,在“随机森林”中,特征的随机子集是   该算法考虑了用于拆分节点的问题。 您   通过额外使用随机,甚至可以使树木更随机   每个功能的阈值,而不是寻找最佳功能   可能的阈值(就像普通的决策树一样)。

来源:https://towardsdatascience.com/the-random-forest-algorithm-d457d499ffcd