Do random forests use weak learners (like XGBoost) or fully grown trees? So it sounds like boosting techniques (eg. XGBoost) uses weak learners (stumps) to gradually learn sequentially. This is not in dispute I hope.
However, with bagging techniques (eg. Random Forest) I'm not sure if it grows weak learners (like stumps) in parallel, or fully grown trees in parallel? Since the definition of "Ensemble modeling" is using many weak learners to form 1 powerful model, I'm leaning towards Random Forests using stumps, but I can be swayed the other direction as well?
 A: Xgboost can use deep or shallow trees (you can set a maximum tree depth). The default xgboost tree depth is 6; see the xgboost documentation.
Likewise, random forest can use deep or shallow trees for the same reason. For example, the implementation in sklearn.ensemble.RandomForestClassifier has no maximum depth by default, so the behavior is "nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples."
A: The original motivation for random forests is to make decision trees less overfit, and in that sense fully grown trees are the expectation.  However, in practice I find that some pruning still provides a benefit.
Stumps are quite unlikely to be optimal though.  Unlike boosting, where each subsequent tree improves upon the current fit, bagging weak learners doesn't let them learn from each other.  Most likely you'll end up with lots of the stumps being exactly the same: their bags just aren't different enough from each other to choose different splits.
