随机森林
随机森林是集成学习中Bagging算法的进化版,可用于分类和回归,分别对应sklearn中的RandomForestClassifier和RandomForestRegressor。
from sklearn.ensemble import RandomForestClassifier,RandomForestRegressor
重要的参数:
n_estimators:弱学习器的个数,一般在500-1000之间取值。一般n_estimators越大,表现越好,但计算量也会过大,默认10个
n_jobs:并行数,一般取-1,因为是Bagging类型的算法可以并行计算
max_features:划分时考虑的最大特征数。默认是None,表示考虑所有的特征数,如果样本特征数不多,比如小于50,用默认即可。若特征数很多,可以考虑取"log2","sqrt","auto"来控制最大特征数,以控制生成的时间
max_depth:决策树的最大深度,默认是none,表示直到叶子结点pure或者小于min_samples_split。数据少或者特征少的时候可以不管这个值,样本量多,特征也多的情况下,推荐限制这个最大深度,常用的可以取值10-100之间。
min_samples_split:内部节点再划分所需最小样本数.如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分,默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
min_samples_leaf:叶子节点最少样本数.如果某叶子节点数目小于该值,则会和兄弟节点一起被剪枝,默认是1。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
随机森林进行特征选择
主要结合了SelectFromModel的使用
from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier #一个用于回归,一个用于分类
from sklearn.feature_selection import SelectFromModel
forest=RandomForestRegressor(n_estimators=10000,random_state=0,n_jobs=-1) #在进行特征选择的随机森林就调整这3个的参数
forest.fit(x_train,y_train)
model = SelectFromModel(forest, threshold=0.0001,prefit=True) #根据特征的重要系数确定阈值,阈值的大小需要调参
x_train=model.transform(x_train)
x_test=model.transform(x_test)
# 观察每个特征的重要系数,以确定阈值的取值的大概范围
feat_labels=x_train.columns #特征名称
forest=RandomForestRegressor(n_estimators=10000,random_state=0,n_jobs=-1) #在进行特征选择的随机森林就调整这3个的参数
forest.fit(x_train,y_train)
importance=forest.feature_importances_
importance_dict={}
for i in range(len(feat_labels)):
importance_dict[feat_labels[i]]=importance[i]
importance_dict=sorted(importance_dict.items(),key=lambda item:item[1]) #按照字典中的value排序
print(importance_dict)