导入模块:
from sklearn.ensemble import RandomForestClassifier
主要参数:
RandomForestClassifier(
n_estimators=10,
criterion=’gini’,
max_depth=None,
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0, max_features=’auto’,
max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
bootstrap=True,
oob_score=False,
n_jobs=1,
verbose=0,
warm_start=False,
class_weight=None)
n_estimators : integer, optional (default=10)
随机森林中树的个数,即学习器的个数。
max_features : (default=”auto”)
划分叶子节点,选择的最大特征数目
n_features为全部的特征数
If “auto”, then max_features=sqrt(n_features).
•If “sqrt”, then max_features=sqrt(n_features) (same as “auto”).
•If “log2”, then max_features=log2(n_features).
•If None, then max_features=n_features.和传统决策树叶子划分的情况一致
max_depth : 整型,可选(default=None)
树的最大深度,如果选择default=None,树就一致扩展,直到所有的叶子节点都是同一类样本,或者达到最小样本划分(min_samples_split)的数目。
min_samples_split : (default=2)
最小样本划分的数目,就是样本的数目少于等于这个值,就不能继续划分当前节点了
min_samples_leaf : int, float, optional (default=1)
叶子节点最少样本数,如果某叶子节点数目这个值,就会和兄弟节点一起被剪枝。
min_weight_fraction_leaf:叶子节点最小的样本权重和
max_leaf_nodes: (default=None)
最大叶子节点数,默认是”None”,即不限制最大的叶子节点数
min_impurity_split:节点划分的最小不纯度,是结束树增长的一个阈值,如果不纯度超过这个阈值,那么该节点就会继续划分,否则不划分,成为一个叶子节点。
min_impurity_decrease : float, optional (default=0.)
最小不纯度减少的阈值,如果对该节点进行划分,使得不纯度的减少大于等于这个值,那么该节点就会划分,否则,不划分。
bootstrap : boolean, optional (default=True)
自助采样,又放回的采样,大量采样的结果就是初始样本的63.2%作为训练集。默认选择自助采样法。
oob_score : bool (default=False)
out-of-bag estimate,包外估计;是否选用包外样本(即bootstrap采样剩下的36.8%的样本)作为验证集,对训练结果进行验证,默认不采用。
n_jobs : integer, optional (default=1)
并行使用的进程数,默认1个,如果设置为-1,该值为总的核数。
random_state :(default=None)
随机状态,默认由np.numpy生成
verbose:int, optional (default=0)
显示输出的一些参数,默认不输出。
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification#导入训练集
X,y = make_classification(n_samples=1000, n_features=4,n_informative=2, n_redundant=0, random_state=0, shuffle=False)
clf = RandomForestClassifier(max_depth=2,random_state=0)
clf.fit(X, y)
#可以输出4个特征的特征重要性
print(clf.feature_importances_)
#结果:[ 0.17287856 0.80608704 0.01884792 0.00218648]
# 预测
print(clf.predict([[0, 0, 0, 0]]))
from sklearn.model_selection import GridSearchCV
n_estimators = range(100,500,50)
hyper = {'n_estimators':n_estimators}
gd = GridSearchCV(estimator=RandomForestClassifier(random_state=0),param_grid=hyper,verbose=True)
#estimator,param_grid, verbose 是GridSearchCV()的参数,param_grid=hyper负责把先前设置的参数传给RandomForestClassifier()
gd.fit(X,y)
print(gd.best_score_)#输出最高的准确率
print(gd.best_estimator_)#输出最好的学习器,包括一系列参数
#得到最优参数后,再重新训练一次