首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制与最佳参数相对应的随机森林树

如何绘制与最佳参数相对应的随机森林树
EN

Stack Overflow用户
提问于 2020-05-31 05:17:26
回答 2查看 5.4K关注 0票数 4

Python: 3.6

窗户: 10

关于兰登森林和眼前的问题,我几乎没有什么问题:

我使用Gridsearch运行回归问题使用随机森林。我想绘制对应于网格搜索发现的最佳匹配参数的树。这是密码。

代码语言:javascript
复制
    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=55)

    # Use the random grid to search for best hyperparameters
    # First create the base model to tune
    rf = RandomForestRegressor()
    # Random search of parameters, using 3 fold cross validation, 
    # search across 100 different combinations, and use all available cores
    rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, n_iter = 50, cv = 5, verbose=2, random_state=56, n_jobs = -1)
    # Fit the random search model
    rf_random.fit(X_train, y_train)

    rf_random.best_params_

最好的参数是:

代码语言:javascript
复制
    {'n_estimators': 1000,
     'min_samples_split': 5,
     'min_samples_leaf': 1,
     'max_features': 'auto',
     'max_depth': 5,
     'bootstrap': True}
  1. 如何使用上述参数绘制这棵树?
  2. 我的因变量y位于范围0,1中,所有预测变量都是二进制变量或范畴变量。在输入输出特征空间中,哪种算法一般都能很好地工作。我试过兰登森林。(没有给出好的结果)。注y变量是一种比值,因此它介于0和1. Example: Expense on food/Total Expense之间。
  3. 上面的数据是倾斜的,这意味着从属变量或y变量在60%的数据中有value=1,在其余的数据中有0到1之间。比如0.66, 0.87等等。
  4. 因为我的数据只有二进制{0,1}和分类变量{A,B,C}。是否需要将其转换为one-hot encoding变量以使用随机林?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-03 17:02:58

关于情节(恐怕你的其他问题太宽泛了,一般的想法是避免同时问多个问题):

适合您的RandomizedSearchCV导致了一个rf_random.best_estimator_,它本身就是一个随机森林,其参数显示在您的问题中(包括'n_estimators': 1000)。

根据文档,拟合的RandomForestRegressor包含一个属性:

estimators_ : list of DecisionTreeRegressor 拟合次估计器的集合。

因此,要绘制任意一棵随机森林的树,您应该使用

代码语言:javascript
复制
from sklearn import tree
tree.plot_tree(rf_random.best_estimator_.estimators_[k])

代码语言:javascript
复制
from sklearn import tree
tree.export_graphviz(rf_random.best_estimator_.estimators_[k])

对于所需的k (在您的情况下为[0, 999] )(一般情况下为[0, n_estimators-1])。

票数 2
EN

Stack Overflow用户

发布于 2020-05-31 08:39:57

请允许我在回答你的问题之前退后一步。

理想情况下,人们应该进一步深入研究best_params_ of RandomizedSearchCV输出,通过GridSearchCVRandomizedSearchCV将检查您的参数,而不尝试所有可能的选项。然后,一旦您有了best_params_ of RandomizedSearchCV,我们就可以在更窄的范围内研究所有可能的选项。

您没有在代码输入中包括random_grid参数,但我希望您执行这样的GridSearchCV:

代码语言:javascript
复制
# Create the parameter grid based on the results of RandomizedSearchCV
param_grid = {
    'max_depth': [4, 5, 6],
    'min_samples_leaf': [1, 2],
    'min_samples_split': [4, 5, 6],
    'n_estimators': [990, 1000, 1010]
}
# Fit the grid search model
grid_search = GridSearchCV(estimator = rf, param_grid = param_grid, 
                          cv = 5, n_jobs = -1, verbose = 2, random_state=56)

上面所做的就是遍历param_grid中所有可能的参数组合,并给出最佳的参数。

现在来问你们的问题:

  1. 随机森林是多棵树的组合-所以你没有一个树,你可以画。相反,你可以做的是绘制1棵或更多的随机森林使用的单株树。这可以通过函数来实现。阅读一下文档和这个所以问题,以便更多地理解它。
  2. 你先试过简单的线性回归吗?
  3. 这将影响您将使用何种精度度量来评估您的模型的适合性/准确性。在处理不平衡/倾斜的数据时,会想到精确性、回忆性和F1分数
  4. 是的,在拟合随机森林之前,必须将分类变量转换为虚拟变量。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62111883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档