在RandomForestRegressors列表上调用np.array会返回DecisionTreeRegressors数组

时间:2014-05-29 05:27:18

标签: python numpy scikit-learn

当我尝试将RandomForestRegressors列表转换为numpy数组时,我得到一个决策树数组。我如何获得一个RandomForestRegressors数组呢?

e.g。

clf0=RandomForestRegressor()
clf1=RandomForestRegressor()

X = np.random.randn(10,1)
y = np.random.randn(10,1)

clf0.fit(X,y)
clf1.fit(X,y)

m = np.array( [clf0, clf1 ] )

m.shape

Out[1]: (2, 10)

我希望m.shape为(2,),而不是(2,10)。它应该禁止RandomForestRegressors,而不是DecisionTreeRegressors。

1 个答案:

答案 0 :(得分:1)

最近在scikit-learn邮件列表上回答了这个问题:随机森林表现为决策树的sequence

>>> len(clf0)
10
>>> clf0[:2]
[DecisionTreeRegressor(compute_importances=None, criterion='mse',
           max_depth=None, max_features='auto', max_leaf_nodes=None,
           min_density=None, min_samples_leaf=1, min_samples_split=2,
           random_state=1087328618, splitter='best'),
 DecisionTreeRegressor(compute_importances=None, criterion='mse',
           max_depth=None, max_features='auto', max_leaf_nodes=None,
           min_density=None, min_samples_leaf=1, min_samples_split=2,
           random_state=357905606, splitter='best')]

NumPy选择了这个并将RF本身转换为数组。解决方法很简单:

>>> m = np.empty(2, object)
>>> m[:] = clf0, clf1
>>> m
array([ RandomForestRegressor(bootstrap=True, compute_importances=None,
           criterion='mse', max_depth=None, max_features='auto',
           max_leaf_nodes=None, min_density=None, min_samples_leaf=1,
           min_samples_split=2, n_estimators=10, n_jobs=1, oob_score=False,
           random_state=None, verbose=0),
       RandomForestRegressor(bootstrap=True, compute_importances=None,
           criterion='mse', max_depth=None, max_features='auto',
           max_leaf_nodes=None, min_density=None, min_samples_leaf=1,
           min_samples_split=2, n_estimators=10, n_jobs=1, oob_score=False,
           random_state=None, verbose=0)], dtype=object)

(请注意,您的y形状错误。它应该是(10,),而不是(10, 1)。)