我正在选择用于构建客户流失预测模型的功能。使用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
答案 0 :(得分:0)
随机森林分类器不仅将特征随机化,而且还将这些特征的分割随机化,因此,即使您的特征保持不变,每次也会随机生成特征分割,这可能会导致一些差异该模型。对于方差更小,更正规的模型,我建议使用Gradient Boosted Model或更好的XGBoost。
Random Forest在增长的同时为模型增加了随机性 树。而不是在搜索最重要的功能的同时 分割节点,它会在随机节点中搜索最佳特征 功能子集。这导致了广泛的多样性,通常 可以得到更好的模型。
因此,在“随机森林”中,特征的随机子集是 该算法考虑了用于拆分节点的问题。 您 通过额外使用随机,甚至可以使树木更随机 每个功能的阈值,而不是寻找最佳功能 可能的阈值(就像普通的决策树一样)。
来源:https://towardsdatascience.com/the-random-forest-algorithm-d457d499ffcd