请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

bagging生成的DecisionTreeClassifier好像都是一样的

bobo老师,我发现bagging生成的DecisionTreeClassifier好像都是一样的,除了random_state,其他DecisionTree的特征都一样。

下面是我的代码:
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
dt_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=100, max_samples=100, bootstrap=True,oob_score=True)
dt_clf.fit(X, y)
print(dt_clf.estimators_)
print(dt_clf.oob_score_)

这是输出结果:
DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, 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, presort=False,
random_state=1522406438, splitter=‘best’), DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, 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, presort=False,
random_state=1447758011, splitter=‘best’), DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, 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, presort=False,
random_state=1886162999, splitter=‘best’), DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, 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, presort=False,
random_state=1931847904, splitter=‘best’), DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, 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, presort=False,
random_state=1672360509, splitter=‘best’), DecisionTreeClassifier(class_weight=None, criterion=‘gini’, max_depth=None,
max_features=None, 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, presort=False,
random_state=1862725847, splitter=‘best’)]
…………………………………………………………………………………………………………………………
不是说bagging要尽可能使得模型有差异化嘛,那DecisionTree的max_depth,max_features,criterion……不应该都不一样嘛?
怎么改能让每棵树的所有特征不一样?额,有这种操作吗 :)
还有一个问题就是,bagging这种操作能防止过拟合吗?因为毕竟每棵树看的训练集都不一样。我看到老师视频里的准确度都挺高的,那个准确度是真的准确吗?还是因为存在了过拟合,然后准确率提高了……bagging怎么结合留一法(leave one out)或者其他验证方式,来判断bagging到底是不是存在了过拟合?

正在回答

1回答

BaggingClassifier 的差异化体现在取样上。即max_samples和max_features两个参数。Bagging Classifier中的每个子模型,都是用原始样本的一小部分数据和每个数据的一小部分特征训练出来。我不知道你的数据是什么样子的,如果你的数据量很小,特征数也很小的话,max_samples和max_features设置不当,那么每个子模型都是使用近乎全部数据的全部特征训练出来的话,肯定是差不多的。


比如我看到你训练的模型,max_samples取的100,如果你的数据量只有100(或者小于100),那肯定得到决策树差不多。你的max_features参数没有设置,默认为1.0,即全部特征都参与训练,在这方面,随机性相当于没有。


你说的更多的基于DecisionTree的差异化,是随机森林。可以参考课程后续介绍的RandomForest,会提供更多基于决策树的参数设置。Bagging算法中的子模型不仅仅可以传入决策树,还可以传入任何的算法,他的随机性表现在每一个子模型训练数据的随机性上。


所有的机器学习算法,判断是否是过拟合的方式都是一样的。看是否在训练数据上准确率很高,但是在测试数据集上缺准确率很低(即泛化能力低)。判断是否过拟合和你使用什么算法无关:)


加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕婉清4872412 #1
    所有的机器学习算法,判断是否是过拟合的方式都是一样的。看是否在训练数据上准确率很高,但是在测试数据集上缺准确率很低(即泛化能力低)。判断是否过拟合和你使用什么算法无关:)
    
    但是我的train_test_split在split的时候也有随机性,就比如说我的random_state取666的时候,我最终用X_test,y_test测出来的准确率有90%,然而我把random_state设置为111的时候,我最后用测试集测出来的准确率只有87%,我把random_state设置为222的时候,我最后用测试集测出来的准确率只有86%……
    那我最后的准确率到底是多少呀@_@
    还有一个不懂的地方……如果我只用一棵决策树,我把它的参数调到非常非常好,最后测出来的准确率有95%,然而我用bagging的方法,准确率只有92%。如果真的是这样,那说明什么呢?那我该采用一棵树呢?还是bagging?
    谢谢bobo老师^_^
    回复 有任何疑惑可以回复我~ 2018-10-03 12:47:34
  • liuyubobobo 回复 提问者 慕婉清4872412 #2
    准确率的测定肯定有误差,你也可以这么理解:假设你的测试数据集只有一个数据。那么对于你训练的模型,对着一个数据来说,可能结果是正确的,也可能是错误的,这就意味着,你的准确率或者是100%,或者是0%!这矛盾吗?看起来很矛盾,但其实不矛盾。说白了,对于测试数据来说,也是,数据量越大越好,数据量越大,越趋于稳定准确。所以,对于你说的第一个问题,你可以合理的认为,你的准确率在85%以上。当然,如果你一定特别严谨,可以使用统计学的手段,将所有的随机组合取遍,最后求出准确率的均值,还可以得到相应的标准差:)
    回复 有任何疑惑可以回复我~ 2018-10-03 14:10:54
  • 对韵的第二个问题,说明,对于你当前的数据,决策树的效果更好。这首先是可能的。请回顾免费的午餐定理:没有一种算法比另一种算法绝对性的好。不过另一方面,也要保持怀疑。当有更多的数据进来的时候,是否意味着决策树的效果真的好?很有可能不是!在机器学习领域,数据比大多数人,尤其是初学者,想象的要重要很多很多:)
    回复 有任何疑惑可以回复我~ 2018-10-03 14:13:42
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信