一、Random Forest
随机森林sklearn中有封装好的类库,不仅有对特征和数据集的随机选择,在节点划分上,在随机的特征子集上寻找最优划分特征(这也是开源库比自己实现的效果好的原因,在细微处都是有优化的,同时,看别人写的源码和自己实现都是获益匪浅)。
使用实例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X, y = datasets.make_moons(n_samples=500, noise=0.3, random_state=42)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show()
from sklearn.ensemble import RandomForestClassifier
#n_estimators生产多少个分类器
rf_clf = RandomForestClassifier(n_estimators=500,random_state=666,oob_score=True,n_jobs=-1)
rf_clf.fit(X,y)
这个fit的模型参数是这样:
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=None, max_features='auto', max_leaf_nodes=None,
min_impurity_split=1e-07, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
n_estimators=500, n_jobs=-1, oob_score=True, random_state=666,
verbose=0, warm_start=False)
这里的参数是由决策树和Bagging共同组成的
然后我们跑一下结果:
rf_clf.oob_score_
二、Extra-Trees
也就是Extra-Random-Trees,极其随机的森林,和随机森林的区别在节点的划分上,使用随机的阈值和随机的特征,这种策略使得模型更加随机,抑制了过拟合,对异常点的容忍度变大,但是增大了模型的偏差(随机森林降低的模型的方差)
使用实例:
这里仍然使用之前的数据集
from sklearn.ensemble import ExtraTreesClassifier
et_clf = ExtraTreesClassifier(n_estimators=500,bootstrap=True,oob_score=True,n_jobs=-1,random_state=666)
et_clf.fit(X,y)
et_clf.oob_score_