当我尝试将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。
答案 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)
。)